Développer un module noyau sous Linux


Kernel module
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.


4 Commentaires pour "Développer un module noyau sous Linux"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Et après, il y a quoi.

    RépondreRépondre
    Et après... , le 26 septembre 2010 à 19:14
  •  

    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 :D

    RépondreRépondre
    ZzzZZZzzzZZzzz , le 3 février 2011 à 13:23
  •  

    @ZzzZZZzzzZZzzz : j'ai fait quelques corrections, maintenant on peut utiliser directement la commande make pour compiler, c'est plus simple.

    RépondreRépondre
    pti-seb , le 3 février 2011 à 23:54
  •  

    svp comment je peux rècuperer des arguments dans un module? les param? expliquez a moi!

    RépondreRépondre
    abdennabi , le 4 mai 2013 à 00:00
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum