Chapitre 24. Modules de noyau

Le noyau Linux a une conception modulaire. Au démarrage, seul un noyau résident minimal est chargé dans la mémoire. Par la suite, chaque fois qu'un utilisateur demande une fonction qui n'est pas présente dans le noyau résident, un module de noyau est chargé dynamiquement dans la mémoire. Après un délai d'inactivité spécifié, le module peut être supprimé de la mémoire.

Le mécanisme prenant en charge le chargement dynamique de modules est un thread de noyau appelé kmod. Les modules ne sont chargés que s'ils sont nécessaires. Lorsque le noyau demande un module, le module est chargé avec toutes ses dépendances.

Red Hat Linux comprend également une tâche cron supprimant tous les modules non-utilisés toutes les dix minutes. La tâche cron est située dans le fichier /etc/cron.d/kmod. Reportez-vous à la la section intitulée Cron dans Chapitre 22 pour plus d'informations sur les tâches cron.

Lorsque vous installez Red Hat Linux, le matériel se trouvant sur votre système est analysé, et vous fournissez des informations sur la façon dont le système sera utilisé et les programmes qui devront être chargés. Sur la base de cette analyse et des informations que vous donnez, le programme d'installation décide quels modules doivent être chargés au démarrage. Le programme d'installation configure le mécanisme de chargement dynamique pour qu'il travaille en transparence. Si vous construisez votre propre noyau personnalisé, vous pouvez prendre toutes ces décisions vous-même.

Si vous ajoutez du nouveau matériel après l'installation et que le matériel nécessite un module de noyau, vous devez configurer le mécanisme de chargement dynamique. Kudzu détecte généralement le nouveau matériel. Vous pouvez également ajouter le nouveau pilote en éditant le fichier de configuration du module, /etc/modules.conf.

Par exemple, si votre système inclue un adaptateur réseau PCI EtherPower 10 SMC au moment de l'installation, le fichier de configuration du module contiendra la ligne suivante :

alias eth0 tulip

Après l'installation, si vous installez un second adaptateur réseau identique sur votre système, ajoutez la ligne suivante à /etc/modules.conf :

alias eth1 tulip

Consultez le Guide de référence Red Hat Linux officiel pour obtenir une liste alphabétique des modules de noyau et du matériel pris en charge par les modules.

Utilitaires de modules de noyau

Vous pouvez également utiliser un groupe de commandes pour répertorier, charger ou décharger des modules de noyau. Ces commandes sont utiles si vous voulez essayer différents modules ou voir si un module a bien été chargé.

La commande /sbin/lsmod permet d'afficher une liste des modules actuellement chargés.

Exemple 24-1. Exemple de résultats lsmod

Module                  Size  Used by
sr_mod                 15264   0 (autoclean)
mga                    95984   1
agpgart                23392   3
nfs                    79008   1 (autoclean)
lockd                  52464   1 (autoclean) [nfs]
sunrpc                 61328   1 (autoclean) [nfs lockd]
autofs                 11264   4 (autoclean)
3c59x                  25344   1 (autoclean)
ipchains               38976   0 (unused)
ide-scsi                8352   0
scsi_mod               95104   2 [sr_mod ide-scsi]
ide-cd                 26848   0
cdrom                  27232   0 [sr_mod ide-cd]
usb-uhci               20720   0 (unused)
usbcore                49664   1 [usb-uhci]

Comme vous pouvez le voir dans l'Exemple 24-1, lsmod affiche la taille, l'utilisation et les modules associés pour chaque module actuellement chargé.

Pour charger un module de noyau, vous pouvez utiliser la commande /sbin/insmod suivie du nom du module de noyau. Par défaut, insmod essaie de charger le module à partir des sous-répertoires /lib/modules/<version-noyau>/kernel/drivers. Il existe un sous-répertoire pour chaque type de module, comme le sous-répertoire net pour les pilotes d'interface réseau. Certains modules de noyau ont des dépendances de modules — d'autres modules doivent être chargés en premier pour que le chargement soit possible. Pour traiter ces dépendances, vous pouvez charger les dépendances puis charger ensuite le module souhaité, utiliser la commande /sbin/modprobe suivie du nom du module pour charger le module avec ses dépendances.

Par exemple, la commande

/sbin/modprobe tulip

permet de charger le module d'interface réseau tulip.

Pour décharger des modules de noyau, utilisez la commande /sbin/rmmod suivie du nom du module. L'utilitaire rmmod ne déchargera que les modules qui ne sont pas utilisés et qui ne constituent pas une dépendance d'autres modules en cours d'utilisation.

Par exemple, la commande

/sbin/rmmod tulip

permet de décharger le module d'interface réseau tulip.

modinfo constitue un autre utilitaire de module de noyau utile. Vous pouvez utiliser la commande /sbin/modinfo pour afficher des informations concernant un module de noyau. La syntaxe générale est :

/sbin/modinfo [options] <module>

Les options comprennent -d, qui affiche une brève description du module et -p, qui répertorie les paramètres pris en charge par le module. Pour une liste complète des options, reportez-vous à la page de manuel modinfo (man modinfo).