Compilation module pour noyau 2.6

Article originellement écrit par Rajendra David pour http://blog.emax.ath.cx le lundi 5 février 2007 à 22:52
Bien l’astuce d’aujourd’hui concerne la compilation de module.
Pour la petite histoire, j’ai voulu me frotter à l’écriture de module pour noyau 2.6, avec des docs pour 2.4 …

Hello World

Vous trouverez à la fin un petit fichier de départ pour vous faire les dents.

C’est un simple Hello World avec la bonne syntaxe avec un Makefile tout simple mais qui contient ces foutues lignes que j’ai mis 2h à trouver.
Il faut savoir que pour les noyaux 2.6, les modules ne sont plus en .o mais en .ko, c’est « obj-m += $(TARGET).o » qui transfome en .ko.

helloWorld.c
#include #include #include MODULE_DESCRIPTION(« HelloWorld »);
MODULE_AUTHOR(« MOA »);
MODULE_LICENSE(« GPL »);

static int __init init_module_amoiquejai (void)
{
printk (« <1>Hello World !!!\n »);
return 0;
}

static void __exit cleanup_module_amoiquejai (void)
{
printk (« <1>Puiskon ne veut pas de moi, jme tire !!!!\n »);
//return 1;
}

module_init(init_module_amoiquejai);
module_exit(cleanup_module_amoiquejai);

Makefile 2.6
TARGET = helloWorld
obj-m += $(TARGET).o

all:
make -C /usr/src/linux M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Pour culture, un Makefile pour 2.4 ressemble à ça:

Makefile 2.4
KERNELDIR = /usr/src/linux

include $(KERNELDIR)/.config

CFLAG = -D__KERNEL__ -DMODULE I$(KERNELDIR)/include \ -O Wall

ifdef CONFIG_SMP
CFLAGS += -D__SMP__ -DSMP
endif

all: hello.o

clean:
rm f *.o

Chti problème

Concernant les petits probèmes, si vous vous heurtez à l’erreur suivante:

Error inserting ‘./helloWorld.ko’: -1 Invalid module format

Cette erreur semblerait être due à un problème de compilateur.

Veillez à compiler le module avec la version du noyau de destination. Il faut renseigner le bon chemin du noyau dans le Makefile. Au lieu de ‘/usr/src/linux’, mettez le bon chemin ou changez le lien symbolique.

ln -s /usr/src/linux-2.6.12 /usr/src/linux

Si l’erreur persiste, pensez à désactiver le contrôle des versions des modules dans la configration du noyau.
Et si ça persiste encore, lorsque vous compilerez votre code, levez la jambe droite en tenant une petite cuillière de la main gauche avec de la confiture de coin et espérez…

Lecture

Si vous ne savez pas quoi lors des chaudes soirées d’hiver, voilà un peu de lecture:

Vous le trouverez sur le net assez facilement mais voici quand même un lien: http://lwn.net/images/pdf/LDD3/TITLE.pdf

Attention, cette version est pour le noyau 2.6, il existe aussi bien sûr pour les versions précédentes.

Ce contenu a été publié dans Linux. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire