Développer un module noyau sous Linux
![]()
Cet article explique comment coder son propre module noyau sous Linux. Il s'adresse aux débutants et ne nécessite pas forcément beaucoup de connaissances en programmation.
1. Les pré-requis
Pour pouvoir développer son propre module noyau, il vous faudra disposer du paquet kernel headers et d'un compilateur de langage c comme gcc par exemple.
Pour installer ces différents composants, ouvrez un terminal en root et lancez la commande suivante pour une distribution à base de RPM :
yum install kernel-headers gcc
Ou celle-ci pour une distribution à base de Debian :
sudo aptitude install linux-headers-`uname -r` build-essential
2. Le développement d'un module noyau
Voici un exemple assez simple de code source d'un module noyau. Celui-ci affiche simplement un "Hello world" à l'initialisation et un "Goodbye world" lors du déchargement du module. Le nom du fichier contenant ce code s'intitulera hello.c :
#include <linux/module.h>
#include <linux/kernel.h>
#define DRIVER_AUTHOR "Sebastien Bilbeau"
#define DRIVER_DESC "My First module"
int init_module(void) {
printk(KERN_INFO "Hello world.\n");
return 0;
}
void cleanup_module(void) {
printk(KERN_INFO "Goodbye world\n");
}
MODULE_LICENSE("GPL"); // La licence du module
MODULE_AUTHOR(DRIVER_AUTHOR); // L'auteur du module
MODULE_DESCRIPTION(DRIVER_DESC); // La description du module
3. La compilation du module
Pour compiler le module, lancez les commandes suivantes :
chmod 755 hello.c Makefile
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
Si tout ce passe bien, vous devriez obtenir les fichiers suivant :
# ls -lgrt hello.*
hello.o
hello.mod.c
hello.mod.o
hello.ko
4. L'utilisation du module
Attention, pour manipuler un module, il faut nécessairement avoir les droits root.
Pour le charger, il faudra utiliser la commande insmod comme ceci :
insmod hello.ko
On pourra vérifier qu'il est bien chargé en utilisant lsmod :
lsmod | grep hello
Si vous souhaitez afficher les informations relatives au module :
# modinfo hello.ko
filename: hello.ko
description: My First module
author: Sebastien Bilbeau
license: GPL
Dans le code de hello.c, nous avons utilisé la fonction printk, qui permet d'écrire un message dans le fichier /var/log/message. Nous allons donc maintenant observer le résultat de notre petit programme :
# cat /var/log/messages | grep -i hello
Jan 19 23:21:03 localhost kernel: Hello world.
Enfin, on pourra décharger le tout avec la commande rmmod :
rmmod hello.ko
Vous connaissez désormais les bases du développement des modules noyau pour Linux.


Créé en 2005, Tux-planet est un site qui a pour ambition de regrouper des articles sur Linux et le monde des logiciels libres. 





3 Commentaires pour "Développer un module noyau sous Linux"
Flux des commentaires de cet article Ajouter un commentaireEt après, il y a quoi.
Salut
Il n'y a pas une petite erreur dans le Makefile ? C'est pas plutôt obj-m := hello.o ?
Sinon, merci, article très intéressant, je sais enfin comment on crée un module
@ZzzZZZzzzZZzzz : j'ai fait quelques corrections, maintenant on peut utiliser directement la commande make pour compiler, c'est plus simple.