Une fois que vous avez trouvé votre matériel, le même programme qui l'a trouvé vous indique normalement comment il est configuré. Donc, trouver comment un matériel est configuré revient habituellement à trouver le matériel.
Ici, « configuration » correspond à l'assignation des ressources bus PnP (adresses, IRQ et DMA). Pour chaque périphérique, il existe deux parties à cette question de configuration :
Que croit le pilote en ce qui concerne la configuration matérielle ?
Quelle configuration (s'il y en a une) est réellement enregistrée au niveau du matériel ?
Un autre problème est que lors de la visualisation des messages de configuration à l'écran, vous devez savoir si la configuration affichée est celle du pilote, du périphérique physique ou des deux. Si le pilote de périphérique a soit enregistré la configuration soit vérifié le matériel, alors le pilote devrait avoir les bonnes informations.
Mais, quelquefois, le pilote a obtenu des ressources incorrectes par un script ou un fichier de configuration, par des paramètres de ressources incorrectes données à un module, ou peut-être même que la configuration ne lui a pas été fournie complètement et qu'il essaie d'utiliser par défaut des ressources incorrectes. Par exemple, quelqu'un peut utiliser setserial pour indiquer au pilote de périphérique une configuration incorrecte des ressources et le pilote les acceptera sans broncher. Mais le port série ne fonctionne pas bien (s'il fonctionne tout court).
Un problème habituel est que le logiciel ne détecte pas votre périphérique ou ne détermine pas le bon pilote pour celui-ci. Pour les périphériques PnP, les détecter est facile avec un logiciel PnP sauf pour le cas inhabituel où le matériel a été désactivé. Le BIOS peut parfois être initialisé pour désactiver les périphériques PnP ou un cavalier/interrupteur sur le périphérique physique lui-même pourrait le désactiver. Dans ce cas, le matériel ne peut pas être détecté du tout jusqu'à ce que vous re-configuriez le BIOS ou que vous changiez le cavalier/interrupteur.
Comme le bus PCI est intrinsèquement PnP, il n'y a pas de périphériques cachés. Même si les périphériques PnP sont faciles à trouver avec les méthodes PnP, si le pilote n'utilise pas les méthodes PnP mais utilise l'ancienne méthode de recherche aux adresses supposées, ils pourraient ne pas être trouvés. Ceci est dû au fait que, avant que les ressources bus aient été initialisées (par le BIOS ou Linux), le périphérique pourrait ne pas avoir d'adresses du tout, donc parcourir les adresses habituelles n'apportera rien. Pour l'ancien bus ISA, quelques-uns des périphériques pourraient être non PnP et, de ce fait, les anciennes méthodes pourraient fonctionner. Donc, de nombreux pilotes continuent à parcourir les adresses habituelles en plus d'utiliser les méthodes PnP (parcours PnP, quelquefois appelé simplement parcours).
Façons de détecter des périphériques matériels (et leur configurations) : (suivre le lien pour plus de détails)
Vérifier le BIOS pour vous assurer qu'ils ne sont pas désactivés ;
Regarder les messages de démarrage à l'écran (voir les messages au démarrage) ;
Regarder dans la section intitulée « Le répertoire /proc » ;
Outils pour détecter et configurer tout le matériel... lsdev, hwinfo, discover, kudzu ;
Bus ISA : la section intitulée « Cartes ISA PnP »
Bus ISA : la section intitulée « Cartes non PnP »
Bus ISA : la section intitulée « Cartes non PnP avec cavaliers »
Bus ISA : la section intitulée « Cartes non PnP et sans cavaliers »
Des informations significatives sur la configuration peuvent être obtenues
en lisant
les messages affichés par le BIOS et par Linux lors du
démarrage de l'ordinateur. Ces messages disparaissent souvent trop rapidement
pour être lus mais, une fois le défilement terminé, tapez
Majuscule+Page Suivante
plusieurs
fois pour revenir en arrière. Pour aller en avant, faites
Majuscule+Page Précédente.
Utilisez
dmesg à la console à n'importe quel moment pour afficher
seulement les messages du noyau. Vous ne verrez pas certains messages les plus
importants provenant généralement du BIOS. Les messages
affichés par Linux peuvent parfois n'afficher que ce que le pilote de
périphérique croit être configuré, peut-être à cause d'un mauvais fichier de
configuration. Vérifier les fichiers de traces dans /var/log
peut être utile.
Pour le bus PCI, la notation 00:1a:0 signifie le bus PCI 00 (le bus PCI principal), la carte PCI (ou le composant) 1a et la fonction 0 (le premier périphérique) sur la carte ou le composant. Le deuxième périphérique sur la carte (ou sur le composant) devrait être 00:08:1.
Les messages du BIOS s'affichent en premier et montrent la configuration du matériel à ce moment, mais isapnp, ou les utilitaires PCI, voire les pilotes de périphériques peuvent le changer plus tard. Dans certains cas, il n'affiche pas les périphériques que le BIOS n'a pas configuré.
Si les messages du BIOS ne s'affichent pas en revenant au début des messages du BIOS avec Majuscule+Page Suivante, essayez de mettre en pause lorsqu'ils apparaissent, en utilisant la touche Pause dès que les premiers mots apparaissent. Appuyez sur n'importe quelle touche pour continuer. Il est souvent difficile d'appuyer sur Pause exactement au bon moment. Assurez-vous d'appuyer continuellement sur la touche Shift avant d'appuyer sur Pause car Pause est une touche nécessitant l'utilisation de Shift. Si vous n'avez pas réussi, appuyez sur Ctrl+Alt+Del au lancement de Linux pour le relancer et essayer de nouveau. Une fois que les messages de Linux commencent à être visibles, il est trop tard pour utiliser Pause car cela ne gèlera pas les messages de Linux.
Pour initialiser des éléments du BIOS comme les IRQ réservés au matériel propriétaire, aux adresses des ports série, et cætera vous aurez besoin d'entrer dans les menus de configuration du BIOS (CMOS) au lancement. Chaque marque de BIOS a différentes touches pour ce faire. Il existe des listes sur Internet. Parfois en gelant l'affichage des messages du BIOS ou en regardant l'écran, la touche que vous devez appuyer sera indiquée dans un message tel que « Press DEL for setup » (« Appuyez sur DEL pour la configuration »). Mais il pourrait disparaître si rapidement que vous ne le verrez pas. Bien sûr, vous ne modifiez rien dans le BIOS que vous ne comprenez pas. Le cas contraire, votre PC pourrait être désactivé.
Les messages du BIOS au démarrage vous indiquent ce que fut la configuration du matériel. La configuration actuelle pourrait toujours être la même que ce qu'a fait le BIOS et que Linux devrait accepté si c'est bon. Les messages de Linux pourraient provenir des pilotes utilisant les fonctions PnP du noyau pour inspecter ou configurer les ressources bus. Cela devrait être correct mais attention aux messages qui affichent seulement ce que le pilote a lu de son fichier de configuration. Cela pourrait être faux. Bien sûr, si le périphérique fonctionne bien, alors il est configuré probablement de la même façon par le pilote.
Depuis le noyau 2.6, il existe aussi un répertoire /sys
en plus du répertoire /proc
. Ces répertoires sont utiles pour récupérer
les configurations des ressources et périphériques. Les fichiers qu'ils
contiennent représentent des données provenant de la mémoire du noyau et
n'existent pas du tout sur votre disque dur. Les programmes comme
lspci
récupèrent leurs informations du répertoire
/proc
et ils doivent les afficher
d'une façon plus lisible qu'en lisant directement le contenu des fichiers
de ce répertoire. Voici quatre fichiers provenant de /proc
qui montrent les ressources enregistrées
dans le noyau par les pilotes de périphériques.
Comme le Plug-And-Play de Linux fonctionne en laissant les pilotes de
périphériques alloués les ressources pour leur périphérique, il pourrait ne
pas y avoir de ressources utilisées par certains de vos matériels si le pilote
n'a pas encore réclamé que ces ressources lui soient réservées. Pour les cas
des modules du noyau (pilotes de périphérique chargeables), si le module n'est
pas encore chargé, le noyau ne connaît pas les ressources dont le module a
besoin. Quelque fois, le module se charge seulement quand vous lancez une
application qui en a besoin. Donc, si un certain matériel est manquant parmi
les fichiers de /proc
, cela pourrait
signifier que le matériel n'a pas encore été utilisé. Par exemple, même si votre
lecteur de disquette dispose d'une disquette et est prêt à être utilisé, son
interruption n'apparaîtra tant que le lecteur n'est pas utilisé.
/pts
affiche les adresses d'entrée/sortie. S'il y a
une erreur (mauvaise adresse), cela pose problème car le périphérique n'obtiendra
pas les octets qui lui sont envoyés. /proc/iomem
affiche
les adresses mémoires d'entrée/sortie qui sont réservées.
/proc/interrupts
affiche les interruptions en cours
d'utilisation. /proc/dma
affiche les allocations de canaux
DMA pour le bus ISA.
Dans le passé, l'auteur a observé une liste d'interruptions qui n'existaient pas. Dans certains cas, cela montrait que quelques interruptions étaient vraiment envoyées. Ceci peut être dû à des matériels défectueux envoyant des interruptions erronées.
/proc/bus/
contient les
sous-répertoires /input/
, /pci/
et /isapnp/
. Le format de la plupart des fichiers
dans ce répertoire est vraiment cryptique, souvent une simple copie des octets de
l'espace de configuration. Donc, utilisez-les seulement en dernier ressort. Le
sous-répertoire input/
a des informations
sur les périphériques en entrée comme le clavier ou la souris. Elles ne sont pas
aussi complexes que les autres répertoires sous /proc/bus
et pourraient fournir des informations
utiles sur les périphériques d'entrées qui sont sur les ports PS2
ou sur le bus LPC (voir la section intitulée « Bus LPC »).
Malheureusement, ce que j'ai vu ne dit pas que c'est sur le bus
LPC où il est probablement. Dans
/pci/00/
se trouve un fichier binaire pour
chaque périphérique PCI où les noms des fichiers sont les
numéros des emplacements PCI. Le 00 signifie le bus
PCI 0.
À partir du noyau 2.6, il existe un nouveau répertoire /sys pour la configuration de PnP. Il s'agit d'un système de fichiers de type sysfs et c'est un équivalent du système de fichiers /proc car les « fichiers » représentent une information de la mémoire du noyau et non pas un vrai fichier de votre disque dur. Cependant, il n'est pas aussi utile que le système de fichiers /proc. Au début (pour les noyaux 2.5), il s'appelait le « système de fichiers des pilotes » et avait comme type « driverfs ».
Dans ce système de fichiers, chaque périphérique existant sur votre
système a son propre répertoire contenant des fichiers spécifiant les
ressources qui lui sont affectées. Ces répertoires ont des noms comme
0000:00:12.0@
ou 00:06@
. Quels sont
ces périphériques ? Le premier est une carte PCI dans
l'emplacement 12 de votre PC. L'emplacement pourrait être appelé
PCI2 dans votre PC (2 au lieu de 12) tout simplement parce
que les emplacements ayant des numéros fiables sont utilisés par les
emplacements intégrés à la carte mère et n'utilisent pas les emplacements
physiques. Dans cet exemple, les emplacements 1 à 10 seraient intégrés alors que
les emplacements 11 à 14 seraient appelés de 1 à 4. En exécutant
lspci, vous connaîtrez la correspondance entre les numéros
(comme 0000:00:12.0) et les noms (identique à l'interface IDE). Exécutez
la commande lspci -vv, ou lspci -vv si
vous voulez en voir plus.
Alors, qu'est-ce que 00:06
? C'est une carte
ISA (ou un périphérique intégré) mais ce n'est pas
l'emplacement 6 du bus ISA (contrairement au numérotage
PCI). Quand une recherche est faite pour les périphériques
PnP ISA, il a été le sixième découvert.
Plus précisément, il était le septième trouvé car il existe un périphérique
numéroté 00:00. Donc, comment les identifier ? Vous pouvez lancer
« cat */* » et afficher tous les fichiers pour tous les périphériques
mais même à ce moment-là vous ne verrez pas les noms des périphériques (mais
vous verrez l'information qui vous permettra de l'identifier). Ce problème sera
corrigé dans le futur.
Non seulement ces fichiers apportent des informations sur la
configuration des ressources du bus (d'une manière un peu cryptée) et sur les
pilotes (dans les répertoires « drivers ») mais, dans le futur, vous
devriez être capable de les utiliser pour modifier la configuration des
ressources. Actuellement (août 2004), vous ne pouvez pas configurer le bus
PCI avec cela. Une sérieuse limitation est qu'avec le
« modèle de pilote » actuel, vous ne pouvez pas changer la ressource
d'un périphérique qui a été affecté à un pilote, ce qui signifie généralement
que vous aurez besoin de décharger le module du pilote pour pouvoir l'utiliser.
Si le pilote est intégré, il n'y a aucun espoir. Ces sérieuses limitations
seront éliminées dans le futur avec un peu de chance. Dans la documentation du
noyau se trouve un fichier pnp.txt
indiquant comment
réaliser la configuration. En août 2004, il était obsolète mais
l'auteur travaille sur une mise à jour. Utiliser le répertoire /sys
pour configurer les ressources est connue
comme l'« interface utilisateur pour le Plug and Play de
Linux ».
L'autre partie de « Linux Plug and Play » est l'interface noyau utilisée par les pilotes de périphériques. Elle a beaucoup changé depuis le début du noyau 2.6 mais la plupart des pilotes utilisent toujours l'ancienne interface (août 2004). Il est aussi possible pour les pilotes (ou vous) d'utiliser l'interface utilisateur qui a besoin d'améliorations.
Il est facile de trouver quelles ressources bus ont été assignées aux périphériques du bus PCI avec les commandes lspci et scanpci. Les options -v et -vv vous donneront plus de détails. Dans certains cas, scanpci trouvera un périphérique que lspci ne peut pas trouver. Ceci est dû au fait que scanpci recherche les périphériques directement sur le bus PCI (via l'espace de configuration) et n'utilise pas les données obtenues par le noyau (qui pourraient être fausses à cause d'un bogue du noyau — je viens de trouver un tel cas).
Cette information d'un format crypté est disponible dans les
« fichiers » situés dans les répertoires /sys
et /proc
.
Dans /sys/bus/pci/devices
, le fichier
vendor
contiendra le numéro d'identifiant du vendeur, comme
0x4B8C, et cætera. Dans un format encore moins compréhensible, il se trouve dans
/proc/bus/pci
. De telles informations dans
les anciens noyaux (avant le 2.6) se trouvaient dans /proc/pci
(compréhensible malgré que les
IRQ soient en hexadécimal) ou dans /proc/buspci/devices
(affichage non compréhensible).
Dans la plupart des cas pour le PCI, vous verrez seulement comment le matériel est maintenant configuré et pas quelles ressources sont nécessaires. Dans certains cas, vous verrez seulement l'adresse de base (le début des plages d'adresses) mais pas celle de fin. Si vous disposez de l'espace complet, alors vous pourrez déterminer combien d'octets de ressources sont nécessaires.
Pour les cartes du bus ISA, ce n'est pas aussi simple que pour le bus PCI qui est conçu pour le PnP. Les cartes ISA récentes étaient PnP contrairement aux anciennes. De même, certaines cartes PnP ont leur partie PnP désactivée par des logiciels spéciaux ne fonctionnant que sous MS Windows. Les cartes non PnP sont configurées avec des cavaliers sur la carte ou par des logiciels sous MS Windows.
Si c'est une carte PnP, vous pouvez essayer
pnpdump --dumpregs
mais ce n'est pas une certitude. Le
résultat peut sembler crypté mais il peut être déchiffré. Ne confondez pas les
adresses de port de lecture que pnpdump utilise pour
communiquer avec les cartes PnP avec l'adresse
d'entrées/sorties du périphérique trouvé. Elles ne sont pas identiques.
LPC (acronyme de Low Pin Count, soit petit nombre de connecteurs) est une interface type bus souvent utilisée sur les portables et de plus en plus utilisée sur les machines de bureau. Pour savoir si vous disposez d'un bus LPC, saisissez la commande lspci et cherchez quelque chose comme « LPC ». Il y a d'autres mots prêt de « LPC » comme « ISA Bridge ... LPC Interface Controller » ou « LPC Bridge », et cætera. LPC n'est pas réellement de l'ISA mais il se substitue à un bus ISA.
L'ancien bus ISA était lent et les périphériques qui avaient besoin de plus de rapidité étaient placés sur le nouveau bus PCI. Mais les périphériques qui n'avaient pas besoin d'une grande vitesse étaient souvent implémentés par des composants sur la carte mère et restaient sur le bus ISA même s'il n'y avait aucun emplacement pour des cartes ISA. Puis le bus LPC est arrivé pour remplacer les cartes ISA restantes. LPC est bien plus petit que l'ISA et aussi rapide car son horloge est quatre fois plus rapide que celle du bus ISA. Son bus multiplexé pour les données/adresses et le contrôle est composé de quatre fils. Envoyer un octet requiert la séparation de l'octet en deux demi-octets et leur réassemblage après. Cela explique la signification de l'acronyme LPC : Low Pin Count (petit nombre de broches). Il y a aussi quelques lignes sur le bus.
Cette petite interface LPC est utilisé pour les périphériques propriétaires lents comme les ports séries, les ports parallèles et les lecteurs de disquette. Donc, un ordinateur utilisant le bus LPC aura tous ces périphériques rapides sur le bus PCI, et cætera et les périphériques lents sur le bus LPC. Tous les périphériques LPC seront sur la carte : il n'existe pas d'emplacement pour carte LPC.
Un composant majeur du bus LPC est le composant
superio, contenant des périphériques d'entrées/sorties propriétaires :
ports série et parallèle, lecteur de disquette, contrôleur de clavier, et cætera. Le
BIOS pourrait même se trouver sur le bus
LPC. Le clavier et la souris (périphériques en entrée)
devraient être listés dans /proc/bus/input/devices
mais,
au lieu de voir « lpc », il semble afficher
« isa0060/serio0 », et cætera même s'ils se trouvent sur le bus LPC, et
non pas sur le bus ISA.
Avant que le bus LPC devienne populaire, il existait un bus X (pas couvert dans ce guide pratique) qui a servi dans le même but que le bus LPC mais qui n'était pas aussi compact que le bus LPC. Certains PC disposent des deux bus.
En contraste avec les cartes PnP, les cartes non PnP ont toujours leurs ressources configurées au niveau matériel. C'est-à-dire qu'elles ont toujours une adresse et une IRQ sauf s'il existe une configuration par cavalier, et cætera pour désactiver le périphérique. Quelquefois, le pilote du périphérique, ou un autre logiciel, peut trouver les ressources utilisées simplement en cherchant sur chaque adresse. Par exemple, scanport (Debian uniquement ?) cherche sur la plupart des adresses d'entrées/sorties et peut trouver des périphériques ISA. Mais, attention, cela peut bloquer votre PC. Quelque fois, il échouera dans sa recherche du matériel disponible (car le matériel a 0xff dans ses registres). Même s'il trouve le matériel, il n'affichera pas l'IRQ ou n'identifiera pas positivement le matériel.
Donc, une façon de trouver ce matériel est de lancer un pilote, qui pourrait chercher un tel matériel. En regardant dans les messages du démarrage, vous pourriez voir un pilote se lancer et découvrir le matériel. Sinon, vous pourriez avoir besoin de trouver un pilote et de le lancer (par exemple, en le chargeant comme un module).
Trouver le bon pilote peut être difficile. Quelquefois, il n'existe tout simplement pas de pilote car certains périphériques ne sont pas (encore) gérés par Linux. Pour déterminer le pilote dont vous avez besoin, jetez un œil sur toute documentation pouvant vous permettre d'identifier la carte. Si ceci échoue, jetez un œil à la carte elle-même, avec les noms/numéros importants inscrits sur les composants. Mais l'identification du module de pilote dont vous avez besoin pourrait n'être pas disponible sur la carte. Vous pouvez trouver l'identifiant FCC sur la carte, puis chercher sur Internet avec ce numéro pour essayer de trouver plus d'informations sur la carte (ou sur les composants en faisant partie).
Si la carte dispose de cavaliers pour configurer les ressources, alors vous pouvez regarder la façon dont ils sont installés. Il existe des cartes qui ont à la fois le support de PnP et des cavaliers. Elles fonctionnent comme des cartes à cavalier si PnP a été désactivé d'une façon ou d'une autre. Vous pourriez avoir besoin de la documentation (soit imprimée soit sur disquette) venant avec la carte. Peut-être pourrez-vous la trouver sur Internet.
Un des cas les plus difficiles est quand du logiciel fonctionnant sous MS Windows a été utilisé pour configurer une carte non PnP ou une carte PnP où la partie PnP a été désactivée. Donc, vous ne pouvez la configurer par PnP ou par des cavaliers. Dans ce cas, votre seul espoir est de chercher les adresses comme décrit dans la section intitulée « Cartes non PnP ». Ou essayez de trouver le logiciel MS qui l'a configuré.
Dans un effort dupliqué, plusieurs distributions majeures de Linux ont développé leur propre outil de détection et de configuration du matériel. Ils configurent généralement bien plus que les ressources Plug-and-Play. C'est une configuration générale qui est bien au-delà du domaine couvert par ce guide pratique.
Puis, d'autres distributions, comme Debian, pouvaient obtenir des copies des outils et les offrir à leurs utilisateurs comme option ou comme outil en cas de problème. Ces outils utilisent généralement les outils Linux standard pour détecter le matériel, comme par exemple lspci. Dans la liste d'outils qui suit, le nom de la distribution qui l'a conçu est entre parenthèses mais l'outil est certainement disponible aussi pour les autres distributions.
hardinfo ;
hwinfo (SuSE) détecte plus de choses que discover ;
discover (Progeny, utilisé par Debian) ;
Kudzu (RedHat) détecte et configure ;
lsdev (commande Linux standard) ;
hwsetup-knoppix (Knoppix, basé sur Kudzu).
Il existe différents outils disponibles pour trouver et, quelque fois, configurer différents types de périphériques. Cette configuration est généraliste et n'est pas couverte dans ce guide pratique.
read-edid (get-edid) : récupère les paramètres des moniteurs VESA (à part les très anciens) ;
sndconfig : pour les cartes son ;
printtool : imprimantes (X-window doit être en cours d'exécution) ;
pconf-detect : ports parallèles ;
gpm-mouse-test : détecte et teste les souris
mdetect : détecte et configure les
souris. Connaît-il les souris sur
/dev/input/
?
nictools-pci (et nictools-nopci) pour les cartes ethernet ;
hdparm : configure les disques durs ;
hotplug : utilisé par le noyau ;
xvidtune : configure la vidéo avec Xwindows (voir XFree86-Video-Timings-HOWTO).
Quelques personnes ont essayé d'utiliser Windows pour voir comment les ressources bus étaient configurées. Malheureusement, comme le matériel PnP oublie sa configuration de ressources bus à l'arrêt, la configuration peut ne pas être identique lors du redémarrage sous Linux pour le matériel non PnP (ou lorsque quelqu'un a désactivé PnP dans le périphérique soit par des cavaliers soit en utilisant des logiciels Windows). Même pour PnP, cela peut être le cas parce que dans beaucoup de cas, Windows et Linux acceptent simplement ce que le BIOS a fait. Mais là où Windows et Linux font une configuration, ils peuvent le faire différemment. Donc ne comptez pas à ce que les périphériques soient configurés de la même manière.