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 pour que systemd les charge pendant le démarrage. Chaque fichier de configuration est nommé dans le style de . 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 , 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é :
- : consultez Mkinitcpio (Français)#MODULES
- : consultez Dracut#Early kernel module loading
- : consultez Booster#Early module loading
Gestion manuelle des modules
Les modules du noyau sont gérés par des outils fournis par le paquet . Vous pouvez utiliser ces outils manuellement.
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 ) :
# 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 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 peuvent être utilisés pour transmettre les paramètres des modules à udev, qui utilisera 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 :
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 : signifie que vous pouvez utiliser au lieu de . Vous pouvez également utiliser des caractères génériques de type shell, ainsi alias my-mod* really_long_modulename
signifie que a le même effet. Créez un alias :
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.
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. 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 pendant la génération de l'image. L'exécution de listera tous les modules ajoutés par les différents hooks (par exemple, le hook , le hook , etc.) N'oubliez pas d'ajouter ce fichier .conf au tableau FILES
de si vous n'avez pas le hook dans votre tableau (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 et ajoutez une ligne pour chaque module que vous voulez mettre sur liste noire, en utilisant le mot-clé . Si par exemple vous voulez empêcher le chargement du module 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
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 à 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 en tant que root) indique que le module est sur liste noire, mais que le répertoire ne montre pas d'entrée correspondante, vérifiez dans un autre répertoire source de modprobe à 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
.
Voir aussi
- Désactiver le bip du haut-parleur du PC
- Writing a WMI driver - an LWM introduction (en anglais)