Forum Linux.noyau Chargement automatique des modules ?

Posté par .
Tags : aucun
-3
13
août
2011

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 . É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 (page perso) . É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 dans udev 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 :

        alias char-major-M-m mon_module
        (et autres: man modprobe.conf)
      

      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 :
        shell# modinfo /lib/modules/mon_noyau/kernel/drivers/net/bnx2x.ko
        [...]
        alias:          pci:v000014E4d00001650sv*sd*bc*sc*i*
        alias:          pci:v000014E4d0000164Fsv*sd*bc*sc*i*
        alias:          pci:v000014E4d0000164Esv*sd*bc*sc*i*
        [...]
      

      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, dans modules.dep, que des outils comme modprobe 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 comme udev savent récupérer. Et quand sysfs est dispo, il y a des attributs sysfs qui peuvent aider a posteriori (sinon, lspci, lsusb, rulez), genre:

        shell# cat /sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0/modalias
        pci:v000010DEd00000659sv000010DEsd0000063Abc03sc00i00
      

      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 (page perso) . Évalué à 0.

    cette liste a été créée à partir de quoi ?

    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 :-)

     

    comment est gérée la détection automatique et la liaison avec les modules sous Linux

    Je ne comprends pas la question.

     

    Comment fonctionne le chargement automatique des modules sur une distribution ?

    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 . É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 à ceux qui les ont postés. Nous n'en sommes pas responsables.