Gérer les modules du noyau sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez acquérir les techniques fondamentales pour gérer les modules du noyau dans un environnement Linux. Vous explorerez comment lister les modules actuellement chargés pour visualiser les composants actifs du système et comment inspecter chaque module individuellement afin de comprendre ses détails, tels que son rôle, ses dépendances et divers autres paramètres.

En vous appuyant sur ces compétences d'inspection, vous vous exercerez à décharger et charger dynamiquement des modules depuis le noyau en cours d'exécution. Enfin, vous apprendrez à configurer le système pour qu'il charge automatiquement un module spécifique au démarrage, garantissant ainsi que les fonctionnalités essentielles soient disponibles sans intervention manuelle après un redémarrage.

Lister et inspecter les modules du noyau avec lsmod et modinfo

Dans cette étape, vous apprendrez à lister les modules du noyau actuellement chargés et à inspecter leurs détails. Le noyau Linux est modulaire, ce qui signifie que certaines parties de ses fonctionnalités peuvent être chargées ou déchargées à la demande. Ces composants chargeables dynamiquement sont appelés modules du noyau, et ils correspondent souvent à des pilotes de périphériques, des pilotes de systèmes de fichiers ou des appels système.

Tout d'abord, visualisons l'état de tous les modules du noyau actuellement chargés dans le noyau de votre système. La commande lsmod fournit une liste claire et lisible. Comme la liste peut être assez longue, nous allons rediriger sa sortie vers l'utilitaire less pour faciliter la navigation.

Exécutez la commande suivante dans votre terminal :

lsmod | less

Vous verrez une liste de modules. La sortie est organisée en trois colonnes : Module, Size et Used by.

  • Module : Le nom du module du noyau.
  • Size : La taille du module en octets.
  • Used by : Le nombre d'autres modules ou processus utilisant actuellement ce module, suivi de la liste des modules dépendants.

Votre sortie ressemblera à ceci :

Module                  Size  Used by
nls_iso8859_1          16384  1
nls_cp437              20480  1
vfat                   20480  1
fat                    69632  1 vfat
...

Vous pouvez faire défiler la liste à l'aide des touches fléchées. Appuyez sur q pour quitter le visionneur less et revenir à l'invite de commande.

Maintenant que vous savez comment lister les modules, obtenons des informations détaillées sur l'un d'entre eux. La commande modinfo affiche divers détails sur un module du noyau, tels que son nom de fichier, sa licence, sa description, son auteur et ses dépendances.

Inspectons le module parport, qui est lié au port parallèle.

modinfo parport

La commande affichera des informations détaillées sur le module parport.

filename:       /lib/modules/x.x.x-xx-generic/kernel/drivers/parport/parport.ko
license:        GPL
description:    Parallel port driver
author:         Philip Blundell, Tim Waugh, Grant Grundler
srcversion:     <some_version_string>
depends:
retpoline:      Y
intree:         Y
vermagic:       x.x.x-xx-generic SMP mod_unload
sig_id:         ...
signer:         ...
sig_key:        ...
sig_hashalgo:   ...
signature:      ...

Cette sortie vous indique l'emplacement exact du fichier du module (fichier .ko), sa licence, une brève description, et plus encore. Notez que le champ depends est vide, ce qui indique que ce module n'a pas de dépendances.

Les modules dépendent souvent d'autres modules. La commande depmod crée une liste des dépendances de modules en analysant les modules présents dans /lib/modules/$(uname -r). Cela permet au système de charger automatiquement les modules requis. Générons ce fichier de dépendances. Cette commande nécessite des privilèges root, nous utiliserons donc sudo.

sudo depmod

Cette commande ne produit généralement aucune sortie en cas de succès. Elle crée ou met à jour un fichier nommé modules.dep dans le répertoire des modules du noyau. La partie $(uname -r) du chemin est une substitution de commande qui insère la version actuelle de votre noyau.

Maintenant, visualisons le fichier de dépendances que vous venez de générer.

less /lib/modules/$(uname -r)/modules.dep

Ce fichier contient une liste de modules et leurs dépendances, utilisée par les outils qui gèrent les modules automatiquement. Vous pouvez appuyer sur q pour quitter less.

Décharger un module du noyau avec rmmod

Dans cette étape, vous apprendrez à décharger un module du noyau en cours d'exécution à l'aide de la commande rmmod. Le déchargement de modules peut être utile pour résoudre des problèmes matériels, libérer de la mémoire système ou lorsqu'un module n'est plus nécessaire. Il est important de noter que vous ne pouvez décharger que les modules qui ne sont pas actuellement utilisés par le système ou par d'autres modules.

Continuons avec le module joydev, qui assure le support des joysticks. Tout d'abord, vérifions si ce module est chargé. Nous pouvons utiliser lsmod combiné à grep pour filtrer la sortie.

lsmod | grep joydev

Si le module est chargé, vous verrez une sortie similaire à celle-ci. La taille exacte peut varier.

joydev                 24576  0

Le chiffre 0 dans la colonne Used by indique que le module est chargé mais n'est actuellement utilisé par aucun processus ou autre module. Cela en fait un candidat sûr pour la suppression. Si ce nombre était supérieur à zéro, rmmod échouerait probablement, vous empêchant de décharger un module dont le système dépend.

Maintenant, supprimons le module joydev. Comme cette action modifie le noyau en cours d'exécution, elle nécessite des privilèges root, que nous obtiendrons via sudo.

sudo rmmod joydev

La commande rmmod ne produit généralement aucune sortie si elle réussit. Pour confirmer que le module a bien été déchargé, nous pouvons exécuter à nouveau la commande lsmod | grep joydev.

lsmod | grep joydev

Cette fois, la commande ne devrait produire aucune sortie. Ce silence confirme que le module joydev n'est plus chargé dans le noyau.

Charger un module du noyau avec insmod

Dans cette étape, vous apprendrez à charger manuellement un module dans le noyau en cours d'exécution à l'aide de la commande insmod. C'est l'équivalent inverse de rmmod. Bien que les systèmes modernes utilisent souvent un outil plus avancé appelé modprobe qui gère automatiquement les dépendances, comprendre insmod est fondamental pour apprendre le fonctionnement des modules du noyau.

À l'étape précédente, vous avez déchargé le module joydev. Nous allons maintenant le recharger. La commande insmod nécessite que vous fournissiez le chemin complet vers le fichier objet du module, qui possède une extension .ko (Kernel Object).

Le répertoire standard pour les modules du noyau est /lib/modules/$(uname -r)/kernel/, où $(uname -r) correspond à la version de votre noyau actuel. Le module joydev se trouve généralement dans le sous-répertoire drivers/input/.

Chargeons le module joydev en utilisant son chemin complet. Cette opération nécessite des privilèges root.

sudo insmod /lib/modules/$(uname -r)/kernel/drivers/input/joydev.ko

Comme rmmod, insmod ne produira aucune sortie s'il réussit.

Pour confirmer que le module a été chargé, vous pouvez utiliser à nouveau la commande lsmod | grep joydev.

lsmod | grep joydev

Après avoir exécuté la commande, vous devriez voir le module joydev listé dans la sortie, confirmant qu'il a été rechargé avec succès dans le noyau.

joydev                 24576  0

Configurer un module du noyau pour un chargement automatique au démarrage

Dans cette étape, vous apprendrez comment vous assurer qu'un module du noyau est chargé automatiquement à chaque démarrage de votre système. Le chargement manuel des modules avec insmod est temporaire et ne persiste pas après un redémarrage. Pour rendre ce changement permanent, vous devez configurer votre système pour charger le module pendant le processus d'initialisation.

Sur les systèmes Linux modernes utilisant systemd, la méthode standard pour charger automatiquement les modules du noyau au démarrage consiste à ajouter un fichier de configuration dans le répertoire /etc/modules-load.d/. Tout fichier dans ce répertoire avec une extension .conf sera lu, et le système tentera de charger chaque module listé à l'intérieur, à raison d'un par ligne.

Configurons le module joydev pour qu'il se charge automatiquement. Nous allons créer un fichier nommé joydev.conf à l'intérieur de /etc/modules-load.d/ et y ajouter le mot joydev. Nous pouvons le faire en une seule commande en utilisant echo et tee avec sudo.

echo joydev | sudo tee /etc/modules-load.d/joydev.conf

Voici comment fonctionne cette commande :

  • echo joydev affiche le texte 'joydev'.
  • Le tube | envoie ce texte comme entrée à la commande suivante.
  • sudo tee /etc/modules-load.d/joydev.conf reçoit le texte. La commande tee écrit l'entrée qu'elle reçoit dans le fichier spécifié (/etc/modules-load.d/joydev.conf) et l'affiche également à l'écran. Nous utilisons sudo car ce répertoire est protégé et nécessite des privilèges root pour y écrire.

Vous devriez voir la sortie suivante, qui correspond au contenu écrit dans le fichier :

joydev

Pour confirmer que le fichier a été créé correctement, vous pouvez afficher son contenu à l'aide de la commande cat :

cat /etc/modules-load.d/joydev.conf

La sortie doit être le nom du module que vous venez d'ajouter :

joydev

Désormais, à chaque démarrage du système, celui-ci chargera automatiquement le module joydev. Vous avez configuré avec succès un chargement de module persistant.

Résumé

Dans cet atelier, vous avez appris les opérations fondamentales pour gérer les modules du noyau dans un environnement Linux. Vous vous êtes exercé à lister tous les modules actuellement chargés à l'aide de la commande lsmod et à inspecter les informations détaillées d'un module spécifique, telles que son nom de fichier et sa description, avec la commande modinfo.

Vous avez également acquis une expérience pratique de la modification dynamique du noyau en déchargeant un module avec rmmod et en en chargeant un avec insmod. Enfin, vous avez appris à configurer un module pour qu'il se charge automatiquement au démarrage, garantissant que les pilotes ou fonctionnalités nécessaires soient disponibles après un redémarrage du système. Ces compétences sont essentielles pour gérer efficacement les pilotes de périphériques et les fonctionnalités du noyau.