Problème de compilation de module pour le kernel linux

Résolu
TorTukiTu Messages postés 31 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 18 avril 2011 - 11 mars 2009 à 11:09
TorTukiTu Messages postés 31 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 18 avril 2011 - 11 mars 2009 à 20:24
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

TorTukiTu Messages postés 31 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 18 avril 2011 1
11 mars 2009 à 20:24
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.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 mars 2009 à 13:38
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.
0
Rejoignez-nous