PatDef.fr

Accueil du site > Debian Linux > Linux Device Drivers > Fichiers minimums pour développer un module noyau Linux sous (...)

Fichiers minimums pour développer un module noyau Linux sous Debian

vendredi 14 novembre 2008, par patrick Deflandre

J’ai eu un peu de mal à compiler mon premier essai de module noyau Linux sous Debian. Voici un petit résumé de ce qu’il faut faire.

On installe le minimum requit pour Debian :

# 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...

Un fichier source hello.c :


#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?

Un fichier Makefile :


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.

Une commande de compilation :

$ make

On active un processus de visualisation de syslog :

$ 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.

On charge le driver :

# 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

On démonte le driver :

# rmmod hello

On doit alors voir dans syslog :

Nov 13 16:44:43 localhost kernel: Goodbye, cruel world

Félicitations

Voila, si vous avez passé toutes les étapes, vous faites maintenant parti des développeurs linux !


Suivre la vie du site RSS 2.0 | Contactez-moi | Plan du site | SPIP