vendredi 14 novembre 2008, par patrick Deflandre
# apt-get install linux-headers-`uname -r`
Remarque :
il n’est pas nécessaire pour l’exemple qui suit de compiler un noyau spécifique. La version fourni dans les archives Debian suffit. Il suffit donc de charger les fichiers headers du noyau en cours d’utilisation.
je suppose ici que vous avez déjà installé un environnement de développement : gcc, make...
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#define DRIVER_AUTHOR "C'est Moi<contact@mondomaine>"
#define DRIVER_DESC "A sample driver"
static __init int hello_init(void)
{
printk(KERN_ALERT "hello, world\n");
return 0;
}
static __exit void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL"); // Get rid of taint message by declaring code as GPL.
MODULE_AUTHOR(DRIVER_AUTHOR); // Who wrote this module?
MODULE_DESCRIPTION(DRIVER_DESC); // What does this module do?
obj-m := hello.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
Attention à la majuscule de Makefile.
$ make
$ tail -f /var/log/syslog
Remarque : pour lancer cette commande en tant qu’utilisateur, il faut faire parti du groupe adm. Sinon, il faut la lancer en tant que super utilisateur.
# insmod hello.ko
On vérifie le résultat dans syslog :
Nov 13 16:44:33 localhost kernel: hello, world
Il est aussi possible de vérifier que le module est chargé par la commande :
$ lsmod | grep hello
On peut consulter l’état du module dans /sys/module/hello
# rmmod hello
On doit alors voir dans syslog :
Nov 13 16:44:43 localhost kernel: Goodbye, cruel world
Voila, si vous avez passé toutes les étapes, vous faites maintenant parti des développeurs linux !