Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Les modules du noyau Linux : charger, décharger et fonctionnement

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.

Les modules du noyau Linux : charger, décharger et fonctionnement

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`
Où se trouvent les modules du noyau Linux

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
Le répertoire /lib/modules/ de Linux

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 lister les modules du noyaux Linux (lsmod)

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 charger un module du noyau Linux (insmod)

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 décharger un module du noyau Linux (rmmod)

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 charger/décharger un module du noyau Linux (modprobe)

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
Comment afficher des informations sur un module (modinfo)

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 afficher des informations sur un module (modinfo)

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"

L’article Les modules du noyau Linux : charger, décharger et fonctionnement est apparu en premier sur malekal.com.

Enregistrer un commentaire

0 Commentaires