Introduction
Auteur
- Le Linux Kernel Module Programming Guide a été initialement rédigé par Ori Pomerantz pour Linux v2.2
- Mis à jour par Peter Jay Salzman pour Linux v2.4
- Co-maintenu par Michael Burian pour Linux v2.6
- Exemples mis à jour par Bob Mottram pour les versions à partir de Linux v3.8
- Mise à jour vers les versions récentes de Linux (v5.0 et plus) et corrections de la documentation LaTeX par Jim Huang
Remerciements
- Plusieurs contributeurs ont fourni des corrections et des suggestions
Qu’est-ce qu’un module du noyau ?
- Un module du noyau Linux est un segment de code qui peut être chargé et déchargé dynamiquement dans le noyau selon les besoins
- Les modules du noyau permettent d’étendre les fonctionnalités du noyau sans redémarrer le système
- Sans modules, il faudrait reconstruire le noyau et redémarrer le système à chaque ajout de nouvelle fonctionnalité
Paquets de modules du noyau
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
Quels modules sont présents dans mon noyau ?
- La commande
lsmod permet de voir les modules actuellement chargés dans le noyau
- Il est aussi possible de les consulter dans le fichier
/proc/modules
Faut-il télécharger et compiler le noyau ?
- Il n’est pas nécessaire de télécharger et compiler le noyau pour suivre ce guide
- Il est plus sûr d’exécuter les exemples sur une distribution de test
Avant de commencer
- Points d’attention concernant la gestion des versions des modules, l’utilisation de X Window System, SecureBoot, etc.
En-têtes
- Il est nécessaire d’installer les fichiers d’en-tête du noyau
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
Exemples
- Tous les exemples se trouvent dans le sous-répertoire
examples de la documentation
Hello World
Le module le plus simple
- Création et compilation du fichier
hello-1.c
- Explication de la manière de charger et décharger le module
Hello et Goodbye
- Exemple d’utilisation des macros
module_init et module_exit
Macros __init et __exit
- La macro
__init libère la mémoire une fois la fonction d’initialisation terminée
- La macro
__exit omet la fonction lorsque le module est intégré au noyau
Licence et documentation du module
- Utilisation de la macro
MODULE_LICENSE pour définir la licence du module
- Exemples d’utilisation des macros
MODULE_AUTHOR et MODULE_DESCRIPTION
Passage d’arguments en ligne de commande
- Utilisation de la macro
module_param pour transmettre des arguments en ligne de commande au module
- Utilisation de la macro
MODULE_PARM_DESC pour ajouter une description des arguments
Modules répartis sur plusieurs fichiers
- Exemple de module du noyau réparti sur plusieurs fichiers source
Construction de modules pour un noyau précompilé
- Explication de la méthode de construction de modules pour un noyau précompilé
Résumé de GN⁺
- Ce guide est une présentation complète de la programmation des modules du noyau Linux, couvrant avec de nombreux exemples les concepts de base comme les sujets avancés
- Les modules du noyau permettent d’étendre les fonctionnalités du système sans redémarrage, ce qui constitue un avantage majeur pour les développeurs
- Il est important de bien comprendre et respecter les points d’attention liés à la gestion des versions des modules, à SecureBoot, etc.
- Parmi les projets liés figurent Linux Device Drivers et The Linux Programming Interface
1 commentaires
Avis Hacker News