Problème de compilation de module pour le kernel linux [Résolu]

Signaler
Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
-
Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
-
Bonjour,

Je cherche à compiler le module qui dit bonjour. J'ai téléchargé les sources du kernel (linux-headers-2.6.27-11) et j'ai copié les en-têtes dans /usr/include.

Voici la source de ce que je désire compiler:

#include <linux/module.h>
#include <linux/init.h>

static int __init myModule__init(void){
printk(KERN_ALERT "Hello World !\n");
return 1;
}

static void __exit myModule_exit(void){
printk(KERN_ALERT "Bye all World !\n");
}

module_init(starting);
module_exit(exitting);

Mais quand je fais un gcc -c -lm module.c , j'ai une énorme quantité d'erreurs. En voici le début:

In file included from /usr/include/asm/processor.h:15,
                 from /usr/include/linux/prefetch.h:14,
                 from /usr/include/linux/list.h:6,
                 from /usr/include/linux/module.h:9,
                 from myDriver.c:1:
/usr/include/asm/current.h: In function ‘get_current’:
/usr/include/asm/current.h:25: erreur: expected expression before ‘struct’
/usr/include/asm/current.h:25: erreur: expected expression before ‘struct’
/usr/include/asm/current.h:25: erreur: expected expression before ‘struct’
In file included from /usr/include/asm/cmpxchg_64.h:4,
                 from /usr/include/asm/cmpxchg.h:4,

...etc...

J'ai regardé un peu partout mais je n'ai pas réussi à comprendre pourquoi ça me fesait ça. Mes headers sont mauvais? Je ne compile pas comme il faut?

PS.: je tourne sous ubuntu.

Merci.

2 réponses

Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
1
re bonjour,

Merci de ta réponse. Après avoir galéré pendant deux heures, je tiens la réponse. Le tuto que je suivais était obsolète.

Pour ceux qui auront le même problème, voici la solution, utilisez ce makefile:

#Note: ce Makefile provient du livre Linux Device Driver (3ème édition) des éditions O'Reilly, son utilisation
#est donc sujette à la licence Creative Common Non Commercial Share Alike (http://creativecommons.org/licenses/by-nc-sa/2.0/)

ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

Ordinateur : moyen conçu pour accélérer et automatiser les erreurs.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Des tutos sur le sujet doivent traîner. "Compilation linux/module.h" donne des résultats.

Par exemple.

Et voilà un guide de prog sur le sujet.