Kernel module (Français)
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.
_
) 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.
/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
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
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
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.
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
.
--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)