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
MODULE_AUTHOR(« MOA »); MODULE_LICENSE(« GPL »); static int __init init_module_amoiquejai (void) static void __exit cleanup_module_amoiquejai (void) module_init(init_module_amoiquejai); |
Makefile 2.6 |
TARGET = helloWorld obj-m += $(TARGET).o all: 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 all: hello.o clean: |
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:
- http://pficheux.free.fr/articles/lmf/pci/
- http://www.courseforge.org/courses/fr/drivers1/
- Et pour les vrais de vrais, je vous conseille cet excellent bouquin ( ce pavé): Linux Device Drivers, Third Edition de Jonathan Corbet, Alessandro Rubini, et Greg Kroah-Hartman.
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.