Page suivante Page précédente Table des matières

5. Utilisation des modules avec Linux

Par John Holmwood.

_______________________________________________________________________________

5.1 Introduction

Les modules du noyau permettent la mise en oeuvre de nombreuses fonctions dans Linux. Malheureusement, je n'ai pas pu trouver une explication simple de leur nature et de la manière de les utiliser lorsque j'en ai besoin.

L'été dernier, j'ai installé Linux Red Hat 5.1 sur mon ordinateur portable ThinkPad 770. J'ai l'habitude d'administrer les systèmes Unix et j'ai installé Red Hat 4.1 sur un ordinateur il y a quelques années, donc, je pensais être capable de résoudre tous les problèmes que je pourrais rencontrer lors de l'installation. L'installation initiale s'est déroulée tranquillement.

J'ai déchanté lorsque j'ai découvert que je ne pouvais pas mettre en oeuvre les services réseau commuté. Tous les fichiers de configuration étaient là, mais le noyau du système ne paraissait pas prendre en compte le réseau. Je n'ai pas pu trouver d'explication dans la documentation en ma possession, mais, après avoir cherché dans Deja News (http://www.dejanews.com/), j'ai appris que des modules du noyau permettaient un tel support.

5.2 Que sont les modules ?

À mesure que le système d'exploitation évolue et grossit, ses concepteurs doivent faire face à un dilemme. Si le support de toutes les fonctionnalités possibles est inclus dans le noyau du système d'exploitation, partie qui constitue le coeur du système, ce noyau devient très gros et peu souple. Si le support des fonctionnalités n'est pas inclus dans le noyau, les fonctions seront soit trop lentes soit ne fonctionneront pas du tout. Les concepteurs de systèmes d'exploitation résolvent pratiquement ce dilemme en modularisant le support des fonctionnalités qui peuvent alors être incluses ou non.

Traditionnellement, deux méthodes permettent d'obtenir cette modularité. Le concepteur peut séparer une fonction en processus séparés appelés unités d'exécution (thread) ou le noyau peut être recompilé en incluant/excluant les fonctions (qui ne sont pas) incluses par le vendeur. Si les différentes fonctions sont séparées en unités d'exécution, on dit que l'on a affaire à un micro-noyau. Cette solution entraîne une surcharge de travail au niveau des communications lorsque les unités d'exécution coordonnent leur travail. Un noyau où toutes les fonctions sont intégrées lors de sa construction est appelé un noyau monolithique. Comme son nom l'indique, la taille du noyau constitue l'inconvénient de cette solution. La solution adoptée pour Linux a été de créer des modules du noyau qui peuvent être chargés ou déchargés à la demande. Ce qui minimise à la fois la taille du noyau et la surcharge dans les communications.

5.3 Évolution du support des modules

Il y a toujours eu des modules du noyau dans Linux, autant que je puisse le savoir. Le nombre des modules disponibles et le mécanisme pour les supporter et les utiliser a évolué en même temps que le système d'exploitation.

À l'origine, ils étaient fournis avec les utilitaires modprobe/depmod et insmod/lsmod/rmmod/ksyms pour les gérer. Ces utilitaires sont décrits de la manière absconse habituelle dans les pages de manuel. Avec l'apparition de Linux 1.3, le démon kerneld a été ajouté pour gérer automatiquement les modules. Le mini-HOWTO kerneld (ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/) décrit parfaitement ce démon et son utilisation.

5.4 Quand doit-on utiliser les modules

Les modules doivent être utilisés pour supporter des fonctionnalités dont on n'a pas besoin constamment. Par exemple, si l'on n'a pas besoin des fonctions réseau constamment, ce qui est le cas normal pour des réseau sur lignes commutées, on peut utiliser des modules chargeables pour ce faire.

Les modules nécessaires peuvent être chargés juste avant l'appel à votre fournisseur de service internet (ISP). À la déconnexion, les modules peuvent être déchargés. Ceci minimise les besoins en mémoire centrale du noyau et accélère les opérations.

Naturellement, les fonctions dont on a besoin constamment, tel que l'accès au disque dur, doivent être incluses dans le noyau. Si vous mettez en place une station de travail en réseau ou un serveur web, les deux ayant besoin d'accéder à tout moment au réseau, il faudra inclure les fonctions réseau dans le noyau. Une solution alternative consisterait à charger les modules réseau au démarrage. L'avantage de cette approche est qu'il n'est pas nécessaire de reconstruire le noyau. Son désavantage est que les fonctions réseau ne seront pas aussi efficaces.

5.5 Comment reconstruire un noyau

L'un des avantages principaux de Linux sur les systèmes d'exploitation commerciaux vient de la fourniture complète de son code source. On peut reconstruire ou modifier n'importe qu'elle parties du système. Cependant, cet avantage suppose que l'on soit programmeur. Il faut comprendre des termes tels que «make» et «c». Si l'on est utilisateur, et vu la rapidité d'évolution dans cette industrie c'est dans cette catégorie que je me classe, alors, essayer de reconstruire le noyau Linux peut constituer une entreprise rebutante. De plus, si l'on fait une erreur en reconstruisant le noyau, il faudra probablement recommencer l'installation complète du système. Personnellement, je ne voudrais me lancer dans la reconstruction du noyau qu'après avoir épuisé toutes les autres possibilités.

Comme Mike Borowiec, dans une lettre récente à l'éditeur de Performance Computing, disait «Ce n'est pas quelque chose que j'aurais voulu que maman fit».

Cependant, ceci étant dit, reconstruire le noyau est tout-à-fait sans problème. Le Linux Kernel HOWTO (ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/) donne les instructions détaillées. Sans entrer dans les détails, voici les étapes à suivre  :

  • charger tous les fichiers source sur le système que vous utilisez,
  • décider quelles sont les fonctions que vous voulez inclure dans le noyau,
  • utiliser «make config» pour choisir ces options,
  • utiliser «make» pour reconstruire effectivement le noyau,
  • installer le nouveau noyau,
  • indiquer au programme de démarrage, normalement Lilo, d'utiliser le nouveau noyau,
  • redémarrer l'ordinateur.

5.6 Comment charger des modules du noyau au démarrage

Pour charger des modules au démarrage, les commandes de chargement doivent être incluses dans le script de démarrage adéquat. Les scripts de démarrage du système ne font partie d'aucuns paquetage officiel Linux. Chaque distributeur, Red Hat, Slackware, Debian, etc. crée ses propres scripts. Il est donc impossible de donner des instructions spécifiques utilisables par tout le monde. Le lecteur devra déterminer quels sont les scripts de démarrage utilisés dans son/sa distribution. Comme point de départ, chercher un fichier ou un répertoire nommé «rc.d*» où * signifie «n'importe quoi peut se trouver ici». Puis utiliser grep pour chercher «depmod -a» et/ou «insmod».
Le mini-HOWTO Linux Modules Installation (ftp://metalab.unc.edu/pub/Linux/docs/linux-doc-project/) donne des instructions plus détaillées.

Je dois souligner qu'il ne faut jamais faire de modification de ces scripts de démarrage sans avoir fait une sauvegarde de la version courante. Comme cela, on peut revenir à la version initiale ne cas d'erreur.

Le mini-HOWTO Linux Modules Installation recommande de créer un fichier appelé /etc/rc.d/init.d/modules.init pour accueillir ces commandes si vous avez une version de Linux Red Hat ou Debian. Cependant, ma version de Red Hat a la commande depmod -a dans le fichier /etc/rc.d/rc.sysinit. Vous trouverez probablement au moins une ligne qui contient la commande modprobe ou insmod. Ajoutez les commandes pour tous les modules que vous voulez charger au démarrage à cet endroit du fichier.

Après avoir redémarré votre ordinateur, utilisez lsmode pour vérifier que les modules sont réellement en train de tourner.

5.7 Modules à la demande

Un démon nommé «kerneld» est apparu avec la version 1.3.57 de Linux. La tâche de ce démon consiste à charger et à décharger automatiquement les modules à la demande du noyau. L'un de ses avantages réside dans la possibilité pour les distributeurs de fournir qu'une seule version du noyau. Le démon charge toutes les fonctions requises pour un système spécifique selon les besoins. Si le script de démarrage de votre système contient la ligne «/sbin/kerneld», alors, votre système a été configuré pour utiliser ce démon.

Très probablement, tous les modules dont vous avez besoin tourneront sans configuration complémentaire/ If vous avez besoin de changer la configuration, le mini-HOWTO kerneld (ftp://metalab.unc.edu/pub/Linux/docs/linux-doc-project/) décrit les fichiers de configuration et la manière de les modifier de manière très détaillée.

5.8 Comment installer les modules du noyau à l'aide d'un script

Quelquefois, il est nécessaire de pouvoir contrôler quand et comment les modules sont chargés. D'abord, il faut s'assurer qu'ils ne seront pas chargés automatiquement en modifiant les fichiers de configuration pour que kerneld ne connaisse pas ce module. Puis, il faut créer des scripts de démarrage et d'arrêt de cette fonction.

La commande depmod -a dans le script de démarrage crée une liste croisée de tous les modules disponibles pour le système. C'est nécessaire car certains modules supposent que d'autres modules sont déjà chargés. La commande modprobe nom-de-module utilise cette liste pour charger les modules indispensables avant de charger le module demandé. Elle enverra un message d'erreur si «nom-de-module» ne peut pas être trouvé dans la liste croisée. En revanche, on peut utiliser la commande insmod pour charger un module si l'on sait que tous les modules nécessaires sont déjà chargés.

La mise en réseau sur ligne commutée en est un exemple. Il y a un certain nombre de scripts pour lancer correctement ce fonctionnement en réseau. Il vous faut modifier le script de démarrage en ajoutant la commande modprobe ou insmod pour charger les fonctions réseau. Je vous recommande d'utiliser lsmod et grep pour vérifier que les modules ne sont pas déjà chargés. Vous devrez également modifier les scripts pour stopper le fonctionnement en réseau en ajoutant la commande rmmod pour décharger les fonctionnalités réseau. Pour des détails complémentaires concernant les scripts de fonctionnement en réseau sur les lignes commutées, consultez les mini-HOWTO PPP (ftp://metalab.unc.edu/pub/Linux/docs/linux-doc-project/).

5.9 Où trouver des informations complémentaires ?

La plupart des informations que j'ai regroupées ici proviennent du Projet de Documentation Linux. La page d'acceuil de ce projet se trouve à  :

 http://metalab.unc.edu/mdw/ldp.html
il y est dit  :
«Le projet de Documentation Linux (LDP) consiste à développer une documentation fiable et de qualité pour le système d'exploitation Linux. L'objectif global du LDP est de couvrir tous les aspects de la documentation Linux, de la documentation en ligne (pages de manuel, HTML et autres) jusqu'aux manuels imprimés couvrant des sujets comme l'installation, l'utilisation et le fonctionnement de Linux.»

Toute la documentation réalisée dans le cadre de ce projet est disponible en ligne à ftp://sunsite.unc.edu/pub/Linux/docs/. J'ai utilisé les manuels suivants  :

  • Le guide utilisateur de Linux,
  • Le HOWTO Linux Kernel (Noyau Linux),
  • le mini-HOWTO Linux Modules Installation (Installation des modules Linux),
  • le mini-HOWTO kerneld,
  • le PCMCIA HOWTO, qui contient la meilleure information pour le dépannage,
  • des informations complémentaires proviennent du Linux PPP HOWTO et du Linux IPX HOWTO.
N.d.T.: la version française de tous ces documents est disponible !

Deja-News qui contient les archives des échanges d'informations concernant Linux constitue une excellente source complémentaire d'informations sur Linux. On y retrouve toutes les informations qui ont été échangées, sur Internet, dans les groupes de discussion. Il y a des possibilités de recherche de texte et vous pouvez y poster des informations nouvelles ou des questions. Vous devrez vous armer de patience et avoir de la ténacité, vu la masse d'information stockée, pour trouver la réponse que vous cherchez. Persévérez, car l'information dont vous avez besoin y est enfouie (N.d.T. : pour les lecteurs français, cf. "Le laboureur et ses enfants" ;-) )

5.10 Qu'est-ce qui ne s'est pas bien passé ?

À ce point, le lecteur peut se demander «Si votre distribution Red Hat 5.1 contenait kerneld, comment cela se fait-il que vous ayez eu des problèmes ?». C'est une bonne question, la réponse est que j'ai été trop malin pour mon bien. Celui qui a écrit le script de démarrage du système Red Hat savait que Lilo, le programme de démarrage, possède une option appelée «linux» qui contient le nom du noyau. Le script de démarrage a besoin de connaître le nom du noyau pour déterminer quelle version des modules il doit installer.

Pendant l'installation, j'ai indiqué à Lilo de remplacer le nom de cette option par «l». Ma motivation étant due pour partie à ma paresse et pour partie parce que Lilo ne laisse que peu de temps pour entrer une option au démarrage. J'ai deux systèmes d'exploitation sur le même ordinateur. Quand Lilo démarre, il me laisse 10 secondes pour entrer un nom d'option. C'est plus rapide de taper «l».

Cette modification astucieuse a pris en défaut la méthode, également astucieuse, utilisée par l'auteur du script de démarrage. Comme résultat, le système n'a pas installé kerneld. Sans kerneld, mon système ne disposait pas des modules de gestion du réseau requis. Je suis sûr que, quelque part, il y a une leçon à retirer de cette expérience.

_______________________________________________________________________________

Copyright © 1999, John Holmwood - Publié dans le n°37 de la Linux Gazette, février 1999.

Adaptation française de Albert-Paul Bouillot


Page suivante Page précédente Table des matières