2. Utilitaires pour les modules

Contenu de cette section

Les utilitaires pour les modules sont un ensemble de programmes nécessaires pour gérer les modules. Au moment où j'écris ces mots, la dernière version est modules-2.0.0.tar.gz. Des informations concernant la version actuelle peut être trouvée à l'URL http://www.pi.se/blox.

Ces informations proviennent des personnes suivantes : Jacques Gelinas jacques@solucorp.qc.ca et Björn Ekwall bj0rn@blox.se dans /usr/src/linux/Documentation/modules.txt.

2.1 Créer les modules

La première étape consiste à compiler le noyau, comme l'explique le fichier linux/README. Cela ressemble généralement à ça :

Dans make config, vous choisissez quelles caractéristiques vous souhaitez inclure d'une manière permanente dans le noyau, et celles que vous voulez sous la forme de modules chargeables. Vous allez généralement choisir d'inclure le minimum de choses, c'est à dire ce qu'il est nécessaire pour pouvoir amorcer la machine :

L'ensemble des modules est en constante augmentation et vous serez capable de choisir l'option m lors du make config pour les caractéristiques que vous souhaitez voir comme modules.

Vous avez également la possibilité de créer des modules quoi soient moins dépendants de la version du noyau. Cette option peut être choisie lors du make config, en activant CONFIG_MODVERSIONS, et cela est assez pratique sur les noyau stables comme les versions 1.2 et 2.0. Si vous possédez des modules qui ne sont pas inclus dans l'arborescence des sources du noyau, alors vous aprécierez sûrement cette option...

Lorsque le noyau est généré, il suffit de créer les modules en lançant :

make modules

Cela va compiler tous les modules et les mettre dans le répertoire linux/modules. Vous trouverez dans ce répertoire tout un tas de liens symboliques sur des fichiers objets de l'arborescence des sources.

Ensuite, après avoir crée tous les modules, il vous suffit de les installer :

make modules_install

Cela copiera tous les nouveaux modules dans les sous-répertoires /lib/modules/version_noyau/, où version_noyau ressemble à 2.0.26, ou le numéro de la version du noyau.

Dès que vous avez réamorcé la machine avec le nouveau noyau, vous pouvez installer et désinstaller les modules avec les programmes insmod et rmmod. Après avoir lu la page de manuel de insmod, vous comprendrez qu'il est très simple de configurer un module en faisant insmod module symbole=valeur.

2.2 Outils étendus : modprobe et depmod.

Vous pouvez également utiliser deux outils : modprobe et depmod, où modprobe est une extension de insmod. Ces outils utilisent et maintienent un ensemble de fichiers qui décrivent tous les modules disponibles pour le noyau actuel dans l'arborescence /lib/modules ainsi que leurs interdépendances.

En utilisant le programme modprobe, vous pouvez charger n'importe quel module

/sbin/modprobe module

sans se préoccuper du noyau qui tourne, ou des modules qui sont utilisés par ce module.

Grâce à l'aide du fichier de configuration de modprobe, /etc/conf.modules, vous pouvez régler le comportement de modprobe, voir inclure un ensemble d'options par défaut pour chaque module. Et oui, il existe des pages de manuel pour cela !

Pour utiliser correctement modprobe, vous inséréz généralement le script suivant dans le fichier /etc/rc.d/rc.S script (voir le fichier rc.hints dans paquetage des utilitaires modules, modules-x.y.z.tar.gz.).

/sbin/depmod -a

Cela génère les dépendances entre les différents modules. Ensuite, si vous faîtes par exemple

/sbin/modprobe umsdos

alors vous chargerez automatiquement les modules msdos et umsdos étant donné que umsdos se base sur le module msdos.

2.3 La cerise sur le gâteau : kerneld.

Bon, vous avez lu tout ceci, et je vous sens fébrile et pressé d'essayer... Maintenant, oubliez tout ce que vous savez concernant le chargement et le déchargement des modules !

Grâce au démon kerneld, toutes ces opérations seront effectuées automatiquement. Répondez simplement "Y" à l'option CONFIG_KERNELD lors du make config, et assurez-vous que le démon /sbin/kerneld est lancé le plus tôt possible lors de l'amorçage de la machine, et que la commande /sbin/depmod -a a été exécutée pour le noyau courant (lisez la documentation fournie dans le paquetages des modules).

A chaque fois qu'un programme veut que le noyau utilise un gestionnaire qui n'est disponible que sous la forme d'un module, et que le noyau ne l'a pas déjà installé, alors le noyau va demander au démon de bien vouloir s'occuper du problème.

Voici ce qui se passe :

La cerise sur le gâteau provient que lorsqu'un module automatiquement installé n'est pas utilisé pendant une certaine période (généralement une minute), alors le module sera automatiquement supprimé du noyau.

Cela permet de faire en sorte que le noyau utilise l'espace mémoire minimal à n'importe quel moment, le rendant donc plus productif libérant la place inutilement occupée par du code non utilisé.

En fait, il n'existe qu'un seul côté vraiment positif à kerneld : vous n'avez qu'à créer un noyau minimal qui plus ou moins dépendant de votre configuration matérielle. La configuration de ce noyau virtuel est plutôt contrôlé par un fichier de configuration spécialisant le comportement de la machine et de son noyau.

Cela devrait être plutôt une bonne nouvelle pour les administrateurs de plusieurs machines aussi bien que pour les mainteneurs des distributions.

Pour utiliser kerneld avec le moins de perte de place, vous devez utiliser une version de modprobe qui soit considérée comme étant récente, ainsi qu'un noyau récent, et enfin un fichier de configuration pour modprobe, le fichier (/etc/conf.modules).

Comme modprobe connaît déjà la plupart des modules, le fichier de configuration minimal ressemble à quelque chose comme ça :

        alias scsi_hostadapter aha1542  # ou n'importe quel controleur SCSI
        alias eth0 3c509                # ou n'importe quelle carte reseau 

        # Vous avez besoin d'une ligne "options" pour certaines cartes reseau :
        options 3c509 io=0x300 irq=10

        # egalement une ligne "options" pour d'autres modules :
        options cdu31a cdu31a_port=0x1f88 sony_pas_init=1

Vous pouvez également ajouter ces trois lignes, mais elles ne sont là que pour des raisons cosmétiques:

        alias net-pf-3 off      # pas de mode ax25 disponible
        alias net-pf-4 off      # si vous n'utilisez pas le module ipx
        alias net-pf-5 off      # si vous n'utilisez pas le module appletalk

Enfin, pour les puriste, vous pouvez placer votre fichier de configuration soit dans /etc/conf.modules, soit dans /etc/modules.conf, comme modprobe sait ce qu'il doit faire dans chacun des cas...


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre