Détection du matériel sur PCI
[pour les bcc: c'est pour info...]
Salut les Free Frenchs,
Dans la famille « je veux simplifier l'installation et assurer la détection
automatique du matériel », j'ai la famille PCI.
Pour un noyau Linux, par exemple, et sur du matériel récent, que les pilotes
soient présents (dans le noyau ou en modules) ou pas, la détection de tous
les périphériques connectés est possible, simplement parce que la procédure
est prévue par la norme.
Sur du matériel neuf, tant les contrôleurs IDE que l'AGP sont implémentés
"sur" du PCI, ce qui signifie que dès lors que l'on a les infos PCI, on est
pas loin d'avoir une image presque exhaustive du matériel (oui ! la carte son
est ISA etc... : je simplifie).
Les périphériques sont identifiables par des en-têtes de 256 octets, dont
l'emplacement en mémoire et le mode d'accès reposent sur des appels firmware
(bios32). En passant en revue les en-têtes, on peut donc identifier le
matériel via des _nombres_. Chaque fabricant (vendeur) de matériel possède
un identifiant unique (exemple : Intel -> 0x8086 --- nombre bien évidemment
choisi au hasard par Intel :-^) [dans la suite toutes les
valeurs sont en hexa]. De même chaque périphérique est identifié par 2
octets, et appartient à une classe de matériel qui est déterminée par un
octet sur les 3 qui décrivent les caractéristiques liées, etc...
Position du problème:
1) Les nombres ne sont pas spécialement « causants »; donc en règle
générale, on les transforme à destination de l'utilisateur en affichant des
chaînes de caractères. Mais on peut s'en passer.
Note: vous avez une option de compilation du noyau qui permet de choisir
de compiler la base de données permettant cet affichage ou pas; cela
n'influe strictement en rien sur le fonctionnement du noyau : c'est
cosmétique. En ne compilant pas la base (incomplète d'ailleurs), on
économise 80ko dans le noyau
-> ne pas compiler, c'est l'option que j'ai choisie pour l'installation,
étant donné de toute façon que je ne suis pas « user friendly » ;)
2) Toutes les informations sont disponibles dès lors que l'on a compilé le
noyau avec le support du système de fichiers virtuel `proc'. Mais les infos
sont affichées plusieurs fois. Sous forme plus ou moins lisible (dépend de
1), dans /proc/pci, sous une forme beaucoup plus concise sous
/proc/bus/pci/devices.
Question: a-t-on besoin des infos "humainement lisibles" ?
Réponse : si on veut faire une détection automatique : non.
Question: les infos dans /proc/pci et dans /proc/bus/pci/devices sont-elles
les mêmes ?
Réponse: ...non. Il y en a à la fois plus dans le dernier, mais il en manque
une : la classe de matériel.
Donc la question: quelqu'un sait-il si certains utilitaires "attaquent"
directement /proc/bus/pci/devices et si l'adjonction de l'info sur la classe
pourrait provoquer un problème ?
Pour rentrer un peu plus dans les détails (je sais, c'est passionnant, mais
c'est parce que je raconte bien :-^), la structure des en-têtes vous pouvez
la trouver dans les sources du noyau là:
include/linux/pci.h
La base de données (incomplète) là :
include/linux/pci.ids
Le programme listant les infos dans proc, là:
drivers/pci/proc.c
et nous découvrons alors, si je prends un extrait de /proc/bus/pci/devices
sur ma machine :
0050 10b79055 b 0000f401 fedffc00 00000000 00000000 00000000 00000000 00000000
Qui signifie (car ils sont joueurs, ils ont concaténé plusieurs infos):
[Rappel : toutes les valeurs sont en hexa !!!]
0050 bus/fonction
10b79055 vendeur/périphérique
b irq
Les 7 valeurs suivantes correspondent aux ressources.
Comment utiliser ces valeurs ?
Dans l'exemple,le vendeur est (0x)10b7. Vous vous connectez à :
http://www.yourvote.com/pci/
vous rentrez l'identifiant et vous découvrez qu'il s'agit d'une 3Com.
Le périphérique (0x)9055 correspond à une 3C905B-TX (à noter que chez 3Com
les 3 premiers chiffres vous donnent déjà une bonne indication de la nature
du périphérique).
Résumé:
-------
1) Pour des raisons d'efficacité (pouvoir extraire rapidement l'info sur une
certaine classe de périphérique), je souhaite modifier l'affichage de
/proc/bus/pci/devices. C'est facile, mais quelqu'un saurait-il quels sont
les utilitaires qui se reposent sur ce pseudo fichier, histoire que je
n'aille pas tout casser;
2) Pourquoi ne pas compiler la base de données avec Linux :
- parce qu'elle est énorme (celle fournie avec Linux est incomplète)
- parce qu'elle évolue dans le temps, et vous n'allez pas recompiler un
noyau juste pour le plaisir d'avoir une base plus à jour
- parce que l'info est utile surtout à l'installation, et qu'il suffit
de communiquer les identifiants (entiers) à un serveur
disposant/pouvant attaquer (d')une base de données pour trouver votre
bonheur
Corollaire:
-----------
Debian n'avait pas d'outil de détection automatique du matériel. Désormais
il l'a : vous. « Dites-moi ce dont vous avez besoin, et je vais vous expliquer
comment vous allez vous en passer...»
A+
--
Thierry LARONDE, Centre de Ressources Informatiques, Archamps - France
http://www.cri74.org/
Reply to: