Gérer les modules noyau sous Linux : guide modprobe et lsmod

Le noyau Linux est conçu selon une architecture modulaire. Plutôt que d’intégrer l’ensemble des pilotes de périphériques, systèmes de fichiers ou protocoles réseau directement dans l’image statique du noyau, le système utilise des Loadable Kernel Modules (LKM). Ces modules permettent d’étendre les capacités du noyau à chaud, sans nécessiter de redémarrage de la machine ni de devoir obligatoirement complier un noyaux linux pour chaque nouveau matériel.

Lister et examiner les modules chargés

Pour auditer l’état actuel de votre système, plusieurs utilitaires en ligne de commande sont à votre disposition :

  • lsmod : affiche la liste de tous les modules actuellement injectés en mémoire vive, leur taille et le nombre d’autres composants qui en dépendent. Cette commande lit en réalité le fichier virtuel /proc/modules.
  • modinfo [nom_module] : fournit des détails complets sur un module spécifique (auteur, licence, description technique, alias de périphériques pris en charge et paramètres configurables).

Charger et décharger un module avec modprobe

Historiquement, les commandes insmod et rmmod permettaient d’insérer ou d’extraire un fichier binaire .ko. Cependant, elles ne résolvent pas automatiquement les dépendances entre pilotes. En production, on privilégie systématiquement modprobe, qui gère l’arbre des dépendances grâce à la base de données modules.dep.

Pour insérer un composant (par exemple un protocole ou un pilote de carte réseau) :

sudo modprobe ipv6

Si le module nécessite d’autres briques logicielles sous-jacentes, modprobe les chargera automatiquement dans le bon ordre. Une fois le module réseau activé, vous pouvez facilement vérifier l’attribution des adresses et afficher l’ipv6 d’une interface via la commande ip -6 addr, puis afficher les connection socket associées pour vous assurer que les flux réseau s’établissent correctement.

Pour décharger proprement un module qui n’est plus sollicité :

sudo modprobe -r ipv6

L’option -r (ou –remove) tente de décharger le composant ainsi que les dépendances orphelines, à condition qu’aucun processus système ne les utilise encore.

Chargement automatique et persistance au redémarrage

Les modifications effectuées via modprobe sont volatiles : elles disparaissent lors de l’extinction du serveur. Pour forcer l’activation d’un module dès l’initialisation de la machine sur les distributions modernes utilisant Systemd, il convient d’ajouter son nom dans un fichier dédié sous /etc/modules-load.d/ :

echo « dummy » | sudo tee /etc/modules-load.d/reseau-virtuel.conf

Désactiver ou mettre en liste noire un module

À l’inverse, il est parfois nécessaire d’empêcher le chargement automatique d’un pilote instable ou redondant (par exemple un pilote graphique open-source concurrent ou un protocole obsolète). Pour cela, créez un fichier de directive dans /etc/modprobe.d/blacklist.conf avec la syntaxe :

blacklist nom_du_module

Si vous souhaitez bloquer totalement son insertion manuelle par n’importe quel script, vous pouvez rediriger son alias vers le binaire vide :

install nom_du_module /bin/true