• [^] # Re: pciids/usbids entre autres

    Posté par . En réponse au message Chargement automatique des modules ?. É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.