Version : 1.15.fr.0.9
Copyright © 1998-2007 David S. Lawyer
Copyright © 2003-2007 Guillaume Lelarge, Jean-Philippe Guérard
2006-09-04
Historique des versions | ||
---|---|---|
Version 1.15.fr.0.9 | 2007-09-04 | GL, JPG |
Version française mise à jour mais non relue. | ||
Version 1.15 | 2007-08-?? | DSL |
Version 1.14.fr.0.9 | 2006-03-07 | GL, JPG |
Version française mise à jour mais non relue. Prise en compte des corrections suggérées par Jean-Philippe Guérard et par Bernard Adrian. | ||
Version 1.14 | 2006-02-?? | DSL |
Version 1.13.fr.0.9 | 2005-08-22 | GL, JPG |
Version française non relue. Prise en compte des corrections suggérées par Black Myst. | ||
Version 1.13 | 2005-08-?? | DSL |
Version 1.12 | 2005-03-?? | DSL |
Version 1.11.fr.0.9 | 2004-11-20 | GL, JPG |
Version 1.11 | 2004-11-?? | DSL |
Version 1.10.fr.0.9 | 2004-09-11 | GL, JPG |
Version 1.10 | 2004-08-?? | DSL |
Version 1.09 | 2004-08-?? | DSL |
Version 1.08.fr.0.9 | 2004-07-22 | GL |
Version 1.08 | 2004-06-?? | DSL |
Version 1.07.fr.0.9 | 2003-09-27 | GL |
Version 1.07 | 2002-08-?? | DSL |
Version 1.06.fr.0.9 | 2003-05-08 | GL |
Version 1.06 | 2002-09-?? | DSL |
Résumé
Le Plug-and-Play (ou PnP) est un système de détection et de configuration automatique du matériel PC. Ce guide pratique présente en détail les différentes ressources bas niveau gérées par le Plug-and-Play, telles que les adresses, les interruptions, et cætera. Ce guide couvre le bus PCI (qui a été conçu dès le départ pour le Plug-and-Play) et l'utilisation du Plug-and-Play sur l'ancien bus ISA. Si le Plug-and-Play faisait son travail correctement, vous n'auriez pas besoin de ce guide pratique. Dans le cas contraire ou si vous disposez d'un vieux matériel qui n'utilise pas le Plug-and-Play pour toutes les cartes, ce guide pratique vous aidera. Il ne couvre pas le UPnP (Universal Plug and Play).
Table des matières
![]() | Important |
---|---|
Le texte ci-dessous est la licence de ce document. Ce texte fait foi. Il est composé de la licence (en anglais) du document original, suivi de la licence (en français) de sa traduction. |
Copyright © 1998-2005 by David S. Lawyer
<
dave CHEZ lafn POINT org>
.
Please freely copy and distribute (sell or give away) this document in any format. Send any corrections and comments to the document maintainer. You may create a derivative work and distribute it provided that you:
If it's not a translation: Email a copy of your derivative work (in a
format LDP accepts) to the author(s) and maintainer (could be the same
person). If you don't get a response then email the LDP (Linux
Documentation Project):
<submit CHEZ en POINT tldp POINT org>
.
License the derivative work in the spirit of this license or use GPL. Include a copyright notice and at least a pointer to the license used.
Give due credit to previous authors and major contributors.
If you're considering making a derived work other than a translation, it's requested that you discuss your plans with the current maintainer.
Copyright © 1998-2005 par David S. Lawyer
<
dave CHEZ lafn POINT org>
.
Copyright © 2003-2005 par Guillaume
Lelarge <gleu CHEZ wanadoo POINT fr>
& ? <?>
.
Vous pouvez copier et distribuer librement (vendre ou donner) ce document quel que soit son format. Envoyez toute correction ou tout commentaire à l'auteur du document. Vous pouvez créer et distribuer une version dérivée à condition que :
vous envoyez au gestionnaire et à l'auteur (s'il ne s'agit pas de la
même personne) une copie de votre travail par courrier électronique
(s'il ne s'agit pas d'une traduction) dans un format que le LDP
accepte. Si vous n'obtenez pas de réponse, alors envoyez votre
message au LDP (Linux Documentation Project)Â :
<submit CHEZ en POINT tldp POINT org>
 ;
la licence utilisée pour votre travail soit dans le même esprit que cette licence ou utilise la licence GPL. Incluez les informations de droit d'utilisation ou au moins un pointeur vers la licence utilisée ;
vous donnez crédit aux auteurs précédents et aux contributeurs majeurs.
Si vous pensez faire un travail dérivé autre qu'une traduction, vous devez en discuter avec le gestionnaire actuel.
De nouvelles versions du guide pratique Plug-and-Play devraient apparaître tous les ans et seront disponibles à la navigation et en téléchargement sur les sites miroirs du LDP. Pour une liste des sites miroirs, voir http://www.tldp.org/mirrors.html. Différents formats sont disponibles. Si vous voulez seulement vérifier rapidement la date de la dernière version, regardez sur http://www.traduc.org/docs/howto/lecture/Plug-and-Play-HOWTO.html. La version que vous lisez actuellement est la traduction française de la v1.15, d'août 2007.
Pour un historique complet des révisions, voir le fichier source (dans son format DocBook SGML) sur http://cvsview.tldp.org/index.cgi/LDP/howto/linuxdoc/Plug-and-Play-HOWTO.sgml..
v1.15, Août 2007 : Révision de la section sur les interruptions. Suppression de deux paragraphes redondants et confus portant sur une mystérieuse fonction « h() ».
v1.14, Février 2006 : Révision de « Comment Linux gère-t'il le PnP » ; LPC devait être configuré par le BIOS. Balance des IRQ. Linux peut trouver des pilotes pour les périphériques détectés.
v1.13, Juillet 2005 : Conflit d'IRQ. Plus grande clarté dans les descriptions des ressources. /proc/bus. Espace de configuration PCI accédé via l'espace d'adressage des entrées/sorties. Plus d'outils de détection de matériel. Message d'erreur Can't allocate region.
v1.12, Mars 2005 : /dev/eth0 n'existe plus. Informations modifiées dans /sys et /proc depuis le noyau 2.6. L'espace d'adressage de la configuration PCI est « géographique ». scanpci pourrait trouver un périphérique que lspci ne voit pas. Le noyau peut affecter des adresses au démarrage.
Si vous avez des problèmes avec un périphérique, regardez les messages affichés lors du démarrage (remontez la liste avec Shift+PageUp). Si cela n'affiche pas aussi les messages du lancement, à partir du BIOS, utilisez la touche Pause (voir Section 7.4, « Messages de démarrage »).
Vérifiez que vous utilisez le bon pilote pour un périphérique et que ce pilote est trouvé et utilisé. Si le pilote est un module, tapez insmod (en tant qu'utilisateur privilégié) pour voir s'il est chargé (et utilisé). Si ce n'est pas un module, alors il doit être intégré au noyau.
Ce guide pratique ne couvre pas le problème de la recherche et de l'installation de pilotes de périphériques. Peut-être qu'il devrait. Un des problèmes possibles est qu'une carte (ou un autre périphérique physique) peut ne pas dire le type de composants qu'elle utilise. Le nom du pilote correspond souvent au nom de la puce et non pas au nom de la marque. Une façon de commencer la vérification du pilote est de regarder s'il en est question dans la documentation du noyau, dans un autre guide pratique ou plus généralement sur Internet. Attention : de telles documentations peuvent ne plus être à jour.
Les ordinateurs disposant de bus PCI (et sans bus ISA) ont significativement réduit le nombre de points posant problèmes. Concernant le bus ISA et le manque de support au niveau noyau pour l'ISA PnP (avant le noyau 2.4), beaucoup de choses posaient problèmes. Rappelez-vous que, parfois les problèmes semblant être relatifs à PnP sont dûs en réalité à un matériel défectueux ou à un matériel non conforme aux spécifications PnP.
Si vous ne comprenez pas cette section, lisez Périphériques matériels et la communication avec ces derniers.
En simplifiant à l'extrême, Plug-and-Play indique aux pilotes de
périphériques où trouver les différents matériels (périphériques) tels que
modems, cartes réseau, cartes son, et cætera. La tâche du Plug-and-Play est de
faire correspondre les périphériques physiques avec les logiciels (pilotes de
périphériques) qui les font fonctionner, et d'établir des canaux de
communication entre chaque périphérique physique et son pilote. Pour ce faire,
PnP alloue les « ressources bus » suivantes
aux matériels : adresses d'entrée/sortie, plages mémoire,
IRQ, canaux DMA (uniquement pour les bus
LPC et ISA). Ces quatre dernières sont
parfois appelées des ressources de premier ordre ou simplement des ressources.
PnP maintient un enregistrement de ce qu'il fait et autorise
l'accès à ces informations aux pilotes de périphériques. Si vous ne comprenez
pas ce que sont ces quatre ressources bus, lisez les sous-sections suivantes de
ce guide pratique : Adresses d'entrée/sortie, IRQ,
Canaux DMA, Régions mémoire. Un article de la Linux Gazette
parle de trois des ressources bus. Il est disponible sur
Introduction aux IRQ, DMA et adresses de
base (NdT : une traduction française est disponible sur traduc.org).
Une fois que ces ressources bus ont été assignées (et si le bon pilote est
installé), le pilote actuel et ses « fichiers » du répertoire
/dev
sont prêt à être utilisés.
Cette méthode d'affectation PnP des ressources bus est
parfois appelée « configuration » mais il s'agit seulement d'une
configuration bas-niveau. Le répertoire /etc
comprend beaucoup de fichiers de configuration mais un grand nombre d'entre eux
ne concernent pas la configuration de PnP. Donc, la grande
majorité des configurations de périphériques physiques n'a rien à voir avec
PnP ou les ressources bus. Par exemple, l'initialisation d'un
modem par une phrase d'initialisation ou la configuration de sa vitesse ne
concerne pas PnP. Donc lorsque nous parlons de
PnP, la configuration ne concerne qu'un seul type de
configuration. Alors que d'autres documentations (telles que celles pour MS
Windows) appellent les ressources bus « ressources », j'ai utilisé le
terme de
ressources bus au lieu du simple « ressources » pour les distinguer
des
nombreux autres types de ressources.
PnP est un long processus réalisé par différents logiciels et matériels. Si seul un programme gérait PnP sur Linux, cela serait simple. Mais, avec Linux, chaque pilote de périphérique fait son propre PnP en utilisant le logiciel fourni par le noyau. Le matériel du BIOS du PC utilise PnP au démarrage du PC. Et il y a bien plus que cela.
Le bus PCI a trois plages d'adressage : les entrées/sorties, la mémoire principale (mémoire d'entrées/sorties) et la configuration. L'ancien bus ISA ne dispose pas de cette dernière. Seules les entrées/sorties et la mémoire principale sont utilisées pour les entrées/sorties du périphérique. Les adresses de configuration sont fixes et ne peuvent pas être modifiées donc elles n'ont pas besoin d'être affectées. Pour plus d'informations, voir Espace d'adressage de la configuration PCI.
Quand le CPU veut accéder à un périphérique, il place l'adresse du périphérique sur un bus important de l'ordinateur (pour le PCI : le bus d'adresse/données). Tous les types d'adresses (tels que les entrées/sorties et la mémoire principale) partagent le même bus sur le PC. Mais la présence ou l'absence de voltage sur certains fils dédiés sur le bus du PC indique l'espace occupée par une adresse : entrée/sortie, mémoire principale (voir Espaces d'adressage) ou la configuration (seulement PCI). Ceci est un peu trop simplifié car indiquer à un périphérique PCI qu'il s'agit d'une adresse de configuration est réellement plus complexe que la description ci-dessus. Voir Espace d'adressage pour la configuration PCI pour plus d'informations. Voir Détails des adresses pour plus d'informations sur l'adressage en général.
Les adresses d'un périphérique sont stockées dans les registres du matériel physique. Elles peuvent être changées par logiciel et elles peuvent être désactivées pour que le périphérique ne soit plus adressable, sauf en ce qui concerne les adresses de configuration du PCI qui ne peuvent être ni modifiées ni désactivées.
Souvent, le pilote du périphérique fait les deux (en quelque sorte). Le pilote de périphérique n'a pas réellement besoin d'initialiser une adresse d'entrée/sortie s'il découvre que l'adresse a déjà été initialisée (peut-être par le BIOS) et qu'il souhaite accepter cette adresse. Une fois que le pilote a soit trouvé une adresse précédemment configurée soit configuré l'adresse lui-même, alors il sait évidemment de quelle adresse il s'agit, donc il n'est pas nécessaire de lui fournir cette information -- il la connaît déjà .
Le processus en deux étapes ci-dessus (1. configurer l'adresse au niveau matériel. 2. mettre au courant le pilote.) ressemble aux deux parties d'un problème pour trouver le numéro de la maison d'une personne dans la rue. Quelqu'un doit installer un numéro sur l'entrée de la maison pour qu'elle puisse être trouvée, puis les personnes qui souhaitent aller à cette adresse doivent obtenir (et conserver) ce numéro pour qu'elles puissent trouver la maison. En informatique, le matériel du périphérique doit d'abord obtenir son adresse, qu'il placera dans un registre matériel spécial (ce qui revient à conserver le numéro dans notre exemple), puis le pilote de périphérique doit obtenir cette adresse (écrire ce numéro dans son carnet d'adresses). Les deux doivent être réalisés, soit automatiquement par le logiciel soit en saisissant manuellement des données dans des fichiers de configuration. Des problèmes pourraient survenir si seulement un des deux est fait correctement.
Pour la configuration manuelle de PnP, des personnes font l'erreur de ne faire qu'une de ces deux étapes et se demandent ensuite pourquoi l'ordinateur ne peut pas trouver le périphérique. Par exemple, ils utilisent setserial pour associer une adresse au port série sans réaliser que ceci ne fait que donner une adresse au pilote. Cela n'enregistre pas cette adresse au niveau du port série physique. Si vous avez dit une bêtise au port série, alors vous avez un problème. Une autre façon de parler au pilote est de donner l'adresse comme option au module du noyau (pilote de périphérique). Si ce que vous dites est faux, il peut y avoir des problèmes. Un pilote intelligent pourrait détecter comment le matériel est réellement configuré et rejeter les mauvaises informations fournies par l'option (ou au moins afficher un message d'erreur).
Un pré-requis évident est que le périphérique physique (comme une carte) doit connaître son adresse avant le pilote du périphérique. Comme les pilotes de périphérique se lancent souvent tout de suite après le démarrage de l'ordinateur, ils peuvent tenter d'accéder à une carte (pour vérifier sa présence, et cætera) avant que l'adresse ne soit enregistrée au niveau de la carte par le programme de configuration PnP. Et vous verrez un message d'erreur indiquant l'absence de la carte même si elle est bien dans le PC (mais n'a pas encore obtenue son adresse).
Ce qui a été dit dans les derniers paragraphes concernant les adresses I/O s'applique de la même manière à la majorité des autres ressources bus : Section 2.5, « Plages mémoire », Section 2.6, « IRQ - un aperçu » et Section 2.7, « DMA (accès direct à la mémoire) ou maîtrise du bus ». Les trois prochaines sections expliqueront ce qu'ils sont. La seule exception est que les interruptions du bus PCI ne sont pas données par les registres d'une carte mais elles sont plutôt déroutées vers les IRQ par un composant de la carte mère. Ensuite, l'IRQ utilisée par cette carte PCI est inscrite dans un registre de la carte dans un but unique d'informer.
Pour voir quelles adresses d'entrées/sorties sont utilisées sur votre
PC, regardez dans le fichier
/proc/ioports
.
Après avoir lu ceci, vous pouvez lire Section 13.4, « Détails sur les interruptions » pour bien plus de détails. Ce qui suit est volontairement simplifié : en plus des adresses, il existe aussi un numéro d'interruption à gérer (tel que l'IRQ 5). Cela s'appelle un numéro d'IRQ (Interrupt ReQuest, ou demande d'interruption), ou plus simplement une « irq ». Nous avons déjà mentionné ci-dessus que le pilote de périphérique doit connaître l'adresse d'une carte pour être capable de communiquer avec elle.
Mais qu'en est-il de la communication en sens inverse ? Supposez que le périphérique ait besoin de dire quelque chose à son pilote immédiatement. Par exemple, le périphérique peut recevoir un grand nombre d'octets destinés à la mémoire principale et le tampon utilisé pour stocker ces octets est pratiquement plein. Du coup, le périphérique a besoin de demander à son pilote de récupérer ces octets avant que le tampon ne se voit dépassé par le flot continu d'octets. Un autre exemple serait de signaler au pilote que le périphérique a terminé d'envoyer un ensemble d'octets et qu'il attend maintenant de nouveaux octets à envoyer.
Comment le périphérique peut-il envoyer rapidement un signal à son pilote ? Il peut ne pas être capable d'utiliser le bus de données principal car il y a des chances qu'il soit déjà utilisé. Au lieu de cela, il place un voltage sur un fil d'interruption dédié (aussi appelé ligne ou trace) qui est souvent réservé pour ce seul périphérique. Ce signal est appelé une demande d'interruption (IRQ) ou plus simplement une « interruption ». Il existe l'équivalent de 16 (ou 24, et cætera.) fils de ce type dans un PC et chaque fil amène (indirectement) à un certain pilote de périphérique. Chaque fil a un numéro d'IRQ unique. Le périphérique doit placer son interruption sur le bon fil. Le fil sur lequel le périphérique envoie ces demandes d'aide est déterminé par le numéro d'IRQ enregistré dans le périphérique. Ce même numéro d'IRQ doit être connu par le pilote du périphérique pour que celui-ci sache quelle interruption écouter.
Une fois que le pilote reçoit l'interruption du périphérique, il doit trouver pourquoi cette interruption a été générée et agir de manière appropriée pour régler le problème. Sur le bus ISA, chaque périphérique a habituellement besoin de son propre numéro unique d'IRQ. Pour le bus PCI et dans d'autres cas spéciaux, le partage d'IRQ est autorisé (deux périphériques PCI, ou plus, pourraient avoir le même numéro d'IRQ). De même, pour le PCI, chaque périphérique PCI a un fil fixe PCI Interrupt. Mais un composant de routage programmable fait correspondre les fils PCI aux interruptions de type ISA. Voir Section 13.4, « Détails sur les interruptions » pour savoir comment cela fonctionne.
Des raccourcis existent et le logiciel PnP peut les utiliser. Un d'eux est de garder la trace de la façon dont sont assignées les ressources bus lors de la dernière configuration (lorsque l'ordinateur a été utilisé pour la dernière fois) et de réutiliser cette information. Les BIOS le font ainsi que MS Windows mais le Linux standard ne le fait pas. Mais, d'une certaine façon, il le fait car il utilise souvent ce que le BIOS a fait. Windows stocke cette information dans sa base de registres sur le disque dur et un BIOS PnP/PCI le stocke dans une mémoire non volatile de votre PC (mémoire appelée ESCD ; voir Section 5.4.2, « La base de données ESCD du BIOS »). Certains disent que ne pas avoir de registres (ce qui est le cas de Linux) est mieux car, avec Windows, la base de registres peut être corrompue et elle est de toute façon difficile à éditer. Mais PnP sur Linux a aussi des problèmes.
Alors que MS Windows (sauf en ce qui concerne Windows 3.x et NT4) est un système d'exploitation PnP, Linux n'était pas originellement un système d'exploitation PnP mais l'est devenu graduellement. Au début, PnP a fonctionné avec Linux parce qu'un BIOS PnP configurait les ressources bus et que les pilotes de périphériques récupéraient cette information en utilisant des programmes apportés par le noyau Linux. Aujourd'hui, la plupart des pilotes peuvent envoyer des commandes pour réaliser leur propre configuration et n'ont pas besoin de se reposer toujours sur le BIOS. Malheureusement, un pilote pourrait utiliser une ressource bus dont un autre périphérique aurait besoin plus tard. D'autres pilotes de périphériques enregistrent la dernière configuration dans un fichier de configuration et l'utilisent la prochaine fois que l'ordinateur est allumé.
Si le périphérique physique se rappelle de son ancienne configuration, alors il n'y aura pas de matériel à configurer au prochain démarrage, mais il semble oublier sa configuration lors de l'arrêt. Certains périphériques disposent d'une configuration par défaut (mais pas nécessairement la dernière utilisée). Donc, un périphérique PnP a besoin d'être reconfiguré à chaque fois que le PC est allumé. De la même manière, si un nouveau périphérique est ajouté, alors il a besoin d'être configuré. Allouer des ressources bus pour ce nouveau périphérique peut nécessiter de récupérer des ressources données auparavant à un autre et d'affecter à ce dernier de nouvelles ressources. Actuellement, Linux ne peut pas gérer ce niveau de sophistication (et MS Windows XP pourrait aussi ne pas en être capable).
Les messages au démarrage sur votre écran affichent les périphériques qui ont été trouvés sur les différents bus (utilisez shift-PageUp pour les voir). Voir Messages au démarrage.
ISA est l'ancien bus des PC compatibles IBM alors que PCI est le nouveau bus, plus rapide, d'Intel. Le bus PCI a été conçu pour ce qui est appelé de nos jours PnP. Ceci rend facile (comparé à ce qu'il faut faire pour le bus ISA) la découverte de l'affectation des ressources bus PnP aux périphériques matériels.
Pour le bus ISA, il existait un problème réel avec l'implémentation de PnP car personne n'avait en tête PnP lorsque ce bus a été conçu et il existe encore moins d'adresses d'entrées/sorties disponibles pour PnP pour envoyer des informations de configuration à un périphérique physique. Du coup, la façon dont PnP a été réalisé pour le bus ISA est très complexe. Des livres entiers ont été écrits à ce sujet. Voir notamment ce livre. Entre autres choses, il requiert que soit assigné par le programme PnP à chaque périphérique PnP un point d'ancrage temporaire pour que tout le monde puisse faire la configuration PnP. Assigner ces « points d'ancrage » est appelé « isolation ». Voir Section 13.6, « Isolation ISA » pour des détails complexes.
Au fur et à mesure de la disparition du bus ISA, PnP sera un peu plus facile. Il ne sera pas seulement plus simple de savoir comment le BIOS a configuré le matériel mais il y aura aussi moins de conflits, le PCI pouvant partager des interruptions. Il y aura toujours besoin de faire correspondre un pilote de périphérique à un matériel et il y aura toujours besoin de configurer les périphériques ajoutés lors du lancement du PC. Le sérieux problème des quelques périphériques non supportés par Linux restera présent.
Comme chaque pilote s'occupe de lui mais pas des autres, un pilote pourrait récupérer les ressources bus nécessaires à d'autres périphériques (et non encore alloués à ceux-ci par le noyau). Donc un noyau Linux PnP plus perfectionné serait bien mieux, un noyau qui pourrait s'occuper de l'allocation une fois toutes les requêtes envoyées. Une alternative serait d'essayer de réallouer les ressources déjà affectées quand un pilote n'obtient pas toutes les ressources qu'il a demandées.
Le problème de la « rareté des ressources bus » devient de moins en moins réel pour deux raisons : la première est que le bus PCI est en train de remplacer le bus ISA. Le bus PCI n'a pas ce type de problème pour les IRQ car celles-ci peuvent être partagées (bien que ce partage rende le système un peu moins efficace). De plus, le PCI n'utilise pas les ressources DMA (bien qu'il dispose d'un équivalent sans avoir besoin des ressources).
La deuxième raison est que plus d'espace d'adresses est disponible pour les entrées/sorties des périphériques. Alors que l'espace d'adresses conventionnel du bus ISA était limité à 64 Ko, le bus PCI dispose de 4 Go. Comme plus de périphériques physiques utilisent les adresses en mémoire principale au lieu de l'espace d'adresses des entrées/sorties, il existe toujours un peu de place disponible, y compris sur le bus ISA. Sur les PC 32 bits, il y a un espace d'adressage de 4 Go en mémoire principale et la plupart de ces ressources bus est disponible pour les entrées/sorties des périphériques (à moins que vous ayez 4 Go de mémoire principale installée).
Il y a eu au moins une tentative pour faire de Linux un vrai système d'exploitation PnP. Voir http://www.astarte.free-online.co.uk. Bien que développé dès 1998, elle n'a jamais été intégrée au noyau (mais aurait certainement dûe l'être).
La deuxième façon de résoudre ce dilemme est de faire en sorte que Linux configure toutes les ressources. Voir Section 4.1.1, « Linux avant le noyau 2.4 ». Ensuite, vous dites au BIOS qu'il s'agit d'un système d'exploitation PnP.
La troisième façon de résoudre ce dilemme est de dire au BIOS qu'il ne s'agit pas d'un système d'exploitation PnP. Ceci va à l'encontre de ce que dit MS mais il est possible d'obtenir un bon fonctionnement de MS Windows9x si vous comprenez ce que vous faites (et pourquoi). Si vous dites au BIOS qu'il ne s'agit pas d'un système d'exploitation PnP, MS Windows ne devrait-il pas détecter la façon dont le BIOS a configuré les périphériques et modifier cela s'il n'aime pas ce que le BIOS a fait ? Cela devrait, mais malheureusement, cela ne semble pas fonctionner de cette façon.
Ce que Windows 9x semble faire lorsqu'il trouve un matériel déjà configuré par le BIOS est de le laisser seul et de ne pas le reconfigurer. Maintenant, Windows 9x garde une trace de la configuration des ressources bus dans sa base de registres. Si la configuration du BIOS est différent, il devrait soit corriger ce qui se trouve dans sa base de registres soit tout reconfigurer suivant les indications de cette même base. Mauvaise nouvelle : il semble ne rien faire et pense que la configuration actuelle est la même que celle de la base de registres alors qu'en fait elles sont différentes.
Mais si la base de registre contient une configuration des ressources bus identique à celle du BIOS, alors tout fonctionnera bien. Un périphérique fonctionnera bien si le BIOS l'a configuré de la même façon que ce qui est enregistré dans la base de registres. Donc, le moyen de faire fonctionner correctement MS Windows est d'obtenir que la base de registres soit synchronisée avec la configuration du BIOS. Comme mentionné précédemment, le BIOS configure les éléments suivant son ESCD (qui est quelque chose comme la base de registres mais pour le BIOS). Voir Section 5.4.2, « La base de données ESCD du BIOS ». Donc, nous avons besoin d'obtenir la synchronisation des registres avec l'ESCD du BIOS pour que la base de registres et ESCD contiennent la même configuration. Dans certains cas, ces deux arrivent à être synchrones et vous n'avez pas besoin de faire quoi que ce soit.
Une question à laquelle vous pourriez penser est : comment l'ESCD du BIOS et la base de registres Windows peuvent-ils se désynchroniser ? Voici un scénario. Vous installez Windows avec le BIOS configuré pour un système d'exploitation PnP. Alors, Windows configure la plupart des éléments et sauvegarde sa configuration dans sa base de registres. Puis, plus tard, vous changez la configuration du BIOS en précisant qu'il ne s'agit pas d'un système d'exploitation PnP. Ensuite, après un redémarrage, le BIOS configure tout et il ne fait pas exactement ce que Windows a fait. Donc, la configuration actuelle du matériel et ce que Windows dispose dans sa base de registres sont maintenant différents.
Une façon d'essayer d'obtenir que la base de registres et l'ESCD disposent des mêmes informations est d'installer (ou de réinstaller) Windows lorsque le BIOS est configuré pour un système d'exploitation non PnP. De cette façon, Windows disposera du matériel configuré par le BIOS. Si cette configuration est faite sans conflit, Windows n'en changera pas et la sauvegardera dans sa base de registres. Et dans ce cas, l'ESCD et la base de registres seront synchronisés.
Une autre méthode est de supprimer les périphériques causant problèmes à Windows en cliquant « Supprimer » dans le gestionnaire des périphériques. Puis redémarrez avec « OS non PnP » (enregistré dans la mémoire CMOS du BIOS lorsque vous redémarrez). Windows va alors réinstaller les périphériques, en utilisant, on l'espère, les ressources bus configurées par le BIOS. Faites attention que Windows vous demandera d'insérer le CD d'installation de Windows car il peut ne pas trouver les fichiers du pilote de périphériques, même s'il sont bien là . Un contournement est de sélectionner « skip file » ce qui évitera l'installation du fichier à partir du CD. Si le fichier est toujours sur le disque dur, avec un peu de chance, le pilote et tout ira bien, même si le programme d'installation de Windows vous a demandé de l'installer à partir du CD (ce que vous avez passé).
Comme test, j'ai « supprimé » une carte réseau qui utilisait un pilote compatible Novell. Au redémarrage, Windows l'a réinstallé avec le Réseaux Microsoft plutôt qu'avec Novell. Ceci signifie que le client Novell a dû être réinstallé, un gros travail inutile. Donc, il serait mieux de ne pas continuer avec Windows 95/98 mais laisser Linux configurer les ressources bus.
Lors de l'utilisation d'un PC Window-Linux (dual boot), vous pouvez noter un changement dans la façon dont le BIOS configure à cause de Windows9x (et des autres versions de Windows ??) en modifiant l'ESCD. Il fait cela seulement si vous « forcez » une configuration ou une installation d'un périphérique propriétaire. Voir Section 5.4.3, « Utiliser Windows pour configurer l'ESCD ». Les pilotes de périphériques réalisant la configuration pourraient modifier ce que le BIOS a fait comme le font les outils PCI et isapnp.
Pour le PCI, le BIOS devrait aussi vous permettre d'affecter les IRQ aux emplacements de cartes 1, 2, 3, 4, et cætera. Si vous le faites, vous devez connaître les emplacements où se trouvent les cartes. En fait, chaque emplacement dispose de quatre IRQ PCI : A, B, C et D. Si le menu du BIOS ne vous dit pas laquelle (A, B, C, D) est affectée à un numéro d'IRQ, il est probable qu'il affecte seulement le numéro d'IRQ à l'IRQ PCI A. Mais, beaucoup de cartes utilisent seulement l'IRQ A donc il s'agit surtout d'affecter une IRQ à un emplacement. Voir les interruptions PCI.
Section 5.2, « Configuration du pilote de périphérique, réservation des ressources » ;
Section 5.3, « /sys : interface de configuration pour l'utilisateur » le noyau 2.6+ (pas encore pour le PCI et quelques autres sévères limitations) ;
Section 5.4, « Configuration du BIOS » (pour le bus PCI, vous avez seulement besoin d'un BIOS PCI, sinon vous avez besoin d'un BIOS PnP) ;
Section 5.5, « ISA seulement : Désactiver PnP ? » par des cavaliers ou avec un logiciel DOS/Windows (mais la plupart des cartes ne le font pas) ;
Section 5.6, « Bus ISA : Isapnp (outil faisant partie d'isapnptools) » est un programme que vous pouvez toujours utiliser pour configurer les périphériques PnP du bus ISA (seulement),
Section 5.7, « Les utilitaires PCI » permet de configurer le bus PCI mais le pilote de périphérique devrait le gérer ;
Section 5.8, « Configuration de Windows » et alors vous démarrez Linux à partir de Windows/DOS. A utiliser en dernier recours.
N'importe lequel configurera les ressources bus au niveau matériel mais seul le premier (voire le second) indiquera au pilote ce qui a été fait. La façon dont le pilote est informé dépend du pilote. Vous pouvez avoir besoin de faire quelque chose pour l'informer. Voir Section 6, « Indiquer au pilote la configuration ?? ».
Si vous avez un matériel datant d'avant l'ISA PnP, le logiciel PnP Linux pourrait ne pas le savoir et pourrait ne pas connaître les ressources bus qu'il réclame. Donc, il pourrait allouer de façon erronée des ressources dont cet ancien matériel a besoin à un autre périphérique. Le résultat est un conflit de ressources mais il existe un moyen de l'éviter. Vous pouvez réserver les ressources dont cette ancienne carte ISA a besoin en configurant le BIOS au démarrage (habituellement), au module isa-pnp ou au noyau (si le support de PnP est intégré dans le noyau). Par exemple, pour réserver l'IRQ 5, donnez cet argument au module isa-pnp (ou au noyau) : isapnp_reserve_irq=5. Voir le Guide pratique sur l'invite de démarrage (BootPrompt-HOWTO). Au lieu de ..._irq, il existe aussi _io, _dma et _mem.
Pour les périphériques PCI, la plupart des pilotes configureront PnP. Malheureusement, un pilote peut récupérer des ressources bus nécessaires à d'autres périphériques (mais non alloués à eux par le noyau). Donc, un noyau Linux PnP plus perfectionné serait meilleur là où le noyau fait l'allocation pour toutes les demandes envoyées. Voir Section 3.5, « Comment Linux gère-t-il le PnP ».
Depuis le noyau 2.6, il existe une nouvelle façon pour que l'utilisateur configure les ressources grâce au répertoire /sys. Mais, jusqu'à août 2004, il ne peut pas être utilisé pour une configuration dans la plupart des cas. Voir Section 7.6, « Le répertoire /sys ».
Votre BIOS doit gérer une telle configuration, mais il existe des cas où il ne le fait pas correctement ou pas complètement. Le BIOS a aussi besoin de savoir via le menu CMOS si le système d'exploitation est PnP. Alors que la plupart des pilotes de périphériques seront capables de détecter automatiquement ce que le BIOS a fait, dans certains cas, vous aurez besoin de le déterminer (ce qui n'est pas toujours facile). Voir Section 7, « Comment puis-je trouver les périphériques et comment sont-ils configurés ? ». Un avantage possible à laisser le BIOS faire cette configuration est qu'il fait son boulot avant de lancer Linux, donc c'est fait très tôt dans le processus de démarrage.
La plupart des BIOS créés après 1996 ?? peuvent configurer les ressources des bus PCI et ISA. Mais, il a été dit que certains anciens BIOS peuvent uniquement s'occuper du PCI. Pour essayer d'en savoir plus sur votre BIOS, cherchez sur le web. Merci de ne pas me demander car je n'ai pas toutes les données là -dessus. Les détails du BIOS que vous souhaitez connaître peuvent être difficiles à trouver. Certains BIOS pourraient avoir des capacités PnP minimales et attendre que le système d'exploitation fasse la configuration PnP. Si cela arrive, vous devrez soit trouver une autre méthode soit essayer d'enregistrer les informations dans la base de données ESCD si le BIOS en a une. Voir la prochaine section.
L'ESCD a pour but de conserver la dernière configuration utilisée. Mais comme Linux peut modifier la configuration des périphériques (en incluant l'utilisateur avec les outils PCI ou isapnp), l'ESCD ne sera pas au courant de cette modification et ne sauvegardera pas cette configuration. Un bon système d'exploitation PnP devrait mettre à jour l'ESCD, pour que les informations qui y sont stockées puissent être utilisées par un système d'exploitation non PnP (comme un Linux standard). MS Windows 9x ne le fait que dans certains précis. Voir Section 5.4.3, « Utiliser Windows pour configurer l'ESCD ». À partir du noyau 2.6, Linux est capable de modifier l'ESCD mais cela n'est pas encore utilisé (août 2004).
Pour utiliser ce qui a été enregistré dans l'ESCD, assurez-vous d'avoir bien spécifié que l'OS n'est pas PnP dans le CMOS du BIOS. Par la suite, à chaque fois que le BIOS démarre (avant que l'OS Linux ne soit chargé), il devrait tout configurer de cette façon. Si le BIOS détecte une nouvelle carte PnP non indiquée dans l'ESCD, alors il allouera des ressources bus à la carte et mettra à jour l'ESCD. Il pourrait même changer les ressources bus assignées aux cartes PnP existantes et modifier l'ESCD de manière concordante.
Un programme vous permet de visualiser le contenu de l'ESCD. Il affiche les IRQ, les adresses d'entrées/sorties, et cætera mais les noms de périphériques manquent (seulement les numéros d'identifiant des périphériques EISA). Il est disponible sur l'index de /home/gunther.mayer/lsescd.
Si chaque périphérique sauvegardait sa dernière configuration au niveau du matériel, la configuration matérielle ne serait pas nécessaire à chaque démarrage du PC. Mais cela ne fonctionne pas ainsi. Donc, toutes les données de l'ESCD ont besoin d'être actualisées si vous utilisez le BIOS pour PnP. Il existe des BIOS ne disposant pas d'ESCD mais ayant une mémoire non volatile pour stocker des informations concernant l'attribution des ressources bus aux cartes non PnP. Beaucoup de BIOS disposent des deux.
Dans Windows 98, il existe deux façons d'arriver au gestionnaire des périphériques :
Pour voir ce qui a été forcé sous Windows 98, regardez la liste des matériels « forcés » : Démarrer --> Programme --> Accessoires --> Outils système --> Information système --> Ressources matérielles --> Matériel forcé. Lorsque vous « forcez » un changement des ressources bus dans Windows, il devrait enregistrer votre modification dans l'ESCD (à condition que vous ayez quitté Windows normalement). À partir de la fenêtre « Informations système », vous pouvez aussi voir comment les IRQ et les ports d'entrées/sorties ont été alloués par Windows.
Même si Windows ne montre aucun conflit des ressources bus, il peut exister un conflit sous Linux. Ceci est dû au fait que Windows peut affecter des ressources bus différentes de celles de l'ESCD. Dans le cas rare où les périphériques sous Windows sont soit non PnP soit « forcés », alors la configuration Windows et celle de l'ESCD devraient être les mêmes.
Dans certains cas, les distributions Linux ont été configurées pour
lancer isapnp automatiquement au démarrage. Il est
toujours utilisé en 2004 mais il n'est pas réellement nécessaire si les
pilotes de périphériques fonctionnent bien. Si vous avez besoin de le
configurer vous-même, la grande partie de la documentation d'isapnp est
difficile à comprendre sauf si vous possédez des notions de base de
PnP. Ce guide pratique devrait vous aider à le
comprendre, ainsi que la FAQ qui accompagne isapnp.
Lancer le programme isapnp au démarrage vous
permettra de configurer ces périphériques suivant les valeurs spécifiées
dans /etc/isapnp.conf
. Il est possible de créer ce
fichier de configuration automatiquement mais vous devrez alors l'éditer
manuellement pour choisir entre les différentes options. Puis pour que
le pilote connaisse ces ressources, vous avez souvent besoin de les
spécifier en tant que paramètres pour les modules appropriés (pilotes).
Ceci se fait avec des fichiers de configuration, généralement dans le
répertoire /etc
. Cherchez-y des
fichiers nommés mod*
, et cætera. Si le pilote est intégré
au noyau, alors ils pourraient parfois être donnés comme paramètre du
noyau. Voir le guide pratique
des options de démarrage.
Avec isapnp, il existait un risque qu'un pilote de périphérique, intégré au noyau, soit lancé trop tôt, avant qu'isapnp n'ait pu configurer les adresses, et cætera au niveau matériel. En conséquence, le pilote de périphérique ne serait plus capable de trouver le périphérique. Le pilote essaie la bonne adresse mais cette adresse n'est pas configurée au niveau matériel. Cela est-il toujours un problème ??
Si votre distribution Linux a automatiquement installé
isapnptools, isapnp est
probablement lancé au démarrage. Dans ce cas, il ne vous reste qu'à éditer
/etc/isapnp.conf
suivant man
isapnp.conf
. Notez que cela revient à configurer manuellement
PnP car vous prendrez les décisions sur la façon de configurer
lors de l'édition du fichier de configuration.
Si le fichier de configuration est mauvais ou n'existe pas, vous pouvez utiliser le programme pnpdump pour vous aider à créer le fichier de configuration. Il crée pour vous un fichier de configuration mais vous devrez l'éditer avec intelligence avant de l'utiliser. Il contient quelques commentaires pour vous aider. Alors que le BIOS pourrait aussi avoir configuré les périphériques ISA (si vous lui avez dit que vous ne disposez pas de système d'exploitation PnP), isapnp le refera.
La terminologie utilisée dans le fichier
/etc/isapnp.conf
peut sembler étrange au début. Par
exemple, pour une adresse d'entrée/sortie 0x3e8, vous pourriez voir « (IO 0
(BASE 0x3e8)) » à la place. « IO 0 » veut dire qu'il s'agit de
la première plage
d'adresses que ce périphérique utilise. Une autre façon d'exprimer ceci
serait :
« IO[0] = 0x3e8 » mais isapnp ne le fait pas de
cette façon.
« IO 1 » voudrait dire qu'il s'agit de la deuxième plage d'adresse
utilisée par
ce périphérique, et cætera. « INT 0 » a une signification similaire
mais
pour les IRQ (interruptions). Une carte simple peut
contenir plusieurs périphériques physiques mais l'explication ci-dessus
était seulement pour un des périphériques.
Proposition pour un gestionnaire de configuration pour Linux 1999 (n'a jamais fait partie du noyau)Â ;
Livre : PCI System Architecture, quatrième édition par Tom Shanley +, MindShare 1999. Couvre les fonctionnalités PnP du bus PCI ;
Il peut aussi dire « manuellement » au pilote les ressources
bus qu'il doit utiliser. Vous donnez ces ressources bus en tant que
paramètre au noyau ou à un module. Si le pilote est intégré au noyau,
vous passez les paramètres au noyau via l'invite du démarrage. Voir le
Guide pratique sur l'invite de
démarrage (BootPrompt-HOWTO) pour
la description de quelques ressources bus et autres paramètres. Une fois
que vous savez quels paramètres donner au noyau, vous pouvez les
enregistrer dans un fichier de configuration du chargeur. Par exemple,
mettez append="…"
dans le fichier
lilo.conf
puis lancez lilo pour qu'il mette à jour
les informations de lancement.
Si le pilote est chargé comme module, dans plusieurs cas, le module
trouvera les ressources bus nécessaires et les enregistrera dans le
périphérique. Dans les autres cas (généralement pour les anciens PC),
vous pouvez avoir besoin de donner les ressources bus comme paramètres
du module. Les paramètres d'un module peuvent être spécifiés dans
/etc/modules.conf
. Ce sont généralement des outils
utilisé pour modifier ce fichier et qui sont dépendant de la
distribution. Les commentaires inclus dans ce fichier devraient vous
aider sur la façon de le modifier. De même, tout module que vous placez
dans /etc/modules
se verra charger avec ses
paramètres.
Bien qu'il ait une grande hétérogénéité sur la façon dont les pilotes trouvent leur ressources bus, le but final est le même. Si vous avez des problèmes avec un pilote, vous pouvez avoir besoin de regarder la documentation du pilote (vérifier la documentation du noyau). Quelques exemples brefs de pilotes sont présentés dans les sections suivantes :
Pour tout autre chose dans le fichier de configuration, le programme
setserial doit être modifié manuellement. Voir le Guide pratique sur la programmation
des ports série pour plus de détails. Vous utilisez
setserial pour informer le pilote de l'adresse
d'entrée/sortie et setserial est souvent exécuté à partir
d'un fichier de démarrage. Dans les versions récentes, il existe un fichier
/etc/serial.conf
(ou
/var/lib/setserial/autoconfig
) que vous « éditez »
en lançant simplement la commande setserial
de façon
ordinaire et ce que vous configurez avec setserial est
sauvegardé dans le fichier de configuration serial.conf
.
Le fichier serial.conf
devrait être consulté lorsque la
commande setserial est lancée à partir d'un fichier de
démarrage. Votre distribution peut, ou non, avoir configuré ceci pour
vous.
Il existe deux façons d'utiliser setserial suivant les options que vous lui donnez. Une possibilité est de dire manuellement au pilote la configuration. L'autre méthode est de tester une adresse donnée et d'indiquer si un port série existe à cet endroit. Il peut aussi tester cette adresse et essayer de détecter l'IRQ utilisée par ce port.
Même avec des noyaux modernes, setserial est quelque fois nécessaire si le pilote échoue lors de la détection du port série ou si vous avez un très ancien matériel.
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 Section 7.5, « Le répertoire /proc » ;
Outils pour détecter et configurer tout le matériel... lsdev, hwinfo, discover, kudzu ;
Bus ISA : Section 7.9, « Cartes ISA PnP »
Bus ISA : Section 7.12, « Cartes non PnP »
Bus ISA : Section 7.13, « Cartes non PnP avec cavaliers »
Bus ISA : Section 7.14, « Cartes non PnP et sans cavaliers »
/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 Section 7.10, « 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.
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 Section 7.12, « Cartes non PnP ». Ou essayez de trouver le logiciel MS qui l'a configuré.
read-edid (get-edid) : récupère les paramètres des moniteurs VESA (à part les très anciens) ;
printtool : imprimantes (X-window doit être en cours d'exécution) ;
mdetect : détecte et configure les
souris. Connaît-il les souris sur
/dev/input/
 ?
nictools-pci (et nictools-nopci) pour les cartes ethernet ;
xvidtune : configure la vidéo avec Xwindows (voir XFree86-Video-Timings-HOWTO).
Pour un exemple de partage d'une même IRQ entre deux périphériques PCI, voir Partage d'interruption PCI. Cette capacité de partage est intégrée au matériel et tous les pilotes de périphériques sont supposés la supporter. Notez que vous ne pouvez pas habituellement partager la même interruption entre le bus PCI et le bus ISA.
Des informations techniques détaillées sur les interruptions sont disponibles, par exemple « Les interruptions PCI pour les machines x86 sous FreeBSD. Microsoft a un document intitulé « L'importance de l'implémentation des sous-systèmes d'interruptions basées sur APIC sur les PC mono-processeur" ».
Un cas où un périphérique ISA est activé et ne peut se voir affecté une interruption (IRQ) car aucune n'est disponible. Ou une interruption pourrait être disponible mais ne peut pas être utilisée car le matériel du périphérique qui a besoin de cette interruption ne sait pas gérer le numéro disponible ou la carte mère ne le supporte pas non plus à cause de problèmes de routage (voir PCI Interrupts). Si les périphériques ISA utilisent toutes les interruptions, alors une ou plusieurs cartes PCI pourraient être en conflit car elles ne peuvent pas obtenir d'IRQ.
Normalement, le BIOS affectera des interruptions et ne créera pas de conflits. Mais il pourrait être forcé de créer des conflits s'il tombe à court d'IRQ. Ceci peut survenir si quelqu'un a configuré le BIOS pour réserver certaines IRQ pour les périphériques ISA qui ne sont pas PnP. Ces paramétrages pourraient être mauvais et devraient être vérifiés, tout spécialement si vous avez des problèmes. Par exemple, quelqu'un pourrait avoir réservé une IRQ pour une carte ISA qui a été enlevé du PC depuis longtemps. Si vous récupérez cette IRQ, alors elle est disponible et un conflit disparaît.
Quelque fois, le BIOS résoudra le problème du manque d'IRQ en utilisant ce qu'il appelle l'IRQ 0. Elle n'existe pas car la vrai IRQ 0 est affectée en permanence à l'horloge de l'ordinateur mais signifie que le pilote devrait utiliser la demande au lieu des IRQ. Ceci signifie que le pilote devra vérifier fréquemment le périphérique (lui demander) pour voir si le périphérique a besoin d'un service de la routine d'interruptions. Bien sûr, cela gâche du temps processeur et il y a plus de risques d'un dépassement de tampon du périphérique car il pourrait ne pas être servi assez rapidement par le pilote.
Ce guide pratique ne couvre pas UPnP. UPnP pour Linux est supporté par Intel qui a développé un logiciel spécifique. Il existe d'autres programmes qui font à peu près la même chose que UPnP. Une comparaison de ceux-ci est disponible sur http://www.cs.umbc.edu/~dchakr1/papers/mcommerce.html. Un projet UPnP pour Linux se trouve sur Sourceforge : Kit UPnP pour Linux
Il existe trois types d'adresses : adresses en mémoire principale, adresses d'entrées/sorties (ports) et adresses de configuration. Sur le bus PCI, les adresses de configuration constituent une plage d'adresses séparée un peu comme les adresses d'entrées/sorties. Sauf dans le cas compliqué des adresses de configuration ISA, qu'une adresse sur le bus soit ou non une adresse en mémoire principale, une adresse d'entrées/sorties ou une adresse de configuration dépend seulement du voltage sur certains fils du bus. Pour plus de détails sur les adresses de configuration du bus ISA, voir Section 13.3, « Adresses de configuration du bus ISA (Port de lecture et cætera) ».
Traditionnellement, la plupart des périphériques d'entrées/sorties utilisent seulement la mémoire d'entrées/sorties pour communiquer avec le processeur (CPU). Le pilote de périphérique, exécuté sur le processeur lira et écrira des données de/vers l'espace d'adressage des entrées/sorties et la mémoire principale. Malheureusement, cela nécessite deux étapes. Par exemple, 1. lire les données à partir d'un périphérique (en espace d'adressage) et les stocker temporairement dans le CPU ; 2. écrire ces données en mémoire principale. Une façon plus rapide serait que le périphérique place lui-même les données directement en mémoire principale. Une façon de faire ceci est d'utiliser Section 2.7, « DMA (accès direct à la mémoire) ou maîtrise du bus » ISA ou la maîtrise du bus PCI. Le périphérique physique peut aussi détenir un peu de mémoire principale (aux adresses supérieures pour éviter les conflits avec les adresses des composants de la mémoire principale). De cette façon, le périphérique lit et écrit directement dans son espace mémoire interne sans avoir à s'embêter avec le DMA ou la maîtrise du bus. De tels périphériques pourraient aussi utiliser des adresses d'entrées/sorties.
Ces trois adresses sont nommées port de lecture (read-port), port d'écriture (write-port) et port d'adresse (address-port). Chaque port a une taille d'un octet. Chaque carte PnP dispose d'un grand nombre de registres de configuration, donc même les trois adresses ne sont pas suffisantes pour les registres de configuration d'une seule carte. Pour résoudre ce problème, chaque carte se voit affecter un numéro de carte en utilisant une technique appelée « isolation ». Voir Section 13.6, « Isolation ISA » pour des détails plus complexes.
Ensuite, pour configurer une certaine carte, son numéro de carte est envoyé via l'adresse du port d'écriture pour indiquer à cette carte qu'elle doit écouter sur son port d'adresse. Toutes les autres cartes notent que ce n'est pas leur numéro de carte et donc n'écoutent pas. Ensuite, l'adresse d'un registre de configuration est envoyé sur le port d'adresse (à toutes les cartes, mais une seule écoute). Enfin, le transfert de données prend place avec ce registre de configuration sur cette carte soit en faisant une lecture sur le port de lecture soit en faisant une écriture sur le port d'écriture.
Le port d'écriture est toujours A79 et le port d'adresse est toujours 279 (en hexadécimal). Le port de lecture n'est pas fixe mais dépend du logiciel de configuration (tout en restant dans la plage 203-3FF) qui avec un peu de chance n'entrera pas en conflit avec les autres cartes ISA. Si un conflit se déclare, il changera l'adresse. Toutes les cartes PnP sont « programmées » avec cette adresse. Donc, si vous utilisez isapnp pour enregistrer ou connaître la configuration, celui-ci doit d'abord déterminer l'adresse du port de lecture.
Avant de se plonger dans le détail des interruptions, il existe une autre façon pour que les périphériques initient la communication en dehors de l'envoi d'une interruption. Cette méthode est une requête DMA (Direct Memory Access) pour prendre le contrôle de l'ordinateur à partir du CPU pour un temps limité. Sur le bus PCI, il n'utilise aucune ressource. Tous les périphériques ne sont pas capables de faire du DMA. Voir Section 2.7, « DMA (accès direct à la mémoire) ou maîtrise du bus ».