Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
materiel:modules_linux [Le 15/08/2007, 12:09] adam0509 |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | |||
- | ====== 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 | ||
- | |||
- | Un petit schéma pour mieux comprendre : | ||
- | |||
- | {{materiel:modules_linux.png|}} | ||
- | |||
- | |||
- | ===== 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 actif ==== | ||
- | |||
- | |||
- | On peut connaitre tous les modules actif en tapant ''lsmod'' dans un terminal (ajouter "| more" pour afficher page par page) : | ||
- | |||
- | <code> | ||
- | $ lsmod | more | ||
- | 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 | ||
- | ....more...(Taper ESPACE) | ||
- | </code> | ||
- | |||
- | 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. | ||
- | |||
- | |||
- | ==== Information sur un module ==== | ||
- | |||
- | La commande ''modinfo'' peut rendre de bons services : | ||
- | |||
- | <code> | ||
- | $ 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) | ||
- | </code> | ||
- | |||
- | On voit que rt2500 s'occupe de la gestion d'une interface wlan chipset Ralink rt2500 et on est bien content qu'elle fonctionne. (cette interface s'appelle ra*)\\ | ||
- | |||
- | |||
- | Si l'on ne désire qu'une information précise, on peut spécifier le champ (field) à afficher avec l'option -F. | ||
- | Par exemple, si nous ne voulons voir que la description du module rt2500 : | ||
- | |||
- | $ modinfo rt2500 -F description | ||
- | Ralink RT2500 802.11g WLAN driver 1.1.0 CVS 2005/07/10 | ||
- | |||
- | Sachez cependant que tous les modules ne fournissent pas les même informations, et qu'il se peut que ce type de commande ne renvoi rien. Par exemple, le module rt2500 n'a pas de champ "version", alors que le module 8139too en a un. | ||
- | Il y a cependant des champs standards que tous les modules devrait avoir, comme **author**, **description**, **license**, **parm**, **depends**, et **alias**. | ||
- | |||
- | |||
- | |||
- | ==== Chargement/Déchargement d'un module ==== | ||
- | |||
- | Pour ce qui est du chargement et du déchargement d'un module, il faut utiliser la commande ''modprobe'' : | ||
- | |||
- | === Charger === | ||
- | |||
- | 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 | ||
- | |||
- | === Decharger === | ||
- | |||
- | 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 | ||
- | |||
- | === Lister === | ||
- | |||
- | Voir la liste des modules (on peut aussi utiliser l'utilitaire "modconf" - cf plus bas) : | ||
- | |||
- | modprobe -l | ||
- | |||
- | A utiliser avec "| grep" !! | ||
- | |||
- | \\ | ||
- | |||
- | ==== Options d'un module ==== | ||
- | |||
- | FIXME | ||
- | |||
- | Comme nous l'avons-vu plus haut, certains modules possèdent des options ("parm"). Ces options permettent un plus grand contrôle sur le module en lui-même. | ||
- | |||
- | Ces options se chargent de plusieurs manières. Exemple : | ||
- | |||
- | modprobe snd_ens1371 joystick_port=1 | ||
- | |||
- | les "parm" vous indique quoi mettre : | ||
- | |||
- | * int = entier | ||
- | * bool = booléen (0 ou 1) | ||
- | * array of int = plusieurs entier | ||
- | * array of bool = plusieurs bits | ||
- | |||
- | FIXME | ||
- | |||
- | Pour que cela soit pris en compte directement au lancement il faut éditer le fichier ''/etc/modprobe.d/option'' et y ajouter une ligne. | ||
- | |||
- | Exemple : | ||
- | |||
- | options snd_ens1371 joystick_port=1 | ||
- | |||
- | ==== Modules au démarrages ==== | ||
- | |||
- | 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'' (avec votre éditeur, au choix : [[:nano]], [[:gedit]], [[:kate]], [[:mousepad]]): | ||
- | |||
- | <code> | ||
- | $ gksudo gedit /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 | ||
- | </code> | ||
- | |||
- | Rajouter les modules concernés dans le fichier. | ||
- | |||
- | |||
- | |||
- | ==== Empêcher le chargement d'un module ==== | ||
- | |||
- | Il faudra éditer le fichier blacklist : | ||
- | |||
- | <code> | ||
- | $ gksudo gedit /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 | ||
- | ... | ||
- | </code> | ||
- | |||
- | Rajouter les modules concernés. | ||
- | D'autres méthodes existent. | ||
- | |||
- | |||
- | |||
- | |||
- | ===== Utilitaires pour les modules ===== | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ==== Modconf ==== | ||
- | |||
- | Modconf est un utilitaire très puissant permettant de voir les modules disponibles (il est conseillé d'agrandir la fenêtre de Terminal avant de le lancer) : | ||
- | |||
- | <code> | ||
- | $ sudo apt-get install modconf | ||
- | $ sudo modconf | ||
- | </code> | ||
- | |||
- | ==== module-assistant ==== | ||
- | |||
- | module-assistant : | ||
- | |||
- | <code> | ||
- | $ sudo apt-get install module-assistant | ||
- | $ sudo module-assistant | ||
- | </code> | ||
- | |||
- | ==== Hardinfo ==== | ||
- | |||
- | Pas vraiment un programme spécifique pour les modules, mais un programme bien pratique pour connaître des informations sur votre ordinateur : | ||
- | |||
- | <code> | ||
- | $ sudo apt-get install hardinfo | ||
- | </code> | ||
- | |||
- | Plus d'infos : [[http://macsim.labolinux.net/index.php/2007/05/14/90-hardinfo-des-informations-sur-le-hardware-de-votre-puic-puic|ici]] | ||
- | |||
- | ===== Liens ===== | ||
- | |||
- | http://www.lea-linux.org/cached/index/Kernel-modules.html | ||
- | |||
- | ----- | ||
- | //Contributeurs :// [[:utilisateurs:kmeleon|Kmeleon]], [[:utilisateurs/adam0509]] |