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
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
cpufreq_powersave 1920 0
cpufreq_ondemand 6428 0
cpufreq_conservative 7332 0
video 16260 0
tc1100_wmi 6916 0
sony_acpi 5644 0
pcc_acpi 12416 0
hotkey 11556 0
dev_acpi 11140 0
container 4608 0
button 6672 0
acpi_sbs 19980 0
battery 9988 1 acpi_sbs
ac 5252 1 acpi_sbs
i2c_acpi_ec 5120 1 acpi_sbs
ipv6 265856 8
vfat 13440 0
fat 53020 1 vfat
lp 11844 0
joydev 10048 0
tsdev 8000 0
usblp 13056 0
pcmcia 40508 0
floppy 62148 0
parport_pc 35780 1
parport 36296 3 ppdev,lp,parport_pc
…….sortie coupée……
On voit que le module "freq_table" est utilisé par "cpufreq_stats". Il y a des dépendances entre les modules.