Modules
Les fichiers contenant le code compilé des modules se trouvent dans l'un des sous-répertoires /lib/modules/version_du_noyau/ de votre système de fichiers. Dans notre cas, il s'agit d'un noyau 2.6.15-26, et les différents modules se trouvent dans le répertoire /lib/modules/2.6.15-26-386/kernel/drivers. Les modules du noyau sont stockés sous forme de fichiers d'extension .ko (pour Kernel Object – ou d'extension .o dans le cas des noyaux de la branche 2.4). Le nom de chaque module correspond en fait au nom du fichier sans son extension. Certains modules peuvent parfois être compressés au format gzip ; dans ce cas, les fichiers portent l'extension .ko.gz. Comme pour les packages de logiciels, il existe des dépendances entre modules, c'est-à-dire que certains modules ont besoin que d'autres modules soient chargés pour fonctionner.
Retrouver le module d'un périphérique
page 61 Linux kernel in a nutshell (tiré de http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/book.pdf)
Gérer les dépendances
En lancant la commande depmod -a, cela va créer le fichier /lib/modules/2.x.x/modules.dep. Ce fichier contient la liste des modules avec toutes leurs dépendances (sous-modules).
Exemple :
- /lib/modules/2.0.36/misc/snd.o:
-> C'est un module "stand-alone". Il n'a pas de dépendances avec les autres
modules.
- /lib/modules/2.0.36/misc/snd-timer.o: /lib/modules/2.0.36/misc/snd.o
-> Tiens, "snd-timer.o" repose sur "snd.o". Pour le charger à la main, il faudrait donc faire: insmod snd.o && insmod snd-timer.o
- /lib/modules/2.0.36/misc/snd-ens1370.o:
/lib/modules/2.0.36/misc/snd-mixer.o
/lib/modules/2.0.36/misc/snd-midi.o
/lib/modules/2.0.36/misc/snd-pcm1.o
/lib/modules/2.0.36/misc/snd.o
/lib/modules/2.0.36/misc/snd-ac97-codec.o
-> "snd-ens1370.o", comme son nom l'indique, correspond au module gérant le chip ensoniq de la SB PCI (selon les versions, c'est un ens1370 ou 1371). Dans les drivers ALSA, les
deux chipsets sont confondus dans le même module.
- /lib/modules/2.0.36/misc/snd-audiopci.o:/lib/modules/2.0.36/misc/snd-mixer.o
/lib/modules/2.0.36/misc/snd-pcm.o
/lib/modules/2.0.36/misc/snd-ens1370.o
/lib/modules/2.0.36/misc/snd-midi.o
/lib/modules/2.0.36/misc/snd.o
-> Et on se rend compte que "snd-audiopci.o" est le module qui appelle tous les autres. Notez les dépendances avec des modules très généraux comme "snd-mixer", "snd-pcm" (qui gère
les sorties vers /dev/dsp) et "snd-ens1370".
Ce fichier généré par DEPMOD ne servira pas uniquement à satisfaire notre curiosité. Il est également utilisé par MODPROBE, conjointement avec un autre fichier /etc/modules.
Il contient les alias et les paramètres que l'on doit passer aux modules. Voici le contenu de mon "/etc/modules" :
alias sound snd-audiopci.o
Là, on voit bien l'utilité de l'alias: on a en gros toujours les mêmes choses à charger, seul le nom des drivers change. On utilise donc des noms "génériques" pour pouvoir
réutiliser des scripts existants. Le nom générique étant ici "sound" pour désigner "ma superbe carte son PCI ensoniq pas compatible SB alors que c'est une Creative et qu'elle
s'appelle quand même SoundBlaster.". Vous avouerez que c'est plus court, même si cela laisse moins de possibilité d'extériorisation aux sentiments rancuniers.
Il suffit donc de taper "modprobe sound", et hop, tout se retrouve en mémoire. Un "LSMOD" nous confirme qu'il y a décidemment du monde. Pour l'alias, il fallait évidemment savoir
que le module chapeautant la série de sous-modules est "snd-audiopci.o".
Afficher les modules : lsmod
Cette commande retourne une liste sous forme de trois colonnes :
* dans la première colonne, vous trouverez le nom des modules ;
* dans la deuxième colonne, la taille du fichier correspondant ;
* dans la troisième colonne se trouvent le nombre de processus qui utilisent le module, ainsi que le nom des dépendances éventuelles propres à chaque module.
Notons que ces informations sont également présentes dans le fichier /proc/modules.
Par exemple, sur la figure 2, on peut constater que le module vfat a nécessairement besoin du module fat pour fonctionner. Par conséquent, ceci implique que le module fat
doit être chargé avant l'autre, et qu'il n'est pas possible de retirer le module fat avant que vfat ne soient retiré.
fat 53020 1 vfat
Le chiffre qui précède le nom des dépendances indique qu'un ou des programme(s) utilisent actuellement le module.
Ajouter & supprimer un module
Ajouter un module : insmod [options] <nom_du_module> [paramètre=valeur] (l'option -p permet de seulement tester la faisabilité du chargement d'un module) Supprimer un module :rmmod [options] <nom_du_module> Cependant, on utilisera plutôt la commande modprobe (-r pour le supprimer, sans option pour le rajouter). Gardez bien à l'esprit que le module ne pourra être retiré que s'il n'est pas utilisé par un processus ou s'il n'est pas requis par d'autres modules chargés. == Ajouter un module automatiquement au boot == Cela est surtout dans le cas ou on n'a pas besoin du module pour démarrer le serveur, mais que l'on veut quand meme qu'il soit chargé au boot. Créer le fichier /etc/rc.modules et mettre dedans modprobe nomdumodule (modprobe ip_vs), faire un chmod +x /etc/rc.modules == Information sur les modules == <pre> Pour obtenir la liste des modules du type réseau, la commande est la suivante : modprobe -l -t net Pour obtenir plus d'informations : modinfo <nomdumodule> Si l'on modifie le fichier de configuration d'un module, il faut lancer update-modules