Comment puis-je trouver les périphériques et comment sont-ils configurés ?

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 :

Chaque partie devrait avoir la même réponse (la même configuration). La configuration du périphérique physique et de son pilote devrait être évidemment la même (elle l'est habituellement). Mais les choses ne fonctionnent pas toujours bien et c'est pourquoi il existe une différence. Ceci veut dire que le pilote dispose d'une mauvaise information sur la configuration actuelle du matériel. Les problèmes arrivent. Si le logiciel que vous utilisez ne vous dit pas exactement ce qui ne va pas (ou ne configure pas automatiquement correctement), alors vous avez besoin de chercher comment vos périphériques physiques et vos pilotes sont configurés. Alors que les pilotes de périphériques Linux devraient tout vous dire, dans certains cas, il n'est pas facile de déterminer ce qui a été enregistré au niveau 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)

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.

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.

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.