GAZETTE N°29: Comprendre les modules du noyau avec Caldera

Les modules du noyau

Copyright © 1998, David Nelson -- Publié dans le n°29 de la Linux Gazette

Adaptation française : Éric Jacoboni

Précédent Suivant Table des Matières

4. Comprendre les modules du noyau avec Caldera

Par David Nelson

Vous ne devriez pas avoir à lire cet article. Le concept de modules du noyau Linux est très simple, mais malheureusement les informations nécessaires pour compiler, installer et utiliser ces modules sont dispersées à travers plusieurs HOWTO, README et pages man. De plus, les fichiers qu'il faut modifier se trouvent dans plusieurs répertoires obscurs.

J'ai finalement écrit cette recette de cuisine afin que vous et moi puissions nous lancer. Lorsque tout sera en place et que les modules fonctionneront, vous pourrez alors vous plonger dans les détails. J'ai testé tout cela sur une machine à base de X86 sous Caldera Open Linux 1.1, qui est proche de la Red Hat 4.2. La situation peut être différente avec d'autres processeurs et d'autres distributions.

Pourquoi utiliser les modules ? Parce qu'ils vous permettent d'avoir un noyau petit et rapide, puis d'installer et d'ôter des pilotes de périphériques à la demande. Sans les modules, le noyau Linux finirait par ressembler à un certain OS commercial.

Je vous recommande d'abord de compiler un noyau de base incluant toutes les capacités essentielles à votre système sans utiliser les modules. Je sais que cela ressemble à une marche arrière, mais cela vous évitera de ne plus pouvoir booter parce que vous vous êtes embrouillés dans vos modules. Le fichier /usr/src/linux/README est notre guide mais le principe de base consiste à éxécuter la commande :

 
make mrproper; make xconfig

(ou menuconfig ou config) afin d'inclure toutes les fonctionnalités nécessaires, puis de faire :

 
make dep; make clean; make zImage

Sauvez votre configuration du noyau dans un fichier nommé kernelconf.base au cas où vous auriez besoin de recompiler. Le menu xconfig vous interroge sur la sauvegarde et la lecture de fichiers de configuration. Si vous utilisez menuconfig ou config, la configuration courante se trouve dans le fichier /usr/src/linux/.config : copiez ce fichier dans kernelconf.base. Si vous avez configuré un trop gros noyau, la compilation échouera : si cela arrive, faites make bzImage au lieu de make zImage. Votre noyau compilé se trouvera dans le répertoire /usr/src/linux/arch/i386/boot.

Vous pouvez avoir fait une erreur en compilant votre noyau de base, ne jetez donc pas l'ancien. Si vous utilisez LILO, renommez votre nouveau noyau en zImage.base et copiez-le au même emplacement que votre noyau actuel, normalement / ou /boot. Ajoutez une section à /etc/lilo.conf vous permettant de choisir votre noyau au démarrage. Voici mon lilo.conf, sans les lignes de commentaires :

# section generale
boot = /dev/hda3
install = /boot/boot.b
message = /boot/message
prompt
timeout = 50

# entree par defaut
image = /bzImage
        label = linux
        root = /dev/hda3
        read-only

# noyau base
image = /zImage.base
        label = base
        root = /dev/hda3
        read-only

L'ajout principal se trouve dans la dernière section (# noyau base) qui informe LILO de l'existence de votre nouveau noyau. Assurez-vous aussi que lilo.conf contienne les lignes prompt et timeout. Maintenant; lancez la commande lilo puis relancez votre système. LILO s'arrêtera dans son exécution en affichant le prompt boot:. Si vous pressez TAB, les choix linux et base s'afficheront. Choisissez base et votre nouveau noyau se lancera. Vous pouvez avoir des messages de plaintes à propos de mauvaises dépendances de modules mais, si votre noyau de base est complet, cela ne devrait pas vous gêner. Si quelque chose tourne mal, relancez le système et entrez linux (ou attendez simplement que le nombre de secondes spécifié par timeout soit écoulé) et votre ancien noyau démarrera. Assurez-vous d'avoir un noyau de base en état de marche avant de continuer. Avec cette méthode, vous ne couperez jamais les ponts derrière vous.

Si vous n'utilisez pas LILO, faites une disquette de démarrage pour votre noyau de base. Pour ce faire, insérez une disquette et faites make zdisk au lieu de make zImage.

Vous êtes maintenant prêt à compiler un noyau avec des modules adaptés à votre système. Faites les mêmes commandes que précédemment, mais lorsque vous exécuterez xconfig ou menuconfig, demandez à ce que certaines fonctionnalités soient compilées en modules. Je vous conseille de tester d'abord en ajoutant à zImage.base des modules pratiques mais non nécessaires. De bons choix sont la gestion de l'imprimante ou de la disquette (sauf si vous démarrez à partir de cette dernière). Sauvegardez votre configuration sous le nom kernelconf.mod au cas où vous devriez revenir en arrière. Notez aussi par écrit les modules que vous compilez. Pour savoir exactement quels sont les modules compilés, je vous conseille de déplacer ou détruire les anciens modules (si vous en aviez). La distribution Caldera inclut de nombreux modules se trouvant dans /lib/modules/2.0.29. J'ai déplacé les anciens dans des sous-répertoires plutôt que de les détruire au cas où j'aurais besoin de faire machine arrière. Si vous avez une autre version du noyau, le nom du répertoire 2.0.29 sera remplacé par celui de cette version.

Après avoir fait make zImage, faites :

make modules; make modules_install

Comme précédemment, allez dans le répertoire contenant zImage, renommez-le en zImage.mod et déplacez-le dans le répertoire où LILO ira le chercher. Placez une nouvelle section à la fin de lilo.conf afin de vous permettre de démarrer ce noyau en tapant modules. Si vous n'utilisez pas LILO, créez un autre zDisk.

Invoquez maintenant la commande depmod -aq : elle crée le fichier /lib/modules/2.0.29/modules.dep, nécessaire à l'utilisation des modules. Puis, exécutez la commande suivante :

modprobe -c | grep -v '^path' > /etc/conf.modules

Cette commande met en place un autre fichier nécessaire aux modules.

Relancez votre système en choisissant modules au démarrage de LILO. Puis, allez dans le répertoire /etc/modules/2.0.29. Il doit contenir un fichier avec un nom très long du style :

#1 Tue Feb 11 20:36:48 MET 1997.default

Ce fichier est lu au démarrage par /etc/rc.d/rc.modules. Il contient la liste des modules chargés par défaut lorsque le noyau démarre. Vous devrez changez son nom et son contenu. Choisir le nom est le plus difficile. À partir du répertoire /etc/modules/2.0.29, exécute la commande  :

FILE=i`uname -v`.default
cp "#1 Tue"* "$FILE"

Cette incantation crée un fichier portant le nom que rc.modules recherchera au démarrage. Le nom est basé sur la date de compilation du noyau. Si vous recompilez le noyau, vous devrez répéter cette opération.

Éditez ce fichier pour qu'il ne contienne que les modules que vous voulez voir chargés au démarrage. Par exemple, il pourrait contenir les lignes

floppy
lp

ce qui chargerait les modules disquette et imprimante en supposant que vous les ayez compilés comme modules. Pour que votre éditeur accepte de charger ce fichier, vous devrez peut-être mettre des quotes autour de son nom.

Pour charger un module manuellement, exécutez la commande insmod nom-module et, pour l'ôter, la commande rmmod nom-module. Pour connaitre les modules chargés faites lsmod.

Le plus beau jouet est kerneld : il charge et décharge automatiquement les modules selon les besoins. Supposons que vous ayez compilez le gestionnaire de disquettes comme module. Vérifiez s'il est chargé en faisant lsmod. Si c'est le cas, ôtez-le en faisant rmmod floppy puis lancez kerneld et faites mount /mnt/floppy (ou toute commande permettant de monter votre disquette). Comme par magie, kerneld installe le module floppy. Il désinstallera aussi les modules inutilisés depuis un certain temps afin de minimiser la taille de votre noyau.

Vous en savez maintenant assez pour tester les modules sans faire planter votre noyau au démarrage. Lisez les mini-HOWTO sur les modules et sur kerneld, ainsi que les pages man sur leurs outils afin de devenir un véritable expert. Bonne modularisation !


Précédent Suivant Table des Matières

Copyright © 1998, David Nelson -- Publié dans le n°29 de la Linux Gazette

Adaptation française : Éric Jacoboni