Ceci est une ancienne révision du document !
Rédigé par Kmeleon
Les modules Linux
Présentation
Un module est un morceau de code permettant d'ajouter des fonctionnalités au noyau : pilotes de périphériques matériels, protocoles réseaux, etc…
Il peut être chargé dynamiquement sans avoir besoin de recompiler le noyau (avec la commande insmod
ou modprobe
) ou de redémarrer le système.
Les modules sont exécutés dans l'espace mémoire du noyau :
- Ils possèdent le contrôle total de la machine
- Ils peuvent détourner ou créer un appel système
Caractéristiques
- Ajoutent une fonctionnalité donnée au noyau (pilotes, support système de fichier, etc…)
- Peuvent être (dé)chargés à tout moment, quand leur fonctionnalité est requise. Une fois chargés, ils ont accès à tout le noyau.
- Aucune protection particulière.
- Utiles pour garder une image du noyau à une taille minimum (essentiel pour les distributions GNU/Linux pour PCs).
- Permettent de supporter l'incompatibilité entre pilotes (on charge soit l'un soit l'autre, mais pas les deux)
- Permettent de fournir des pilotes binaires (mauvaise idée), utilisables sans avoir à recompiler le noyau.
- Les modules permettent de développer des pilotes sans redémarrer: chargement, test, déchargement, recompilation, chargement…
- Les modules (pilotes) peuvent aussi être compilés statiquement dans le noyau
Gestion des modules
Lister les modules
La commande lsmod:
~% lsmod Module Size Used by rt2500 176612 1 ppdev 9220 0 speedstep_lib 4484 0 cpufreq_userspace 4696 0 cpufreq_stats 5636 0 freq_table 4740 1 cpufreq_stats .......sortie coupée......''
On voit que le module "freq_table" est utilisé par "cpufreq_stats". Il y a des dépendances entre les modules. Il faut en tenir compte lorsque l'on veut décharger des modules.
Chargement/Dechargement d'un module
Déja pour avoir des infos sur un module, la commande modinfo rends de bons services:
~% modinfo rt2500 filename: /lib/modules/2.6.15-28-386/kernel/drivers/net/wireless/rt2500/rt2500.ko author: http://rt2x00.serialmonkey.com description: Ralink RT2500 802.11g WLAN driver 1.1.0 CVS 2005/07/10 license: GPL vermagic: 2.6.15-28-386 preempt 486 gcc-4.0 depends: alias: pci:v00001814d00000201sv*sd*bc*sc*i* srcversion: 87483C74300BD5B978A24E4 parm: ifname:Network device name (default ra%d) (charp)\\ parm: debug:Enable level: accepted values: 1 to switch debug on, 0 to switch debug off. (int)
On voit que rt2500 s'occupe de la gestion d'une interface wlan chipset Ralink rt2500 est on est bien content qu'elle fonctionne. (cette interface s'appelle ra*)
Pour ce qui est du chargement et du déchargement d'un module, il faut s'informer un peu sur la commande modprobe:
~% man modprobe
Pour charger manuellement le module "3c59x" (il y a de grandes chances qu'il soit chargé si vous en avez besoin…):
~% sudo modprobe -a 3c59x
Pour décharger le module "3c59x" (imaginons que l'interface eth0 soit inutile et que celle-ci soit gérée par "3c59x"…)
~% sudo modprobe -r 3c59x
Voir la version d'un module:
~% sudo modprobe -V 3c59x
Il est possible de configurer les modules chargés au démarrage de la machine ou lorsque l'on branche un périphérique à chaud. !
Une autre approche consiste à utiliser l'outil dédié modconf:
~% apt-cache show modconf ~% sudo apt-get install modconf ~% man modconf
!