<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ondelettes</id>
	<title>Lea Linux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ondelettes"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/documentations/Sp%C3%A9cial:Contributions/Ondelettes"/>
	<updated>2026-05-03T08:00:18Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Kernel-modules&amp;diff=16109</id>
		<title>Kernel-modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Kernel-modules&amp;diff=16109"/>
		<updated>2008-11-05T11:14:15Z</updated>

		<summary type="html">&lt;p&gt;Ondelettes : /* Où se trouvent-ils ? */ langue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Configurer votre noyau]]&lt;br /&gt;
= Les modules de Linux =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Les modules de Linux&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Jean-Christophe&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Comment fonctionnent ces mystérieux modules ?&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous ne savez pas ce que sont les modules, allez voir le glossaire !&lt;br /&gt;
&lt;br /&gt;
== A quoi ça sert ? ==&lt;br /&gt;
&lt;br /&gt;
; Bon, puisque vous n&#039;avez pas été lire le glossaire, voici la définition qui en est donnée :&lt;br /&gt;
: Les modules sont une façon qui a été trouvée pour rendre Linux (le noyau) plus modulaire (!) et plus léger. En effet, ce sont le plus souvent des pilotes qui ont été &amp;quot;sortis&amp;quot; du noyau dans des fichiers séparés, et qui sont chargés en mémoire, soit automatiquement lorsqu&#039;on se sert du périphérique concerné, soit manuellement. Ils permettent de réduire la taille mémoire utilisée par le noyau lui-même. Le concept de modules permet aussi d&#039;ajouter des pilotes de périphériques au système sans devoir recompiler le noyau.&lt;br /&gt;
&lt;br /&gt;
Bon, c&#039;est clair il me semble (normal, c&#039;est moi qui ai écrit ça ;). Les modules permettent aussi d&#039;ajouter des pilotes distribués uniquement sous forme binaire ; on ne peut pas les recompiler, mais on peut s&#039;en servir (ce qui est assez intéressant finalement ;). Les modules ne sont pas que des pilotes, d&#039;une façon générale, ça peut être tout morceau de code qu&#039;on a décidé d&#039;externaliser par rapport au noyau, comme bien sûr un pilote, mais aussi un protocole de communication (par ex. &amp;lt;tt&amp;gt;ppp&amp;lt;/tt&amp;gt;) ou n&#039;importe quoi d&#039;autre.&lt;br /&gt;
&lt;br /&gt;
== Où se trouvent-ils ? ==&lt;br /&gt;
&lt;br /&gt;
Ils résident dans &amp;lt;tt&amp;gt;/lib/modules/version_du_noyau&amp;lt;/tt&amp;gt;. exemple : &amp;lt;tt&amp;gt;/lib/modules/2.4.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ce répertoire contient les dossiers suivants qui permettent de séparer les modules selon leur type : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;BORDER&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;block/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques de type bloc&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;fs/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| systèmes de fichier (FAT, ext2, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;misc/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques divers (carte tuner TV, port parallèle, carte son, joystick, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;net/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| pilotes des cartes réseaux et protocoles&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;scsi/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques SCSI&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;cdrom/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| pilotes CDROM non IDE (anciens CD-ROMs)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;ipv4/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ipv6/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| protocole IP v4 et v6(protocole réseau)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pcmcia/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| modules pour gérer les cartes PCMCIA&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;video/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| gestion des cartes video en console, framebuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce répertoire peut contenir d&#039;autres dossiers, plus un fichier nommé &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;, qui contient les dépendances entre modules (le module parport_ide à besoin du module parport, etc.). Ce fichier est généralement regénéré à chaque boot par la commande &amp;lt;code&amp;gt;depmod -a&amp;lt;/code&amp;gt; placée dans les scripts de démarrage.&lt;br /&gt;
&lt;br /&gt;
== Comment ajouter des modules, les recompiler ? ==&lt;br /&gt;
&lt;br /&gt;
=== Modules livrés avec le noyau ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez compilé votre noyau vous même et que vous désirez ajouter un module livré avec le noyau, il faut éditer la configuration du noyau, cocher l&#039;option &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; voulue dans la config du noyau, puis enregistrer la configuration noyau et compiler le tout : &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# make &amp;amp;&amp;amp; su -c &#039;make modules_install&#039;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(voir aussi la rubrique [[Kernel-kernel|noyau]])&lt;br /&gt;
&lt;br /&gt;
=== Modules livrés en dehors du noyau ===&lt;br /&gt;
&lt;br /&gt;
Parfois, des modules peuvent être trouvés en dehors de l&#039;arborescence des sources du noyau. Par exemple, vous pouvez télécharger un driver pour certains winmodems (hé oui ça arrive !!!) sur [http://www.o2.net/~gromitkc/winmodem.html cette page]. &amp;lt;br /&amp;gt;Certains de ces modules sont livrés sous forme binaire, on peut alors s&#039;en servir tel quels (&amp;lt;code&amp;gt;insmod -f ./le_module&amp;lt;/code&amp;gt;). D&#039;autres sont livrés sous forme source sous license GPL ou non ; il faut d&#039;abord les compiler (lisez la doc fournie avec ; cela nécessite en général d&#039;avoir installé les sources du noyau).&lt;br /&gt;
&lt;br /&gt;
=== Prise en compte des nouveaux modules ===&lt;br /&gt;
&lt;br /&gt;
Pour que les modules nouvellement installés soient pris en compte, si ce sont des modules &amp;quot;hors noyau&amp;quot;, il est bon de les copier dans &amp;lt;tt&amp;gt;/lib/modules/version_du_noyau/misc&amp;lt;/tt&amp;gt; (pour les modules &amp;quot;noyau&amp;quot;, la commande &amp;lt;code&amp;gt;make modules_install&amp;lt;/code&amp;gt; fait ça) &amp;lt;br /&amp;gt;Il faut aussi faire un : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;# depmod -a&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Cette commande remet à jour le fichier &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;, en fonction du ou des nouveaux modules. &amp;lt;br /&amp;gt;Ainsi, vous pourrez charger le module par &amp;lt;code&amp;gt;modprobe le_module&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;depmod&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comment les manipuler ? ==&lt;br /&gt;
&lt;br /&gt;
Avec les programmes &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rmmod&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; qui se situent dans &amp;lt;tt&amp;gt;/sbin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt; : voir quels modules sont chargés à l&#039;heure actuelle. Cette commande affiche la liste des modules chargés, les dépendances entre les modules chargés, et dit si les modules sont utilisés ou non.&lt;br /&gt;
* &amp;lt;code&amp;gt;insmod module&amp;lt;/code&amp;gt; : charger un module en mémoire. Si &amp;lt;code&amp;gt;module&amp;lt;/code&amp;gt; est spécifié sans extension (en général &amp;lt;code&amp;gt;.o&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt; cherchera le module dans des répertoires par défaut, en général &amp;lt;tt&amp;gt;/lib/module/version_du_noyau&amp;lt;/tt&amp;gt;. Sinon, il faut donner le chemin où trouver le module. (Par exemple : &amp;lt;code&amp;gt;insmod -f ./module.o&amp;lt;/code&amp;gt; ; le &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; permet de forcer le chargement d&#039;un module qui a été compilé avec une version du noyau différente de celle du noyau qui tourne actuellement.)&lt;br /&gt;
* &amp;lt;code&amp;gt;rmmod module&amp;lt;/code&amp;gt; : décharger un module, où &amp;lt;code&amp;gt;module&amp;lt;/code&amp;gt; est le nom donné par &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; : exécuter les commandes &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;rmmod&amp;lt;/code&amp;gt; à votre place. &amp;lt;code&amp;gt;modprobe le_module&amp;lt;/code&amp;gt; charge &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt; en mémoire ainsi que tous les modules dont il dépend (en lisant le fichier &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;). &amp;lt;code&amp;gt;modprobe -r le_module&amp;lt;/code&amp;gt; enleve &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt; de la mémoire, ainsi que tous les modules dont il dépend, sauf s&#039;ils sont utilisés par un autre module bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans les pages man de &amp;lt;tt&amp;gt;lsmod&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;insmod&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;modprobe&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Comment faire pour les charger automatiquement ? ==&lt;br /&gt;
&lt;br /&gt;
=== Chargeur dynamique pour les noyaux 2.4 et antérieurs ===&lt;br /&gt;
&lt;br /&gt;
Tout ça c&#039;est bien beau, mais si à chaque fois avant de regarder la télé, il faut faire &amp;lt;code&amp;gt;modprobe bttv&amp;lt;/code&amp;gt;, ou si à chaque fois qu&#039;on veut lancer Xracer il faut faire &amp;lt;code&amp;gt;modprobe 3dfx&amp;lt;/code&amp;gt;, ça va vite devenir fastidieux.&lt;br /&gt;
&lt;br /&gt;
Ce qu&#039;on veut, c&#039;est que le bon module se charge lorsqu&#039;on utilise le périphérique (&amp;lt;tt&amp;gt;/dev/le_periph&amp;lt;/tt&amp;gt;) correspondant. C&#039;est simple. Il faut indiquer au chargeur de modules que pour acceder à ce périphérique il doit charger le module &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt;. Cela se fait via son fichier de configuration &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; (pour les versions de modutils antérieures à 2.3.5-1, ce fichier s&#039;appelle &amp;lt;tt&amp;gt;/etc/conf.modules&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Pour qu&#039;un module soit chargé automatiquement, faire : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;# ls -l /dev/le_periph&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;qui affiche une ligne ressemblant à : &amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;crw-------   1 user     group &#039;&#039;&#039;&amp;lt;u&amp;gt;144&amp;lt;/u&amp;gt;&#039;&#039;&#039;, &#039;&#039;&amp;lt;u&amp;gt;12&amp;lt;/u&amp;gt;&#039;&#039; May 25  2000 /dev/le_periph&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour chaque ligne est affiché :&lt;br /&gt;
* Un numéro majeur (ici &#039;&#039;&#039;144&#039;&#039;&#039;) : il identifie le pilote du périphérique,&lt;br /&gt;
* Un numéro mineur (ici &#039;&#039;&#039;12&#039;&#039;&#039;) : il sert à différencier les périphériques utilisant un même pilote.&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; dans votre éditeur de texte préféré et ajoutez une ligne : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;alias char-major-144 le_module&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;en remplaçant bien sûr &amp;lt;code&amp;gt;144&amp;lt;/code&amp;gt; par votre numéro, et &amp;lt;code&amp;gt;le_module&amp;lt;/code&amp;gt; par votre module. &amp;lt;br/&amp;gt;Par exemple, pour charger le module gérant la carte 3dfx, j&#039;ai dans mon &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt; la ligne suivante : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;alias char-major-107 3dfx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; :&lt;br /&gt;
: Il existe des aliases prédéfinis pour remplacer &amp;lt;tt&amp;gt;char-major-xxx&amp;lt;/tt&amp;gt; pour les périphériques courants : &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; pour la première carte ethernet (&amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt; pour la suivante, etc.), &amp;lt;tt&amp;gt;parport_lowlevel&amp;lt;/tt&amp;gt; pour le port parallèle, &amp;lt;tt&amp;gt;sound&amp;lt;/tt&amp;gt; pour la carte son, &amp;lt;tt&amp;gt;midi&amp;lt;/tt&amp;gt; pour la partie midi de la carte son, etc.&lt;br /&gt;
&lt;br /&gt;
Si votre module a besoin d&#039;options, par exemple pour connaître une adresse ou une interruption, vous pouvez aussi ajouter une ligne du type : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;options le_module irq=5 dma=0 dma2=1 mpu_io=0x388 io=0x370&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;Chaque module a ses propres options, reportez-vous à la documentation de votre module afin de les connaître.&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous voulez lancer une commande avant ou après que le module soit chargé en mémoire, vous pouvez ajouter une ligne du type : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;pre-install le_module la_commande&amp;lt;/code&amp;gt;, ou : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;post-install le_module la_commande&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Chargeur dynamique de modules sur Debian ====&lt;br /&gt;
&lt;br /&gt;
Debian juge que l&#039;édition du fichier &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt; par l&#039;utilisateur est trop risquée. A la place, elle propose d&#039;éditer des fichiers dans le répertoire &amp;lt;tt&amp;gt;/etc/modutils/&amp;lt;/tt&amp;gt;. Ces fichiers ont la même syntaxe que &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;. Il existe trois fichiers par défault :&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/actions&amp;lt;/tt&amp;gt; : regroupe toutes les actions sur les modules,&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/aliases&amp;lt;/tt&amp;gt; : regroupe tous les alias,&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/paths&amp;lt;/tt&amp;gt; : regroupe tous les chemins.&lt;br /&gt;
Une fois les fichiers mis à jour, la commande &amp;lt;code&amp;gt;update-modules&amp;lt;/code&amp;gt; lit les fichiers présents dans &amp;lt;tt&amp;gt;/etc/modutils/&amp;lt;/tt&amp;gt; et regénère &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;update-modules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Chargeur dynamique pour les noyaux 2.6 et à venir ===&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; ne sert plus et le fichier &amp;lt;tt&amp;gt;/etc/modprobe.conf&amp;lt;/tt&amp;gt; est utilisé à la place. Sa syntaxe est une simplification de la syntaxe de &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;. Par exemple, à la place de&lt;br /&gt;
&amp;lt;code&amp;gt;pre-install le_module une_commande_1&lt;br /&gt;
post-install le_module une_commande_2&amp;lt;/code&amp;gt;&lt;br /&gt;
on aura&lt;br /&gt;
&amp;lt;code&amp;gt;install le_module une_commande_1; modprobe --ignore-install le_module;une_commande_2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;modprobe.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Chargeur statique de modules ===&lt;br /&gt;
&lt;br /&gt;
Il est possible de charger un module au démarrage de Linux en ajoutant une ligne avec le nom du module dans le fichier &amp;lt;tt&amp;gt;/etc/modules&amp;lt;/tt&amp;gt;. Cependant, on perd l&#039;intérêt de la modularité puisqu&#039;il est chargé même s&#039;il n&#039;est pas utilisé.&lt;br /&gt;
&lt;br /&gt;
Voilà, c&#039;est tout, maintenant lorsqu&#039;un programme utilisera le periphérique, plus besoin de charger le module à la main, cela se fera automatiquement.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; :&lt;br /&gt;
: on peut faire des tas de choses &amp;quot;intéressantes&amp;quot; avec les modules, allez voir [http://www.safenetworks.com/Linux/modules.html cette page] par exemple... En résumé, si vous êtes un paranoïaque de la sécurité, n&#039;utilisez pas les modules et compilez-vous un noyau complètement monolithique sans chargeur de modules (merci à [http://www.bruhat.net BooK] pour l&#039;info).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa et a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 25/05/2000.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 25/05/2000, Jean-Christophe Cardot&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Ondelettes</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Kernel-modules&amp;diff=16108</id>
		<title>Kernel-modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Kernel-modules&amp;diff=16108"/>
		<updated>2008-11-05T11:12:19Z</updated>

		<summary type="html">&lt;p&gt;Ondelettes : /* A quoi ça sert ? */ langue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Configurer votre noyau]]&lt;br /&gt;
= Les modules de Linux =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Les modules de Linux&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Jean-Christophe&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Comment fonctionnent ces mystérieux modules ?&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous ne savez pas ce que sont les modules, allez voir le glossaire !&lt;br /&gt;
&lt;br /&gt;
== A quoi ça sert ? ==&lt;br /&gt;
&lt;br /&gt;
; Bon, puisque vous n&#039;avez pas été lire le glossaire, voici la définition qui en est donnée :&lt;br /&gt;
: Les modules sont une façon qui a été trouvée pour rendre Linux (le noyau) plus modulaire (!) et plus léger. En effet, ce sont le plus souvent des pilotes qui ont été &amp;quot;sortis&amp;quot; du noyau dans des fichiers séparés, et qui sont chargés en mémoire, soit automatiquement lorsqu&#039;on se sert du périphérique concerné, soit manuellement. Ils permettent de réduire la taille mémoire utilisée par le noyau lui-même. Le concept de modules permet aussi d&#039;ajouter des pilotes de périphériques au système sans devoir recompiler le noyau.&lt;br /&gt;
&lt;br /&gt;
Bon, c&#039;est clair il me semble (normal, c&#039;est moi qui ai écrit ça ;). Les modules permettent aussi d&#039;ajouter des pilotes distribués uniquement sous forme binaire ; on ne peut pas les recompiler, mais on peut s&#039;en servir (ce qui est assez intéressant finalement ;). Les modules ne sont pas que des pilotes, d&#039;une façon générale, ça peut être tout morceau de code qu&#039;on a décidé d&#039;externaliser par rapport au noyau, comme bien sûr un pilote, mais aussi un protocole de communication (par ex. &amp;lt;tt&amp;gt;ppp&amp;lt;/tt&amp;gt;) ou n&#039;importe quoi d&#039;autre.&lt;br /&gt;
&lt;br /&gt;
== Où se trouvent-ils ? ==&lt;br /&gt;
&lt;br /&gt;
Ils résident dans &amp;lt;tt&amp;gt;/lib/modules/version_du_noyau&amp;lt;/tt&amp;gt;. exemple : &amp;lt;tt&amp;gt;/lib/modules/2.4.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ce répertoire contient les dossiers suivants qui permettent de séparer les modules selon leur type : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;BORDER&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;block/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques de type bloc&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;fs/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| systèmes de fichier (FAT, ext2, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;misc/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques divers (carte tuner TV, port parallèle, carte son, joystick, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;net/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| drivers des cartes réseaux et protocoles&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;scsi/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| périphériques SCSI&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;cdrom/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| drivers CDROM non IDE (anciens CD-ROMs)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;ipv4/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ipv6/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| protocole IP v4 et v6(protocole réseau)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pcmcia/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| modules pour gérer les cartes PCMCIA&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;video/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| gestion des cartes video en console, framebuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce répertoire peut contenir d&#039;autres dossiers, plus un fichier nommé &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;, qui contient les dépendances entre modules (le module parport_ide à besoin du module parport, etc.). Ce fichier est généralement regénéré à chaque boot par la commande &amp;lt;code&amp;gt;depmod -a&amp;lt;/code&amp;gt; placée dans les scripts de démarrage.&lt;br /&gt;
&lt;br /&gt;
== Comment ajouter des modules, les recompiler ? ==&lt;br /&gt;
&lt;br /&gt;
=== Modules livrés avec le noyau ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez compilé votre noyau vous même et que vous désirez ajouter un module livré avec le noyau, il faut éditer la configuration du noyau, cocher l&#039;option &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; voulue dans la config du noyau, puis enregistrer la configuration noyau et compiler le tout : &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# make &amp;amp;&amp;amp; su -c &#039;make modules_install&#039;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(voir aussi la rubrique [[Kernel-kernel|noyau]])&lt;br /&gt;
&lt;br /&gt;
=== Modules livrés en dehors du noyau ===&lt;br /&gt;
&lt;br /&gt;
Parfois, des modules peuvent être trouvés en dehors de l&#039;arborescence des sources du noyau. Par exemple, vous pouvez télécharger un driver pour certains winmodems (hé oui ça arrive !!!) sur [http://www.o2.net/~gromitkc/winmodem.html cette page]. &amp;lt;br /&amp;gt;Certains de ces modules sont livrés sous forme binaire, on peut alors s&#039;en servir tel quels (&amp;lt;code&amp;gt;insmod -f ./le_module&amp;lt;/code&amp;gt;). D&#039;autres sont livrés sous forme source sous license GPL ou non ; il faut d&#039;abord les compiler (lisez la doc fournie avec ; cela nécessite en général d&#039;avoir installé les sources du noyau).&lt;br /&gt;
&lt;br /&gt;
=== Prise en compte des nouveaux modules ===&lt;br /&gt;
&lt;br /&gt;
Pour que les modules nouvellement installés soient pris en compte, si ce sont des modules &amp;quot;hors noyau&amp;quot;, il est bon de les copier dans &amp;lt;tt&amp;gt;/lib/modules/version_du_noyau/misc&amp;lt;/tt&amp;gt; (pour les modules &amp;quot;noyau&amp;quot;, la commande &amp;lt;code&amp;gt;make modules_install&amp;lt;/code&amp;gt; fait ça) &amp;lt;br /&amp;gt;Il faut aussi faire un : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;# depmod -a&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Cette commande remet à jour le fichier &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;, en fonction du ou des nouveaux modules. &amp;lt;br /&amp;gt;Ainsi, vous pourrez charger le module par &amp;lt;code&amp;gt;modprobe le_module&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;depmod&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comment les manipuler ? ==&lt;br /&gt;
&lt;br /&gt;
Avec les programmes &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rmmod&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; qui se situent dans &amp;lt;tt&amp;gt;/sbin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt; : voir quels modules sont chargés à l&#039;heure actuelle. Cette commande affiche la liste des modules chargés, les dépendances entre les modules chargés, et dit si les modules sont utilisés ou non.&lt;br /&gt;
* &amp;lt;code&amp;gt;insmod module&amp;lt;/code&amp;gt; : charger un module en mémoire. Si &amp;lt;code&amp;gt;module&amp;lt;/code&amp;gt; est spécifié sans extension (en général &amp;lt;code&amp;gt;.o&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt; cherchera le module dans des répertoires par défaut, en général &amp;lt;tt&amp;gt;/lib/module/version_du_noyau&amp;lt;/tt&amp;gt;. Sinon, il faut donner le chemin où trouver le module. (Par exemple : &amp;lt;code&amp;gt;insmod -f ./module.o&amp;lt;/code&amp;gt; ; le &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; permet de forcer le chargement d&#039;un module qui a été compilé avec une version du noyau différente de celle du noyau qui tourne actuellement.)&lt;br /&gt;
* &amp;lt;code&amp;gt;rmmod module&amp;lt;/code&amp;gt; : décharger un module, où &amp;lt;code&amp;gt;module&amp;lt;/code&amp;gt; est le nom donné par &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; : exécuter les commandes &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;rmmod&amp;lt;/code&amp;gt; à votre place. &amp;lt;code&amp;gt;modprobe le_module&amp;lt;/code&amp;gt; charge &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt; en mémoire ainsi que tous les modules dont il dépend (en lisant le fichier &amp;lt;tt&amp;gt;modules.dep&amp;lt;/tt&amp;gt;). &amp;lt;code&amp;gt;modprobe -r le_module&amp;lt;/code&amp;gt; enleve &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt; de la mémoire, ainsi que tous les modules dont il dépend, sauf s&#039;ils sont utilisés par un autre module bien sûr.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans les pages man de &amp;lt;tt&amp;gt;lsmod&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;insmod&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;modprobe&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Comment faire pour les charger automatiquement ? ==&lt;br /&gt;
&lt;br /&gt;
=== Chargeur dynamique pour les noyaux 2.4 et antérieurs ===&lt;br /&gt;
&lt;br /&gt;
Tout ça c&#039;est bien beau, mais si à chaque fois avant de regarder la télé, il faut faire &amp;lt;code&amp;gt;modprobe bttv&amp;lt;/code&amp;gt;, ou si à chaque fois qu&#039;on veut lancer Xracer il faut faire &amp;lt;code&amp;gt;modprobe 3dfx&amp;lt;/code&amp;gt;, ça va vite devenir fastidieux.&lt;br /&gt;
&lt;br /&gt;
Ce qu&#039;on veut, c&#039;est que le bon module se charge lorsqu&#039;on utilise le périphérique (&amp;lt;tt&amp;gt;/dev/le_periph&amp;lt;/tt&amp;gt;) correspondant. C&#039;est simple. Il faut indiquer au chargeur de modules que pour acceder à ce périphérique il doit charger le module &amp;lt;tt&amp;gt;le_module&amp;lt;/tt&amp;gt;. Cela se fait via son fichier de configuration &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; (pour les versions de modutils antérieures à 2.3.5-1, ce fichier s&#039;appelle &amp;lt;tt&amp;gt;/etc/conf.modules&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Pour qu&#039;un module soit chargé automatiquement, faire : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;# ls -l /dev/le_periph&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;qui affiche une ligne ressemblant à : &amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;crw-------   1 user     group &#039;&#039;&#039;&amp;lt;u&amp;gt;144&amp;lt;/u&amp;gt;&#039;&#039;&#039;, &#039;&#039;&amp;lt;u&amp;gt;12&amp;lt;/u&amp;gt;&#039;&#039; May 25  2000 /dev/le_periph&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour chaque ligne est affiché :&lt;br /&gt;
* Un numéro majeur (ici &#039;&#039;&#039;144&#039;&#039;&#039;) : il identifie le pilote du périphérique,&lt;br /&gt;
* Un numéro mineur (ici &#039;&#039;&#039;12&#039;&#039;&#039;) : il sert à différencier les périphériques utilisant un même pilote.&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; dans votre éditeur de texte préféré et ajoutez une ligne : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;alias char-major-144 le_module&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;en remplaçant bien sûr &amp;lt;code&amp;gt;144&amp;lt;/code&amp;gt; par votre numéro, et &amp;lt;code&amp;gt;le_module&amp;lt;/code&amp;gt; par votre module. &amp;lt;br/&amp;gt;Par exemple, pour charger le module gérant la carte 3dfx, j&#039;ai dans mon &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt; la ligne suivante : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;alias char-major-107 3dfx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; :&lt;br /&gt;
: Il existe des aliases prédéfinis pour remplacer &amp;lt;tt&amp;gt;char-major-xxx&amp;lt;/tt&amp;gt; pour les périphériques courants : &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; pour la première carte ethernet (&amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt; pour la suivante, etc.), &amp;lt;tt&amp;gt;parport_lowlevel&amp;lt;/tt&amp;gt; pour le port parallèle, &amp;lt;tt&amp;gt;sound&amp;lt;/tt&amp;gt; pour la carte son, &amp;lt;tt&amp;gt;midi&amp;lt;/tt&amp;gt; pour la partie midi de la carte son, etc.&lt;br /&gt;
&lt;br /&gt;
Si votre module a besoin d&#039;options, par exemple pour connaître une adresse ou une interruption, vous pouvez aussi ajouter une ligne du type : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;options le_module irq=5 dma=0 dma2=1 mpu_io=0x388 io=0x370&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;Chaque module a ses propres options, reportez-vous à la documentation de votre module afin de les connaître.&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous voulez lancer une commande avant ou après que le module soit chargé en mémoire, vous pouvez ajouter une ligne du type : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;pre-install le_module la_commande&amp;lt;/code&amp;gt;, ou : &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;post-install le_module la_commande&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Chargeur dynamique de modules sur Debian ====&lt;br /&gt;
&lt;br /&gt;
Debian juge que l&#039;édition du fichier &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt; par l&#039;utilisateur est trop risquée. A la place, elle propose d&#039;éditer des fichiers dans le répertoire &amp;lt;tt&amp;gt;/etc/modutils/&amp;lt;/tt&amp;gt;. Ces fichiers ont la même syntaxe que &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;. Il existe trois fichiers par défault :&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/actions&amp;lt;/tt&amp;gt; : regroupe toutes les actions sur les modules,&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/aliases&amp;lt;/tt&amp;gt; : regroupe tous les alias,&lt;br /&gt;
* &amp;lt;tt&amp;gt;/etc/modutils/paths&amp;lt;/tt&amp;gt; : regroupe tous les chemins.&lt;br /&gt;
Une fois les fichiers mis à jour, la commande &amp;lt;code&amp;gt;update-modules&amp;lt;/code&amp;gt; lit les fichiers présents dans &amp;lt;tt&amp;gt;/etc/modutils/&amp;lt;/tt&amp;gt; et regénère &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;update-modules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Chargeur dynamique pour les noyaux 2.6 et à venir ===&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;tt&amp;gt;/etc/modules.conf&amp;lt;/tt&amp;gt; ne sert plus et le fichier &amp;lt;tt&amp;gt;/etc/modprobe.conf&amp;lt;/tt&amp;gt; est utilisé à la place. Sa syntaxe est une simplification de la syntaxe de &amp;lt;tt&amp;gt;modules.conf&amp;lt;/tt&amp;gt;. Par exemple, à la place de&lt;br /&gt;
&amp;lt;code&amp;gt;pre-install le_module une_commande_1&lt;br /&gt;
post-install le_module une_commande_2&amp;lt;/code&amp;gt;&lt;br /&gt;
on aura&lt;br /&gt;
&amp;lt;code&amp;gt;install le_module une_commande_1; modprobe --ignore-install le_module;une_commande_2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; Plus d&#039;infos dans la page man de &amp;lt;tt&amp;gt;modprobe.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Chargeur statique de modules ===&lt;br /&gt;
&lt;br /&gt;
Il est possible de charger un module au démarrage de Linux en ajoutant une ligne avec le nom du module dans le fichier &amp;lt;tt&amp;gt;/etc/modules&amp;lt;/tt&amp;gt;. Cependant, on perd l&#039;intérêt de la modularité puisqu&#039;il est chargé même s&#039;il n&#039;est pas utilisé.&lt;br /&gt;
&lt;br /&gt;
Voilà, c&#039;est tout, maintenant lorsqu&#039;un programme utilisera le periphérique, plus besoin de charger le module à la main, cela se fera automatiquement.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; :&lt;br /&gt;
: on peut faire des tas de choses &amp;quot;intéressantes&amp;quot; avec les modules, allez voir [http://www.safenetworks.com/Linux/modules.html cette page] par exemple... En résumé, si vous êtes un paranoïaque de la sécurité, n&#039;utilisez pas les modules et compilez-vous un noyau complètement monolithique sans chargeur de modules (merci à [http://www.bruhat.net BooK] pour l&#039;info).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa et a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 25/05/2000.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 25/05/2000, Jean-Christophe Cardot&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Ondelettes</name></author>
	</entry>
</feed>