Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !


Rédigé par Kmeleon

Les modules Linux

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
  • 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

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:

user@machine ~% 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:

user@machine ~% man modprobe

Pour charger manuellement le module "3c59x" (il y a de grandes chances qu'il soit chargé si vous en avez besoin…):

user@machine ~% 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"…)

user@machine ~% sudo modprobe -r 3c59x

Voir la version d'un module:

user@machine ~% 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. Pour ce qui est des modules à charger au démarrage, on peut éditer le fichier /etc/modules:

user@machine ~% vim /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
 
lp
psmouse

Rajouter les modules concernés dans le fichier.

Une autre approche consiste à utiliser l'outil dédié modconf:

user@machine ~% apt-cache show modconf
user@machine ~% sudo apt-get install modconf
user@machine ~% man modconf

FIXME!

Empécher le chargement d'un module

Imaginons que vim (ou nano, emacs, gedit, kate…) soit votre éditeur préféré:

user@machine ~% sudo vim /etc/modprobe.d/blacklist
# This file lists those modules which we don't want to be loaded by
# alias expansion, usually so some other driver will be loaded for the
# device instead.

# evbug is a debug tool that should be loaded explicitly
blacklist evbug

# these drivers are very simple, the HID drivers are usually preferred
blacklist usbmouse
blacklist usbkbd
...

Rajouter les modules concernés. D'autres méthodes existent.

  • materiel/modules_linux.1175274389.txt.gz
  • Dernière modification: Le 18/04/2011, 14:48
  • (modification externe)