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 manatlan (site web personnel) . Évalué à -2.
# lspci
Posté par Denis Montjoie (site web personnel) . Évalué à 1.
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 sk . Évalué à 2.
[^] # Re: lspci
Posté par abc . Évalué à 1.
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 Bonnefille Guilhem (site web personnel) . Évalué à 2.
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 abc . Évalué à 1.
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.