Pour rendre le noyau Linux plus flexible et éviter de devoir le recompiler lorsque l’on souhaite charger un pilote, une fonctionnalité spécifique, les concepteurs ont ajouté les modules.
Qu’est-ce qu’un module et comment cela fonctionne ? Comment charger, décharger, lister les modules du noyau Linux ?
Dans ce tutoriel, je vous dit tout sur le fonctionnement des modules du kernel Linux.

Table des matières
- 1 Qu’est-ce qu’un module du noyau Linux
- 2 Où se trouvent les modules du noyau Linux
- 3 Comment lister les modules du noyaux Linux (lsmod)
- 4 Comment charger un module du noyau Linux (insmod)
- 5 Comment décharger un module du noyau Linux (rmmod)
- 6 Comment charger/décharger un module du noyau Linux (modprobe)
- 7 Comment afficher des informations sur un module (modinfo)
- 8 Comment charger un module au démarrage de Linux
- 9 Comment blacklister un module
- 10 Liens
Qu’est-ce qu’un module du noyau Linux
Un noyau monolithique, bien que plus rapide qu’un micro-noyau, présente l’inconvénient du manque de modularité et d’extensibilité. Sur les noyaux monolithiques modernes, cela a été résolu en utilisant des modules de noyau.
Un module de noyau est un fichier d’objet qui contient du code qui peut étendre la fonctionnalité du noyau.
Lorsqu’un module de noyau n’est plus nécessaire, il peut être déchargé. La plupart des pilotes de l’appareil sont utilisés sous forme de modules de noyau.
Un module de noyau est une image binaire contenant du code et des structures de données qui s’exécute dans le noyau Unix. Il a les caractéristiques suivantes : est chargé statiquement ou chargé dynamiquement en mémoire sans avoir besoin de recompiler le noyau Linux.
Dans ce dernier cas, cela est possible grâce à modules-assistant.
Un module du noyau Linux se présente sous la forme d’un fichier avec l’extension .ko
Cela peut être un pilote ou un module réseau, système de fichiers, cryptographique.
Par exemple netfilter a des modules spécifiques pour iptables pour étendre les fonctionnalités de ce dernier.
Où se trouvent les modules du noyau Linux
Les modules du Kernel Linux se trouvent dans le dossier : /lib/modules/<version du noyaux>
Par exemple, si votre noyaux Linux est en version 5.10.0-16-rt-amd64, l’emplacement des modules sera /lib/modules/5.10.0-16-rt-amd64.
Vous pouvez l’obtenir plus rapidement avec la commande :
/lib/modules/`uname -r`
Voici un descriptif du contenu du répertoire.
Notez que le contenu diffère d’une distribution à l’autre selon les modules disponibles dans le package du kernel.
arch/ | Les modules liés aux processeurs, cryptographie, kvm |
block/ | périphériques de type bloc |
crypto/ | les modules liés à la cryptographique |
drivers/ | Tous les pilotes avec un répertoire pour chaque type de périphériques |
fs/ | systèmes de fichier (FAT, ext4, etc.) |
kernel/ | Modules liés au noyaux Linux comme kheaders |
lib/ | La plupart sont liés à la cryptographique (lz4, crc), des modules raid6 |
mm/ | Modules Memory Managment (hwpoison-inject, z3fold et zsmalloc) |
net/ | pilotes des cartes réseaux et protocoles (802, bluetooth, netfilter, sctp, …) |
samples/ | Modules ftrace |
sound/ | Les modules liés au son (isa, i2c, pcmcia), les codecs comme ac97 les pilotes comprenant aussi firewire |
video/ | gestion des cartes video en console, framebuffer |
virt/ | Module irqbypass |
zfs/ | Les modules pour ZFS |
Comment lister les modules du noyaux Linux (lsmod)
La commande lsmod permet de lister les modules actuellement chargés dans le noyaux Linux.
La sortie se présente sous forme de tableau avec le nom du module, la taille et les modules qui l’utilisent (dépendance).
Celle-ci lit en réalité le contenu de /proc/modules.
Comment charger un module du noyau Linux (insmod)
insmod est une commande qui permet d’insérer un module dans le noyau Linux.
Vous devez spécifier le chemin complet du module :
sudo insmod /lib/modules/`uname -r`/kernel/XXX/XXX.ko
Par exemple pour insérer le module bfq :
sudo insmod /lib/modules/`uname -r`/kernel/block/bfq.ko
Comment décharger un module du noyau Linux (rmmod)
La commande rmmod permet de décharger un module du noyau Linux.
Ce dernier ne sera plus actif en mémoire.
La syntaxe est :
sudo rmmod <nom du module>
Par exemple pour décharger bfq :
sudo rmmod bfq
Comment charger/décharger un module du noyau Linux (modprobe)
modprobe est une commande qui vous permet à la fois d’ajouter ou supprimer un module du noyau Linux.
Pour cela, elle regarde dans le répertoire du module /lib/modules/`uname -r` pour tous les modules et autres fichiers, à l’exception des fichiers de configuration facultatifs dans le répertoire /etc/modprobe.d.
De plus, vous n’avez pas à spécifier le chemin complet du module.
Pour ajouter un module au noyau Linux avec modprobe :
sudo modprobe <nom du module>
Par exemple :
sudo modprobe bfq
Pour retirer un module du noyau Linux avec modprobe, utilisez l’option -r (remove).
Cela va aussi décharger tous les modules qui en dépendent :
sudo modprobe -r bfq
Comment afficher des informations sur un module (modinfo)
Pour afficher les informations d’un module, il faut utiliser la commande modinfo en spécifiant le nom du module.
On y trouve notamment l’alias, licence, les dépendances, les options (parm) et vermagic ainsi que les informations de signatures.
sudo modinfo <nom du module>
Par exemple, pour afficher les informations du module bfq :
sudo modinfo bfq
Si vous ne spécifiez pas le chemin, modinfo prendra les infos du module lié à la version du noyau Linux actif.
Sinon spécifiez le chemin complet :
sudo modinfo /lib/modules/4.19.0-17-amd64/kernel/block/bfq.ko
Comment charger un module au démarrage de Linux
Pour charger un module au démarrage de Linux, il existe trois méthodes :
- Modifiez le fichier /etc/modules (remplace /etc/modules.conf) en indiquant les modules à charger (si SysV utilisé)
- Créez un nouveau fichier de configuration dans le répertoire /etc/modules-load.d/ (si systemd utilisé)
Voici comment faire :
- Editez le fichier suivant :
sudo vi /etc/modules
- ou créez un fichier de configuration. Par exemple pour Virtualbox :
sudo vi /etc/modules-load.d/VirtualBox.conf
- Puis ajoutez la liste des modules à charger au démarrage de Linux :
vboxdrv
vboxnetflt
vboxnetadp
- Enregistrez les modifications puis redémarrez l’appareil pour tester que le module se charge bien au démarrage de Linux
Comment blacklister un module
Linux gère aussi une liste noire des modules afin de bloquer leur chargement.
Celle-ci est disponible dans le fichier de configuration /etc/modprobe.d/blacklist.conf (même si on peut utiliser n’importe quel fichier en utilisant la syntaxe blacklist).
Pour ajouter bfq dans la liste noire :
echo "blacklist bfq" >> /etc/modprobe.d/blacklist.conf
Il est aussi possible de blacklister un module du noyau dans le chargeur de démarrage, par exemple dans la configuration de GRUB.
Notamment en modifiant le fichier /etc/default/grub.
La liste noire s’applique alors très tôt, il existe aussi pour cela deux commandes.
La commande rd.driver.blacklist qui s’applique lorsque le noyau est chargé à partir de l’image de démarrage Linux (initramfs).
Sinon l’option modprobe.blacklist qui s’applique plus tard, après que le système de fichier racine soit chargé.
Séparez les modules par des virgules :
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=<module du noyau>,<module du noyau>"
Par exemple :
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=xhci_hcd,bfq"
Liens
- Système d’exploitation et OS : qu’est-ce que c’est ? comment ça marche ?
- Qu’est-ce que le noyau d’un OS (Kernel)
- Qu’est-ce que le Noyau Linux (kernel) : rôle, versions et comment ça marche
- Les modules du noyau Linux : charger, décharger et fonctionnement
- Comment compiler le noyau Linux
- Utiliser modprobe et configurer /etc/modprobe.d/
- Ajouter un module du noyau Linux avec module assistant sur Debian
- Qu’est-ce que initrd dans Linux : rôle et comment ça marche
- Qu’est-ce que vmlinuz dans Linux
- Comment connaître la version du noyau Linux
- sysctl : paramétrer le noyau Linux
- NTFS, EXT4 : Comprendre les systèmes de fichiers