Bonjour à tous,
Je m'intéresse de très près au fonctionnement des systèmes GNU/Linux, et il y a encore une question à laquelle je n'ai pas trouvé de réponse (ou pas réussi à chercher ^^)
Comment fonctionne le chargement automatique des modules sur une distribution ?
Je sais que le fichier /etc/modules.conf permet de charger des modules au démarrage, mais cette liste a été créée à partir de quoi ?
En fait, comment est gérée la détection automatique et la liaison avec les modules sous Linux, c'est là ma problématique :)
Je vous remercie d'avance de vos éclaircissements,
Xanathos
# pciids/usbids entre autres
Posté par NeoX . Évalué à 0.
surement que le script qui cherche et lance les modules se base sur des elements connus du materiel, par exemple les PCIIDs ou les USBIDs.
[^] # Re: pciids/usbids entre autres
Posté par David Decotigny (site web personnel) . Évalué à 0.
Ça doit dépendre des distros. Chez moi,
/etc/modprobe.d
ne liste pas les modules a charger bien que, je crois, ce soit chose possible... enfin, "de mon temps", ça l'était.Je ne sais pas qui se charge de lancer le chargement des modules (
udev
sans doute chez moi), mais pour le guider, il y a la notion d'alias. Il y a donc ces aliases qui permettent d'automatiser les choses (voir ci-dessous) mais il reste possible de forcer un peu les choses à la main. Par exemple dansudev
tu peux indiquer de charger des modules particuliers, exécuter un script (par exemple pour charger un firmware), etc. quand un événement particulier se produit (eg. apparition d'un nouveau matériel). J'imagine que l'outil de chargement en question dépend des distros.Un alias peut être un block/char major/minor par exemple. Ou un pciid, usb id, etc. Pour définir ces aliases, ça peut se passer à la main dans
/etc/modprobe.d
. Par exemple :En règle générale, pour le matos, ça se passe plutôt automatiquement grâce aux infos stockées dans les
.ko
. Par exemple :Ces informations sont actualisées par
depmod
qui les scanne tous et stocke le résultat dans/lib/modules/mon_noyau/modules.alias
et autres fichiers dans le même répertoire. La chose qui s'occupe de récupérer le matos / détecter le nouveau matos doit utiliser ça pour savoir quel(s) module(s) charger (eh oui,depmod
s'occupe aussi de déterminer les "dépendances" entre modules, dansmodules.dep
, que des outils commemodprobe
savent exploiter pour simplifier leur chargement/déchargement).Pour faire le lien entre le matos et ces alias, il y a des messages noyau envoyés par les drivers de bus quand un matos est détecté (google
uevent
), et que des outils commeudev
savent récupérer. Et quandsysfs
est dispo, il y a des attributssysfs
qui peuvent aider a posteriori (sinon,lspci
,lsusb
, rulez), genre:Pour la petite histoire, c'est la macro
MODULE_DEVICE_TABLE()
qui permet de définir la liste des aliases intégrée dans un fichier.ko
.# Modules
Posté par Kerro . Évalué à 0.
A partir de rien de spécial. C'est soit rempli à la mimine par toi, ou par le responsable de tel ou tel paquet qui sait qu'un module particulier est nécessaire.
Certains programmes ajoutent un module dedans lors de l'installation. J'ai eu un exemple il y a quelques temps mais je ne me souviens plus ce que c'était :-)
Je ne comprends pas la question.
Un des script d'initialisation va lire le fichier, voilà tout.
Sur Debian et consorts c'est /etc/init.d/module-init-tools
# Mauvaise direction...
Posté par TheBreton . Évalué à 0.
>Comment fonctionne le chargement automatique des modules sur une distribution ?
Sous linux un module doit être explicitement chargé (ou compilé statiquement avec le kernel)
>Je sais que le fichier /etc/modules.conf permet de charger des modules au démarrage, mais cette liste a été créée à partir de quoi ?
En général ta distro lors de l'installation fait une énumération du matériel avec les commandes lspci, lsusb (ou autres comme lshw), ensuite en parcourant un fichier XML reliant les PID/VID du matériel avec les modules gérant le matériel le fichier de chargement de module est construit.
>En fait, comment est gérée la détection automatique et la liaison avec les modules sous Linux, c'est là ma problématique :)
La c'est à la fois plus simple et plus complexe, en fait les modules sont compilée sous forme de fichier objet et l'étape du linkage n'est effectué que lors du chargement par la commande modprobe.
En clair c'est pour cela que si erreur il y as, elle n'est connu que sous la forme de fonction ou de donnée non-trouvée qu'au chargement du module avec le kernel.
Bref c'est une éditions de liens dynamique des modules et du kernel, c'est pour cela que pour compiler un module il faut impérativement les header de son kernel.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.