Journal noyau: modules.* map {pci,usb,...}

Posté par  .
Étiquettes : aucune
0
16
juil.
2006
J'ai déjà mis ce texte dans le forum, mais pas de réponse, alors je vais essayer de profiter d'un auditoire plus large disponible dans les journaux.

Driver Binding:

Intro:
J'installe souvent des machines linux très différentes, dont les devices varient énormément et dont je suis constament entrain de chercher les modules du noyau.

question:
J'aimerais bien savoir si il est possible d'avoir des fichiers de correspondances pilotes(modules noyau) <--> peripheriques universel pour le dernier noyau, donc des fichiers tels que :
{
modules.ccwmap
modules.ieee1394map
modules.inputmap
modules.isapnpmap
modules.ofmap
modules.pcimap
modules.seriomap
modules.usbmap
}

Je suppose qu'un programme cherche au démarrage si un module peut être charger. Après avoir fouiller dans la doc du noyau, j'ai cru comprendre, qu'il utilise une fonction pour interroger le bus:

int match(struct device * dev, struct device_driver * drv);
et c'est lui qui vérifie la validité des IDs. ça me parait étrange.

Là je patauge un peu. Je voulais des fichiers complets pour faire la correspondance.

Je cherche à savoir comment se passe la recherche de driver à la découverte d'un nouveau périphérique, et comment moi_je pourrais m'en servir pour trouver cette correspondance et cocher les bonnes cases dans mon menuconfig.

Actuellement lorsque je cherche à faire une telle correspondance, je grep l'ID du périphérique dans les fichiers "modules.*map" présent dans /lib/modules/.

mais si le module n'a pas été sélectionné à la compilation, il ne s'y trouve pas.

Alors j'ai pris mon mal en patience et j'ai coché toutes les cases du dernier noyau (2.6.17.5) né après le magnifique race proc...
en cochant le plus de choses possible en module. J'ai tout compilé et j'ai eu des fichiers modules.*map légèrement plus complet que ceux fourni par le noyau debian.

Mais après quelques grep, je me suis aperçu que certains IDs n'étaient pas dans ces fichiers et que seul un:
grep -R "0xXXXX" /usr/src/linux me trouvait la correspondance. car l'id se trouve dans les commentaire du code.
Exemple: 0000:01:00.0 0300: 1002:4742 (rev 5c) VGA compatible controller: ATI Technologies Inc 3D Rage Pro AGP 1X/2X (rev 5c)
0x0004742 ne figure pas dans les /lib/modules/<ker_ver>/modules.*map alors que je le trouve avec un grep dans les sources du noyau. ( grep -R 0x4742 /usr/src/linux)

J'ai du louper quelque chose, parce que je trouve ça étrange que l'on ne stocke pas la liste de tous les périphériques supportés par le noyau. Je suppose que ça existe, ou alors je n'ai pas compris quelque chose. Je comprend pas pourquoi il faudrait compiler quoi que ce soit pour l'avoir, quelque soit les modules choisis, les modules ne changent pas de nom et l'id des périphérique non plus.
Donc je cherche des explications sur cette correspondance.
Si quelqu'un a de la doc en guise d'explication, je suis preneur.

surtout qu'en plus de ça je n'ai pas les modules propriétaires tels que nvidia, ati... et ceux que je ne connais pas...

PS: j'ai trouvé des fichiers intérressant avec des IDs, avec un find dans les sources du kernel:

find . -iname "*_ids*" -o -iname "*_regs*"

Tant qu'à faire, Existe t-il des fichiers qui regroupe les ID de tous les constructeurs ? de tous les périphériques ?
  • # moi

    Posté par  (site web personnel) . Évalué à -2.

    moi je ne peux pas plus te donner de réponses que dans le forum ;-(
  • # lspci

    Posté par  (site web personnel) . Évalué à 1.

    installe lspci.
    Cest dans le package pciutils je crois.
    En l'installant tu installe un fichier idquelqechose. (sous gentoo on voit le nom car il le telecharge)
    Et dans ce fichier tu as tous les id reconnu.

    et surtous quand tu tape lspci tu obtient tous ce qui est connu:
    par exemple
    00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P] System Controller (rev 11)
    00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P] AGP Bridge
    00:07.0 ISA bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ISA (rev 04)
    00:07.1 IDE interface: Advanced Micro Devices [AMD] AMD-768 [Opus] IDE (rev 04)
    00:07.3 Bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ACPI (rev 03)
    00:10.0 PCI bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] PCI (rev 04)
    01:05.0 VGA compatible controller: ATI Technologies Inc Rage 128 Pro Ultra TF
    02:05.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller


    jarrive pas a retrouver le nom de ce fichier mais avec un find/locate tu devrais y arriver.
    • [^] # Re: lspci

      Posté par  . Évalué à 2.

      Le fichier en question, c'est pci.ids (qui se trouve dans /usr/share chez moi).
      • [^] # Re: lspci

        Posté par  . Évalué à 1.

        mince, effectivement ya déja cette liste, sous ubuntu ya même la commande update-pciids qui telecharge:
        http://pciids.sourceforge.net/pci.ids.bz2
        dans /var/lib/misc/pci.ids.new
        et update-usbids qui telecharge:
        http://linux-usb.sourceforge.net/usb.ids
        dans /var/lib/misc/usb.ids.new

        (j'ai le packet lshw aussi)

        /var/lib/misc/pci.ids == /usr/share/misc/pci.ids
        mais ya aussi /usr/share/lshw/pci.ids et /usr/share/hwdata/pci.ids

        http://www.linux-usb.org/usb.ids
        /var/lib/misc/usb.ids == /usr/share/misc/usb.ids
        mais ya aussi /usr/share/lshw/usb.ids et /usr/share/hwdata/usb.ids

        Merci, comme ca, je sais où trouver les listes de hardware mais cela m'affiche uniquement le contenu de lspci et/ou lshw (que je connaissait déjà) dont je me servais pour avoir les IDs, mais il me manque toujours la liste de correspondance des modules aux périphérique...

        pour pouvoir selectionner les modules comme le fait le noyau...
        • [^] # Re: lspci

          Posté par  (site web personnel) . Évalué à 2.

          pour pouvoir selectionner les modules comme le fait le noyau...


          Mais c'est quoi le besoin ?
          Dans quel process cette détection doit-elle se faire ?

          Tu veux un truc qui calcule config du kernel aux petits oignons afin de compiler un kernel ultra minimal ?
          Tu veux un kernel qui fonctionne nickel partout comme partout ?

          Quand à ta dernière question concernant une liste de tous les ID de tous les constructeurs... comment dire... ça serait vraiment trop beau.
          Je ne connais pas trop le monde du hardware, mais il me semble que c'est bien le problème dans le monde du PC : chacun fait sa sauce comme il veut et personne ne centralise rien.
          Pour USB, ils ont fait des efforts puisqu'on arrive à avoir des codes par constructeur.
          Mais pour le reste du PC j'y crois pas trop.

          Sinon, ça voudrait dire que c'est la fin du gros bordel, que Linux va bientôt nous dire "Insérez le disque contenant le pilote de Untel Corporated ou préférez-vous utiliser le pilote GPL compatible ?".


          Bref, j'ai peur que tu sois parti à la recherche du saint Graal, d'où ma question initiale pour recentrer le débat sur ce que tu veux faire.
          • [^] # Re: lspci

            Posté par  . Évalué à 1.

            les listes de hardware, je les ai trouvé, c'est les fichiers de mon dernier post. Ils sont assez complet, que ce soit pci et usb, chacun a son id constructeur et id periph.

            En faite je les avais sans le savoir dans lspci, hwdata et lshw mais je pensait que c'etait le materiel qui donnait son ID avec des mots... ;-)
            j'etais bien credule...

            Donc je possède la liste qui lie les IDs à leur nom
            et
            je désire avoir la liste qui lie les IDs au nom du module linux associé.

            Cette liste existe, dans les fichiers contenus dans:
            /lib/modules/<version noyau>/
            et ils ont pour nom:
            modules.{pci,usb,serio,...}map

            MAIS, ces fichiers sont générés d'après la compilation du noyau <version noyau>.

            Alors, Moi_je voudrais bien comprendre pourquoi il faut attendre une compilation pour avoir ces fichiers, et pourquoi il en esxiste pas des génériques avec la liste de tous les modules suivies des IDs suportés.

            Pour palier ç ce manque, je me suis pour l'instant contenter de compiler un noyau complet, avec toutes les options de mon make menuconfig activées (le plus possible en modules) et je suis arrivé avec des listes de modules.{*}map légèrement plus complète que celle fournie avec le noyau debian / ubuntu.

            (en passant, on peut en conclure que les noyaux generique des distrib debian et ubuntu ne compile pas tous les modules (environ 100 je crois qu'il manque))

            DONC je cherche des listes de correspondance universelle des peripherique connu (evidement) supporte par le noyau linux avec ses modules.

            Je cherche des fichiers modules.{*}map complets.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.