Kernel module (Français)

État de la traduction:
Cet article est la version francophone de
Kernel module
. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
General troubleshooting (Français)#Problèmes de démarrage
Noyau
Kernel parameters
Compile kernel module
Modules du noyau
sont des morceaux de code qui peuvent être chargés et déchargés dans le noyau à la demande. Ils étendent les fonctionnalités du noyau sans qu'il soit nécessaire de redémarrer le système.
Pour créer un module de noyau, vous pouvez lire
le Guide de programmation des modules du noyau Linux
. Un module peut être configuré comme intégré ou chargeable. Pour charger ou supprimer dynamiquement un module, il doit être configuré comme un module chargeable dans la configuration du noyau (la ligne relative au module affichera donc la lettre
M
).
Obtenir des informations
Les modules sont stockés dans
/usr/lib/modules/
kernel_release
. Vous pouvez utiliser la commande
uname -r
pour obtenir la version actuelle de votre noyau.
Note
Les noms de modules utilisent souvent des traits de soulignement (
_
) ou des tirets (
-
) ; cependant, ces symboles sont interchangeables lors de l'utilisation de la commande
modprobe
et dans les fichiers de configuration dans
/etc/modprobe.d/
.
Pour montrer quels modules du noyau sont actuellement chargés :
$ lsmod
Pour afficher des informations sur un module :
$ modinfo
nom_du_module
Pour lister les options qui sont définies pour un module chargé :
$ systool -v -m
nom_du_module
Pour afficher la configuration complète de tous les modules :
$ modprobe -c | less
Pour afficher la configuration d'un module particulier :
$ modprobe -c | grep
nom_du_module
Lister les dépendances d'un module (ou alias), y compris le module lui-même :
$ modprobe --show-depends
nom_du_module
Chargement automatique des modules
Aujourd'hui, tous les chargements de modules nécessaires sont gérés automatiquement par
udev
, donc si vous n'avez pas besoin d'utiliser de modules noyau hors-arbre, il n'est pas nécessaire de mettre les modules qui doivent être chargés au démarrage dans un fichier de configuration. Cependant, il y a des cas où vous pouvez vouloir charger un module supplémentaire pendant le processus de démarrage, ou en mettre un autre sur liste noire pour que votre ordinateur fonctionne correctement.
systemd
Les modules du noyau peuvent être explicitement listés dans des fichiers sous
/etc/modules-load.d/
pour que systemd les charge pendant le démarrage. Chaque fichier de configuration est nommé dans le style de
/etc/modules-load.d/
program
.conf
. Les fichiers de configuration contiennent simplement une liste de noms de modules du noyau à charger, séparés par des nouvelles lignes. Les lignes vides et les lignes dont le premier caractère non espace est
#
ou
;
sont ignorées.
/etc/modules-load.d/virtio-net.conf
# Chargement de virtio_net.ko au démarrage
virtio_net
Consultez
modules-load.d(5)
pour plus de détails.
Chargement précoce des modules
L'image
initramfs
peut ne pas contenir les modules du noyau demandés dans
/etc/modules-load.d/
, il peut également manquer les fichiers qui ont été définis dans ce dossier. Le chargement précoce des modules dépend du générateur d'initramfs utilisé :
mkinitcpio
: consultez
Mkinitcpio (Français)#MODULES
dracut
: consultez
Dracut#Early kernel module loading
booster
: consultez
Booster#Early module loading
Gestion manuelle des modules
Les modules du noyau sont gérés par des outils fournis par le paquet
kmod
. Vous pouvez utiliser ces outils manuellement.
Note
Si vous avez mis à jour votre noyau mais n'avez pas encore redémarré,
modprobe
échouera sans message d'erreur et sortira avec le code 1, car le chemin
/usr/lib/modules/$(uname -r)/
n'existe plus. Vérifiez manuellement si ce chemin existe lorsque
modprobe
a échoué pour déterminer si c'est le cas.
Pour charger un module :
# modprobe
nom_du_module
Pour charger un module par nom de fichier (c'est-à-dire un module qui n'est pas installé dans
/usr/lib/modules/$(uname -r)/
) :
# insmod filename [args]
Pour décharger un module :
# modprobe -r
nom_du_module
Ou, alternativement :
# rmmod
nom_du_module
Définir les options du module
Pour passer un paramètre à un module du noyau, vous pouvez le faire manuellement avec modprobe ou vous assurer que certains paramètres sont toujours appliqués en utilisant un fichier de configuration modprobe ou en utilisant la ligne de commande du noyau.
Manuellement au moment du chargement à l'aide de modprobe
La manière de base de passer des paramètres à un module est d'utiliser la commande
modprobe
. Les paramètres sont spécifiés sur la ligne de commande en utilisant de simples
key=value
assignations :
# modprobe
nom_du_module nom_du_paramètre=valeur_du_paramètre
Utilisation des fichiers dans /etc/modprobe.d/
Les fichiers du répertoire
/etc/modprobe.d/
peuvent être utilisés pour transmettre les paramètres des modules à
udev
, qui utilisera
modprobe
pour gérer le chargement des modules lors du démarrage du système. Les fichiers de configuration dans ce répertoire peuvent avoir n'importe quel nom, du moment qu'ils se terminent par l'extension
.conf
. La syntaxe est la suivante :
/etc/modprobe.d/myfilename.conf
options
nom_du_module nom_du_paramètre=valeur_du_paramètre
Par exemple :
/etc/modprobe.d/thinkfan.conf
# Sur les ThinkPads, cela permet au daemon 'thinkfan' de contrôler la vitesse du ventilateur.
options thinkpad_acpi fan_control=1
Note
Si l'un des modules concernés est chargé à partir de l'initramfs, vous devrez ajouter le fichier
.conf
approprié à
FILES
dans
mkinitcpio.conf
ou utiliser le fichier
modconf
.
hook
, puis
régénérez l'initramfs
pour inclure le fichier
.conf
. Pour consulter le contenu de l'initramfs par défaut, utilisez
lsinitcpio
.
Utilisation de la ligne de commande du noyau
Si le module est intégré au noyau, vous pouvez également passer des options au module en utilisant la ligne de commande du noyau. Pour tous les chargeurs d'amorçage courants, la syntaxe suivante est correcte :
nom_du_module.nom_du_paramètre=valeur_du_paramètre
Par exemple
thinkpad_acpi.fan_control=1
Ajoutez simplement ceci à la ligne de commande du noyau de votre chargeur d'amorçage, comme décrit dans
Paramètres du noyau
.
Aliasing
Les alias sont des noms alternatifs pour un module. Par exemple :
alias my-mod really_long_modulename
signifie que vous pouvez utiliser
modprobe my-mod
au lieu de
modprobe really_long_modulename
. Vous pouvez également utiliser des caractères génériques de type shell, ainsi
alias my-mod* really_long_modulename
signifie que
modprobe my-mod-something
a le même effet. Créez un alias :
/etc/modprobe.d/myalias.conf
alias monmod nom_de_module_très_long
Certains modules ont des alias qui sont utilisés pour les charger automatiquement lorsqu'ils sont nécessaires à une application. La désactivation de ces alias peut empêcher le chargement automatique mais permettra toujours le chargement manuel des modules.
/etc/modprobe.d/modprobe.conf
# Empêcher le chargement automatique de Bluetooth
alias net-pf-31 off
Liste noire
La liste noire, dans le contexte des modules du noyau, est un mécanisme permettant d'empêcher le chargement du module du noyau. Cela peut être utile si, par exemple, le matériel associé n'est pas nécessaire, ou si le chargement de ce module pose des problèmes : par exemple, il peut y avoir deux modules de noyau qui essaient de contrôler la même pièce de matériel, et les charger ensemble entraînerait un conflit.
Certains modules sont chargés en tant que partie de l'
initramfs
.
mkinitcpio -M
affichera tous les modules détectés automatiquement : pour empêcher l'initramfs de charger certains de ces modules, mettez-les sur liste noire dans un fichier
.conf
sous
/etc/modprobe.d
et il sera ajouté par le hook
modconf
pendant la génération de l'image. L'exécution de
mkinitcpio -v
listera tous les modules ajoutés par les différents hooks (par exemple, le hook
filesystems
, le hook
block
, etc.) N'oubliez pas d'ajouter ce fichier
.conf
au tableau
FILES
de
/etc/mkinitcpio.conf
si vous n'avez pas le hook
modconf
dans votre tableau
HOOKS
(par exemple si vous avez dévié de la configuration par défaut), et une fois que vous avez mis les modules sur liste noire
régénérez l'initramfs
, et redémarrez ensuite.
Utilisation des fichiers dans /etc/modprobe.d/
Créez un fichier
.conf
dans
/etc/modprobe.d/
et ajoutez une ligne pour chaque module que vous voulez mettre sur liste noire, en utilisant le mot-clé
blacklist
. Si par exemple vous voulez empêcher le chargement du module
pcspkr
pour éviter les sons avec le
bipeur du PC
:
/etc/modprobe.d/nobeep.conf
# Ne pas charger le module 'pcspkr' au démarrage.
blacklist pcspkr
Note
La commande
blacklist
met un module en liste noire afin qu'il ne soit pas chargé automatiquement, mais le module peut être chargé si un autre module non mis en liste noire en dépend ou s'il est chargé manuellement.
Cependant, il existe une solution de contournement pour ce comportement ; la commande
install
demande à modprobe d'exécuter une commande personnalisée au lieu d'insérer le module dans le noyau normalement, de sorte que vous pouvez forcer le module à toujours échouer au chargement avec :
/etc/modprobe.d/blacklist.conf
...
install
nom_du_module
/bin/true
...
Cela mettra effectivement sur liste noire ce module et tous les autres qui en dépendent.
Utilisation de la ligne de commande du noyau
Astuce
Cela peut être très utile si un module cassé rend impossible le démarrage de votre système.
Vous pouvez également mettre les modules sur liste noire à partir du chargeur d'amorçage.
Ajoutez simplement
module_blacklist=modname1,modname2,modname3
à la ligne de commande du noyau de votre chargeur d'amorçage, comme décrit dans
Paramètres du noyau
.
Note
Lorsque vous mettez sur liste noire plus d'un module, notez qu'ils sont séparés par des virgules uniquement. Les espaces ou toute autre chose pourraient vraisemblablement rompre la syntaxe.
Dépannage
Les modules ne se chargent pas
Dans le cas où un module spécifique ne se charge pas et que le journal de démarrage (accessible en exécutant
journalctl -b
en tant que root) indique que le module est sur liste noire, mais que le répertoire
/etc/modprobe.d/
ne montre pas d'entrée correspondante, vérifiez dans un autre répertoire source de modprobe à
/usr/lib/modprobe.d/
les entrées de liste noire.
Un module ne sera pas chargé si la chaîne "vermagic" contenue dans le module du noyau ne correspond pas à la valeur du noyau en cours d'exécution. Si l'on sait que le module est compatible avec le noyau en cours d'exécution, la vérification de "vermagic" peut être ignorée avec
modprobe --force-vermagic
.
Attention
Ignorer les vérifications de version d'un module du noyau peut provoquer un plantage du noyau ou un comportement non défini du système en raison de l'incompatibilité. N'utilisez
--force-vermagic
qu'avec la plus grande prudence.
Voir aussi
Désactiver le bip du haut-parleur du PC
Writing a WMI driver
- an LWM introduction (en anglais)