Kernel module (Français) - ArchWiki

Jump to content
From ArchWiki
É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)

Categories:

- Kernel (Français)
- Hardware detection and troubleshooting (Français)
- Boot process (Français)