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
ouconfig
) afin d'inclure toutes les fonctionnalités nécessaires, puis de faire :
make dep; make clean; make zImageSauvez votre configuration du noyau dans un fichier nommé
kernelconf.base
au cas où vous auriez besoin de recompiler. Le menuxconfig
vous interroge sur la sauvegarde et la lecture de fichiers de configuration. Si vous utilisezmenuconfig
ouconfig
, la configuration courante se trouve dans le fichier/usr/src/linux/.config
 : copiez ce fichier danskernelconf.base
. Si vous avez configuré un trop gros noyau, la compilation échouera : si cela arrive, faitesmake bzImage
au lieu demake 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 monlilo.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-onlyL'ajout principal se trouve dans la dernière section (
# noyau base
) qui informe LILO de l'existence de votre nouveau noyau. Assurez-vous aussi quelilo.conf
contienne les lignesprompt
ettimeout
. Maintenant; lancez la commandelilo
puis relancez votre système. LILO s'arrêtera dans son exécution en affichant le promptboot:
. Si vous pressezTAB
, les choixlinux
etbase
s'afficheront. Choisissezbase
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 entrezlinux
(ou attendez simplement que le nombre de secondes spécifié partimeout
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 demake 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
oumenuconfig
, 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 nomkernelconf.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épertoire2.0.29
sera remplacé par celui de cette version.Après avoir fait
make zImage
, faites :
make modules; make modules_installComme précédemment, allez dans le répertoire contenant
zImage
, renommez-le enzImage.mod
et déplacez-le dans le répertoire où LILO ira le chercher. Placez une nouvelle section à la fin delilo.conf
afin de vous permettre de démarrer ce noyau en tapantmodules
. Si vous n'utilisez pas LILO, créez un autrezDisk
.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.modulesCette 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.defaultCe 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 lpce 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 commandermmod nom-module
. Pour connaitre les modules chargés faiteslsmod
.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 faisantlsmod
. Si c'est le cas, ôtez-le en faisantrmmod floppy
puis lancezkerneld
et faitesmount /mnt/floppy
(ou toute commande permettant de monter votre disquette). Comme par magie,kerneld
installe le modulefloppy
. 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