Module noyau linux: les erreurs dans module.h [Résolu/Fermé]
Signaler
stardz31
manelz
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
manelz
- Messages postés
- 23
- Date d'inscription
- vendredi 20 avril 2012
- Statut
- Membre
- Dernière intervention
- 29 novembre 2012
A voir également:
- Module noyau linux: les erreurs dans module.h
- Module noyau linux: les erreurs dans module.h ✓ - Forum - Programmation
- Faille de sécurité dans le noyau Linux - Actualités
- Windows 10 intégrera bientôt un vrai noyau Linux - Comment Ça Marche - Actualités
- Erreur 1327 lecteur:H:/non valide ✓ - Forum - Logiciels
- Linux Bash - erreur de syntaxe fin de fichier prématurée ✓ - Forum - Linux / Unix
6 réponses
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
Salut,
affiche ce que tu as fait si tu veux trouver d'aide ;-)
affiche ce que tu as fait si tu veux trouver d'aide ;-)
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Génial!
Voui dis-nous tout: comment tu as compilé (quel est le contenu du makefile et le contenu de ton fichier source. Et l'intégralité des erreurs lors de la compilation.
Pour une fois que quelqu'un pose une question pour faire un driver Linux, on va pas rater ça ;-)
Voui dis-nous tout: comment tu as compilé (quel est le contenu du makefile et le contenu de ton fichier source. Et l'intégralité des erreurs lors de la compilation.
Pour une fois que quelqu'un pose une question pour faire un driver Linux, on va pas rater ça ;-)
stardz31
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
alors pour le moment c un simple hello_world.c :
----------------------------
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
-------------------------------
et le makefile :
----------------------------------
obj−m += hello−1.o
all:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
clean:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean
----------------------------------
et un autre Makefile:
--------------------------------
TARGET := hello-1
WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC := gcc-3.0
${TARGET}.o: ${TARGET}.c
.PHONY: clean
clean:
rm -rf {TARGET}.o
------------------------------
ce deuxième makefile je l'ai trouvé dans un fichier qui dit qu'il faut avoir gcc-3.0 pour faire -isystem pour les avertissements de module.h
Et pour mon module noyau c pas un driver mais un Protocol Helper pour le protocole SIP il doit faire une translation d'adresse de destination des paquets SIP traversant le NAT (masquerade pour être précise), et je ss loin de pouvoir le compléter car pour le moment je ne pe compiler aucun module même pas helloworld !!!
j'ai besoin d'une solution rapidement
Merci
----------------------------
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
-------------------------------
et le makefile :
----------------------------------
obj−m += hello−1.o
all:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
clean:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean
----------------------------------
et un autre Makefile:
--------------------------------
TARGET := hello-1
WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC := gcc-3.0
${TARGET}.o: ${TARGET}.c
.PHONY: clean
clean:
rm -rf {TARGET}.o
------------------------------
ce deuxième makefile je l'ai trouvé dans un fichier qui dit qu'il faut avoir gcc-3.0 pour faire -isystem pour les avertissements de module.h
Et pour mon module noyau c pas un driver mais un Protocol Helper pour le protocole SIP il doit faire une translation d'adresse de destination des paquets SIP traversant le NAT (masquerade pour être précise), et je ss loin de pouvoir le compléter car pour le moment je ne pe compiler aucun module même pas helloworld !!!
j'ai besoin d'une solution rapidement
Merci
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
Re,
regarde ici pour un simple "Hello world!" (voir chapitre 4)
http://pficheux.free.fr/articles/lmf/drivers/
regarde ici pour un simple "Hello world!" (voir chapitre 4)
http://pficheux.free.fr/articles/lmf/drivers/
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Salut,
d'accord, je n'ai pas fait attention
En fait, notre amie c'est inspiré ici https://tldp.org/LDP/lkmpg/2.6/html/x121.html#AEN128 , je suppose ;-)
d'accord, je n'ai pas fait attention
En fait, notre amie c'est inspiré ici https://tldp.org/LDP/lkmpg/2.6/html/x121.html#AEN128 , je suppose ;-)
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
Ah oui tiens! Hop dans mes bookmarks :-)
Moi je m'inspire de ça:
https://lwn.net/Kernel/LDD3/
Le chapitre 2 a toujours fonctionné chez moi, et je me souviens avoir essayé avec Debian Etch.
Moi je m'inspire de ça:
https://lwn.net/Kernel/LDD3/
Le chapitre 2 a toujours fonctionné chez moi, et je me souviens avoir essayé avec Debian Etch.
stardz31
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Bonjour
ça va bien Mr kilian,
stp j'ai besoin de ton aide si possible le plutot
Ben,
sur un PC il y a Linux debian etch installé
et il y avait avant windows xp,
d'abord il y a eu un probleme depuis linux windows ne marcher plus
alors hier on a refait l'installation de windows sans avoir toucher linux
alors maintenant au démarrage linux n'est pas reconnu il démarre avec windows directement
Je sais pas quoi faire !!!
j'ai besoin de mes fichiers linux
Linux est toujours la mais je sais plus comment y accéder au démarrage
Si t'a une réponse j'attend avec impatience
MERCI
ça va bien Mr kilian,
stp j'ai besoin de ton aide si possible le plutot
Ben,
sur un PC il y a Linux debian etch installé
et il y avait avant windows xp,
d'abord il y a eu un probleme depuis linux windows ne marcher plus
alors hier on a refait l'installation de windows sans avoir toucher linux
alors maintenant au démarrage linux n'est pas reconnu il démarre avec windows directement
Je sais pas quoi faire !!!
j'ai besoin de mes fichiers linux
Linux est toujours la mais je sais plus comment y accéder au démarrage
Si t'a une réponse j'attend avec impatience
MERCI
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
Salut,
Oui, Windows a écrasé le chargeur de Linux (Grub ou Lilo) et il va falloir le réinstaller, tout en prenant en compte le chargeur de Windows.
Poste ton problème dans le forum Linux, il y a des gens plus compétents que moi dans ce domaine :-)
http://www.commentcamarche.net/forum/forum 13 linux unix
Oui, Windows a écrasé le chargeur de Linux (Grub ou Lilo) et il va falloir le réinstaller, tout en prenant en compte le chargeur de Windows.
Poste ton problème dans le forum Linux, il y a des gens plus compétents que moi dans ce domaine :-)
http://www.commentcamarche.net/forum/forum 13 linux unix
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
Salut,
demarre avec le cd d'installation et quand tu arrives à
Press F1 for help, or Enter to boot :
tape rescue
tu vas passer plusieurs étapes (choisir la langue, configurer réseau,etc.) et à un moment donné tu arriveras sur un écran qui te proposera des opérations de récupérations, parmi lesquelles tu trouveras :
Réinstallation de programme de démarrage GRUB
P.S. Je suis d'accord avec kilian, nouveau problème nécessite l'ouverture d'un nouveau sujet.
demarre avec le cd d'installation et quand tu arrives à
Press F1 for help, or Enter to boot :
tape rescue
tu vas passer plusieurs étapes (choisir la langue, configurer réseau,etc.) et à un moment donné tu arriveras sur un écran qui te proposera des opérations de récupérations, parmi lesquelles tu trouveras :
Réinstallation de programme de démarrage GRUB
P.S. Je suis d'accord avec kilian, nouveau problème nécessite l'ouverture d'un nouveau sujet.
stardz31
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
et les erreurs que j'obtiens sont du genre :
...
/usr/include/linux/sched.h:1564: error: dereferencing pointer to incomplete type
/usr/include/linux/sched.h: Dans la fonction "thaw_process" :
/usr/include/linux/sched.h:1573: error: dereferencing pointer to incomplete type
.... bcp d'autres erreurs dans sched.h
In file included from /usr/include/linuxmodule.h:12,
from hello.c: 4 :
/usr/include/linux/stat.h: Hors de toute fonction :
/usr/include/linux/stat.h:61: error: erreur de syntaxe before "dev_t"
... bcp d'erreur dans stat.h aussi
et de même avec ipc.h, desc.h, module.h
une fois j'ai même enlevé "include<linux/module.h>" et ça s'est compilé très bien et j'ai eu un fichier .o
mais il me faut aussi d'après ce que j'ai vu il faut qu'il soit (.ko) car je suis sur 2.6.x
si il y a une reponse PLEASE !!!
...
/usr/include/linux/sched.h:1564: error: dereferencing pointer to incomplete type
/usr/include/linux/sched.h: Dans la fonction "thaw_process" :
/usr/include/linux/sched.h:1573: error: dereferencing pointer to incomplete type
.... bcp d'autres erreurs dans sched.h
In file included from /usr/include/linuxmodule.h:12,
from hello.c: 4 :
/usr/include/linux/stat.h: Hors de toute fonction :
/usr/include/linux/stat.h:61: error: erreur de syntaxe before "dev_t"
... bcp d'erreur dans stat.h aussi
et de même avec ipc.h, desc.h, module.h
une fois j'ai même enlevé "include<linux/module.h>" et ça s'est compilé très bien et j'ai eu un fichier .o
mais il me faut aussi d'après ce que j'ai vu il faut qu'il soit (.ko) car je suis sur 2.6.x
si il y a une reponse PLEASE !!!
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Tiens voici un Makefile générique tiré du livre "Linux Device Drivers 3ème edition" des edition O'reilly
Tu remplaces test.o par hello.o si ton fichier s'appelle hello.c
Dis moi ce que ça donne.
(Chez moi ça marche bien et le module affiche bien ce qu'il faut dans les logs)
(interessant ton projet)
ifneq ($(KERNELRELEASE),) obj-m := test.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif
Tu remplaces test.o par hello.o si ton fichier s'appelle hello.c
Dis moi ce que ça donne.
(Chez moi ça marche bien et le module affiche bien ce qu'il faut dans les logs)
(interessant ton projet)
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
Il semble qu'il n'ait rien compilé.
Tu n'as pas de fichier en .ko?
Tu as bien mis dans le même repertoire ton Makefile et ton fichier hello.c ?
Appelle le bien hello.c pour le retrouver sous le nom hello.o dans le Makefile.
j'ai trouvé un fichier "Module.symvers" !!!
C'est un fichier qui recence les fonctions que tu veux exporter aux autres modules.
Quand tu veux exporter une fonction (on va l'appeler "test") que tu as créé dans ton module, tu l'exportes avec cette macro:
Et tu retrouveras sa référence dans Module.symvers, sinon il sera vide. Mais tu n'en a pas besoin pour l'instant.
Tiens, je t'ai fait une version qui marche bien chez moi:
http://thesermon.free.fr/arch/hello.tar.bz2
Tu n'as pas de fichier en .ko?
Tu as bien mis dans le même repertoire ton Makefile et ton fichier hello.c ?
Appelle le bien hello.c pour le retrouver sous le nom hello.o dans le Makefile.
j'ai trouvé un fichier "Module.symvers" !!!
C'est un fichier qui recence les fonctions que tu veux exporter aux autres modules.
Quand tu veux exporter une fonction (on va l'appeler "test") que tu as créé dans ton module, tu l'exportes avec cette macro:
EXPORT_SYMBOL(test);
Et tu retrouveras sa référence dans Module.symvers, sinon il sera vide. Mais tu n'en a pas besoin pour l'instant.
Tiens, je t'ai fait une version qui marche bien chez moi:
http://thesermon.free.fr/arch/hello.tar.bz2
stardz31
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
kilian
Je sé pas quoi te dire
t trop génial !!!!!!
CA MARCHE !!!!!
je te remercie infiniment
tu ne sé pas combien ça me fait plaisir
tu mérite un gros cadeau
salut, et a+
Je sé pas quoi te dire
t trop génial !!!!!!
CA MARCHE !!!!!
je te remercie infiniment
tu ne sé pas combien ça me fait plaisir
tu mérite un gros cadeau
salut, et a+
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
- Messages postés
- 19
- Date d'inscription
- dimanche 18 mai 2008
- Statut
- Membre
- Dernière intervention
- 18 janvier 2009
Merci, n'hésite pas si tu as d'autres soucis avec la programmation noyau!
manelz
- Messages postés
- 23
- Date d'inscription
- vendredi 20 avril 2012
- Statut
- Membre
- Dernière intervention
- 29 novembre 2012
je tape cette commande $ cc -O -DMODULE -D__KERNEL__ -c hello.c
et voila le message affiché :
hello.c:4: erreur: expected `=', `,', `;', `asm' or `__attribute__' before `<' token
hello.c: In function `init_module':
hello.c:8: erreur: `KERN_INFO' undeclared (first use in this function)
hello.c:8: erreur: (Each undeclared identifier is reported only once
hello.c:8: erreur: for each function it appears in.)
hello.c:8: erreur: expected `)' before string constant
hello.c: In function `cleanup_module':
hello.c:16: erreur: `KERN_INFO' undeclared (first use in this function)
hello.c:16: erreur: expected `)' before string constant
et voila le message affiché :
hello.c:4: erreur: expected `=', `,', `;', `asm' or `__attribute__' before `<' token
hello.c: In function `init_module':
hello.c:8: erreur: `KERN_INFO' undeclared (first use in this function)
hello.c:8: erreur: (Each undeclared identifier is reported only once
hello.c:8: erreur: for each function it appears in.)
hello.c:8: erreur: expected `)' before string constant
hello.c: In function `cleanup_module':
hello.c:16: erreur: `KERN_INFO' undeclared (first use in this function)
hello.c:16: erreur: expected `)' before string constant