|
このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
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.
Bien que je n'aie pas essay? de vous tromper intentionnellement, il est probable que des erreurs restent dans ce document. Faites-le moi savoir si vous en trouvez. Comme il s'agit d'une documentation libre, il est ?vident que je ne peux pas ?tre tenu responsable des erreurs contenues dans ce texte.
Tout nom de marque (avec une majuscule initiale tel que MS Windows) sera suppos? ?tre une marque d?pos?e. Elles appartiennent ? leur propri?taires respectifs.
Daniel Scott a relu ce document en mars 2000 et y a trouv? de nombreuses erreurs?;
Pete Barrett a donn? une astuce pour emp?cher Windows de r?initialiser les IRQ PCI?;
Ao?t 2004?: Ross Boylan a trouv? des erreurs et a indiqu? un manque de clart? dans la partie o? on indique au BIOS qu'il s'agit d'un syst?me d'exploitation PnP.
Merci de m'indiquer toute erreur, que ce soit dans les faits, les opinions, la logique, l'orthographe, la grammaire, la clart?, les liens, et c?tera. Mais tout d'abord, si la date du document est vieille de plus de plusieurs mois, v?rifiez que vous poss?dez bien la derni?re version. Envoyez-moi toute information que vous trouvez int?ressante pour ce document.
Je n'ai pas encore ?tudi? le code utilis? par les diff?rents pilotes Linux et par le noyau pour impl?menter le Plug-and-Play. Mais, j'ai commenc? ? jeter un ?il, notamment aux commentaires. Donc, ce guide pratique est encore incomplet. Il devrait expliquer plus en profondeur le ??hot swapping??, le ??hot-plug?? et le nouveau logiciel PnP du noyau 2.6. Et il ne couvre pas le firewire. Il comporte certainement quelques erreurs (faites-moi savoir o? je me trompe). Dans ce guide pratique, j'ai utilis? deux points d'interrogation (??) pour signaler que je n'ai pas vraiment la r?ponse.
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.
Le Plug-and-Play (PnP) est un syst?me d?tectant automatiquement les p?riph?riques tels que les disques, les cartes son, les cartes r?seau, les modems, et c?tera. Il trouve tous les p?riph?riques du bus PCI et tous les p?riph?riques supportant PnP sur l'ancien bus ISA. Avant PnP, beaucoup de p?riph?riques ?taient automatiquement recherch?s en utilisant des m?thodes non PnP mais n'?taient pas trouv?s quelque fois. PnP fournit un moyen de trouver tous les p?riph?riques supportant PnP. Il r?alise aussi une configuration de bas niveau de ces p?riph?riques. Les p?riph?riques non PnP (et les p?riph?riques PnP ayant ?t? correctement configur?s avec PnP) peuvent souvent ?tre d?tect?s par des m?thodes n'utilisant pas PnP. Le bus PCI a ?t? con?u pour le PnP alors que le vieux bus ISA ne l'a pas ?t? ? ses origines mais son support lui a ?t? ajout? plus tard. Donc, souvent, PnP est utilis? pour signifier uniquement PnP pour l'ancien bus ISA. Par exemple, lorsque vous apercevez au d?marrage des messages d'isapnp du style?: ??Plug & Play device??, cela signifie seulement qu'il y a un p?riph?rique ISA PnP. Dans ce guide pratique, nous traitons ? la fois le PnP du bus ISA et du bus PCI.
Avec le temps, le noyau Linux am?liore son support de PnP. ? la fin du 20? si?cle, on pouvait dire que Linux n'?tait pas un syst?me d'exploitation PnP. Mais il est dit qu'avec la version 2.6 du noyau, Linux est maintenant totalement compatible avec PnP (en supposant que le noyau est construit avec le support de PnP). Bien que le syst?me PnP n'est pas centralis? comme cela peut l'?tre avec MS Windows (et son registre), le PnP Linux d?centralis? semble fonctionner correctement.
Linux conserve la trace des affectations de ressources demand?es par les pilotes de p?riph?riques et refuse toute requ?te s'il estime que cela causerait un conflit. Le noyau fournit aussi des programmes que les pilotes de p?riph?riques peuvent appeler pour effectuer leurs op?rations de plug-and-play. Le noyau lit aussi tous les registres de configuration de tous les p?riph?riques PnP et maintient leur tables que les pilotes de p?riph?riques peuvent consulter. Cette table aide les pilotes ? trouver leur mat?riel. Le noyau 2.6 fournit aussi un meilleur support pour le ??hot-plug??.
Le BIOS de votre PC travaillera certainement un peu pour le plug-and-play. Donc, si tout fonctionne en harmonie avec PnP, vous pouvez utiliser votre ordinateur sans avoir besoin de tout conna?tre sur le plug-and-play. Mais, si certains p?riph?riques support?s par Linux ne fonctionnent pas (parce qu'ils n'ont pas ?t? rep?r?s par Linux ou parce qu'ils ont ?t? mal configur?s), vous aurez besoin de lire au moins une partie de ce guide pratique. Vous en apprendrez sur le PnP mais aussi sur la fa?on dont la communication prend place dans un ordinateur. Si vous avez un ordinateur moderne avec un bus PCI mais sans bus ISA, vous pouvez passer les parties sur le bus ISA.
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.
Un ordinateur est compos? d'un processeur (CPU) r?alisant les op?rations et de m?moire vive (RAM) pour stocker les programmes et les donn?es (en acc?s rapide). De plus, il existe de nombreux p?riph?riques tels que diff?rents types de disques, une carte vid?o, un clavier, des p?riph?riques r?seaux, des cartes modem, des p?riph?riques sons, le bus USB, les ports s?ries et parall?les, et c?tera. Dans les anciens temps, la plupart des p?riph?riques ?taient des cartes ins?r?es dans des emplacements du PC. Aujourd'hui, beaucoup de p?riph?riques, qui ?taient auparavant des cartes, sont maintenant compris dans les composants int?gr?s ? la carte-m?re. On trouve aussi une alimentation apportant l'?lectricit?, diff?rents bus sur la carte m?re pour connecter les p?riph?riques au CPU et une bo?te pour contenir le tout.
Les cartes se connectant sur la carte m?re peuvent contenir plus d'un p?riph?rique. Les cartes m?moires sont quelque fois consid?r?es comme des p?riph?riques mais ils ne sont pas Plug-and-Play si on suit le sens utilis? dans ce guide pratique.
Pour que l'ordinateur fonctionne bien, chaque p?riph?rique doit ?tre sous
le contr?le de son ??pilote??. Il s'agit d'un logiciel faisant partie du
syst?me
d'exploitation, pouvant ?tre charg? en tant que module et ex?cut? ? partir du
CPU. Les pilotes de p?riph?riques sont associ?s ? des
??fichiers sp?ciaux?? rang?s dans le r?pertoire /dev, bien qu'ils ne soient pas vraiment des
fichiers. Ils ont des noms tels que hda3 (troisi?me partition du disque a),
ttyS1 (deuxi?me port s?rie), eth0 (premi?re carte Ethernet), et c?tera.
Le p?riph?rique eth0 est celui de la carte ethernet (carte r?seau).
Auparavant, il s'agissait de /dev/eth0 mais c'est maintenant un p?riph?rique
virtuel du noyau. Ce que eth0 r?f?rence d?pend du type de carte ethernet que
vous avez. Si le pilote est un module, cette affectation se trouve probablement
dans une table interne du noyau mais pourrait aussi se trouver dans
/etc/modules.conf (appel? ??alias??). Par
exemple, si vous disposez d'une carte ethernet utilisant le composant
??tulip??, vous devez placer la ligne ??alias eth0 tulip??
dans /etc/modules.conf pour que, lorsque votre PC cherche
eth0, il trouve le pilote tulip. N?anmoins, les noyaux modernes peuvent
g?n?ralement trouver le bon module du p?riph?rique. De cette fa?on, vous n'aurez
pas ? le sp?cifier vous-m?me.
Pour contr?ler un p?riph?rique, le CPU (sous le contr?le du pilote de p?riph?rique) envoie des commandes et des donn?es du p?riph?rique. Il re?oit aussi l'?tat et des donn?es des diff?rents p?riph?riques. Pour cela, chaque pilote doit conna?tre l'adresse du p?riph?rique qu'il doit contr?ler. Conna?tre cette adresse revient ? mettre en place un canal de communication, m?me si le ??canal?? physique se trouve ?tre le bus de donn?es interne au PC, bus partag? avec beaucoup d'autres p?riph?riques.
Ce canal de communication est en fait un peu plus complexe que ce qui est d?crit ci-dessus. Une ??adresse?? est en fait une plage d'adresses, ce qui fait que, parfois, le mot ??plage?? est utilis? ? la place du mot ??adresse??. Il peut exister plus d'une plage (sans recoupement) pour un seul p?riph?rique. Il existe aussi un autre canal connu sous le nom d'interruptions permettant au p?riph?rique d'envoyer une requ?te de ??demande d'aide?? urgente ? leur pilote.
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.
Les p?riph?riques ?taient originellement situ?s dans la plage d'adresses des entr?es/sorties mais, aujourd'hui, ils peuvent utiliser la plage en m?moire principale. Une adresse d'entr?e/sortie est quelque fois simplement appel?e ??I/O??, ??IO??, ??i/o?? ou ??io??. Les termes ??port I/O?? ou ??plage d'entr?es/sorties?? sont aussi utilis?s. Ne confondez pas ces ports d'entr?es/sorties avec la m?moire d'entr?es/sorties situ?e en m?moire principale. Il existe deux ?tapes principales pour allouer des adresses I/O (ou d'autres ressources bus telles que les interruptions sur le bus ISA)?:
Initialiser l'adresse I/O, et c?tera. dans le mat?riel (dans un de ses registres),
Laisser son pilote de p?riph?rique reconna?tre l'adresse I/O, et c?tera.
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.
Beaucoup de p?riph?riques disposent d'une plage m?moire en m?moire
principale. C'est quelquefois appel? ??m?moire partag?e?? ou
??m?moire d'entr?es/sorties??. Cette m?moire est situ?e physiquement
dans le p?riph?rique physique mais l'ordinateur y acc?de comme s'il acc?dait ?
des composants m?moire. En parlant de ressources bus, c'est souvent
simplement appel? ??m?moire??, ??mem??, voire
??iomem??. En plus de l'utilisation de cette ??m?moire??,
un tel p?riph?rique peut aussi utiliser une plage m?moire conventionnelle
d'entr?es/sorties. Pour conna?tre la m?moire utilis?e sur votre ordinateur,
cherchez dans /proc/iomem. Ce ??fichier?? inclut
la m?moire utilis?e par les composants m?moire habituels de la RAM, donc il
affiche l'allocation m?moire en g?n?ral et pas seulement l'allocation iomem.
Si vous apercevez un num?ro ?trange au lieu d'un nom, c'est probablement le
num?ro d'un p?riph?rique PCI, ce que vous pouvez v?rifier en ex?cutant
??lspci??.
Lorsque vous ins?rez une carte utilisant iomem, vous ?tes aussi en train d'ins?rer un module m?moire pour la m?moire principale. Une adresse haute est s?lectionn?e pour lui par PnP de fa?on ? ce que cela ne rentre pas en conflit avec les modules de la m?moire principale (composants). Cette m?moire peut ?tre de la m?moire morte (ROM ou Read Only Memory) ou de la m?moire partag?e. Cette derni?re est partag?e entre le p?riph?rique et le CPU (ayant lanc? le pilote du p?riph?rique) de la m?me fa?on que la plage d'adresses d'entr?es/sorties est partag?e entre le p?riph?rique et le CPU. Cette m?moire partag?e sert en tant que moyen de ??transfert?? de donn?es entre le p?riph?rique et la m?moire principale. C'est de l'entr?e/sortie mais ce n'est pas fait dans la plage d'adresses des entr?es/sorties. La carte et le pilote doivent conna?tre la plage d'adresses.
La ROM (Read-Only Memory, soit m?moire en lecture seule) est un genre diff?rent d'iomem. C'est plut?t un programme (parfois un pilote de p?riph?rique), utilis? avec ce p?riph?rique. Cela peut aussi ?tre un code d'initialisation malgr? que le pilote soit encore n?cessaire. Avec un peu de chance, il fonctionnera aussi sous Linux, et pas seulement sous MS Windows. Elle peut ?tre copi?e en m?moire principale pour fonctionner plus rapidement. Mais dans ce cas, elle n'est plus ??en lecture seule??.
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.
Pour le bus PCI, DMA et ma?trise de bus signifient la m?me chose. Avant l'arriv?e du bus PCI, la ma?trise du bus ?tait rare et le DMA fonctionnait diff?remment et ?tait lent. L'acc?s direct ? la m?moire (DMA, acronyme de Direct Memory Access) est ce qui permet ? un p?riph?rique de prendre la main sur le bus principal de l'ordinateur et de transf?rer directement des octets vers la m?moire principale ou vers d'autres p?riph?riques. Normalement, le processeur s'occupe des transferts d'un p?riph?rique vers la m?moire principale par un processus en deux ?tapes?:
lire un ensemble d'octets ? partir de la page m?moire d'entr?es/sorties et les stocker dans le CPU lui-m?me?;
?crire ces octets dans la m?moire principale.
Avec le DMA, il s'agit d'un processus en une seule ?tape consistant en l'envoi des octets directement du p?riph?rique ? la m?moire. Les p?riph?riques doivent disposer de capacit?s DMA int?gr?es et, du coup, tous les p?riph?riques ne peuvent pas faire de DMA. Alors que le DMA est en cours, le processeur ne peut pas faire grand chose car le bus principal est en cours d'utilisation par le transfert DMA.
L'ancien bus ISA peut faire du DMA lentement alors que le bus PCI peut faire du DMA par ma?trise du bus. Le bus LPC a ? la fois l'ancien et le nouveau DMA (ma?trise du bus). Sur le bus PCI, ce qui devrait ?tre appel? plus pr?cis?ment ? ma?trise du bus ? est souvent appel? ? Ultra DMA ?, ? BM-DNA ?, ? udma ? ou tout simplement ? DMA ?. Sur le bus PCI, la ma?trise du bus est souvent appel? DMA. La ma?trise du bus permet aux p?riph?riques de devenir temporairement les ma?tres du bus et de transf?rer des octets un peu comme lorsque le ma?tre du bus ?tait le processeur. Il n'utilise aucun num?ro de canal car l'organisation du bus PCI est telle que le mat?riel PCI sait quel p?riph?rique est actuellement le ma?tre du bus et quel p?riph?rique r?clame ? devenir le ma?tre du bus. Du coup, il n'y a pas d'allocation de ressources pour les canaux DMA pour le bus PCI et aucune ressource de canaux DMA n'existe pour ce bus. Le bus LPC est suppos? ?tre configur? par le BIOS pour que les utilisateurs n'aient pas ? se soucier des canaux DMA.
C'est seulement pour l'ancien bus ISA et le bus LPC. Quand un p?riph?rique veut faire du DMA, il lance une requ?te de DMA en utilisant les fils d?di?s ? cela, un peu comme une requ?te d'interruption. En fait, le DMA aurait p? ?tre g?r? en utilisant des interruptions mais cela aurait introduit des d?lais, donc il est plus rapide de faire cela en ayant un type sp?cial d'interruption connu en tant que requ?te DMA. Comme les interruptions, les demandes DMA sont num?rot?es pour identifier le p?riph?rique lan?ant la requ?te. Ce nombre est appel? un canal DMA. Comme les transferts DMA utilisant tous le bus principal (et qu'un seul peut ?tre lanc? ? la fois), ils utilisent tous les m?me canal pour le flot de donn?es mais le num?ro de ??canal DMA?? sert ? identifier qui utilise le canal. Les registres mat?riels existent sur la carte m?re, qui enregistre l'?tat actuel de chaque canal. Du coup, pour lancer une requ?te DMA, le p?riph?rique doit conna?tre son num?ro de canal DMA stock? dans un registre sp?cial du p?riph?rique physique.
Donc, les pilotes de p?riph?riques doivent ?tre ??attach?s?? d'une fa?on quelconque au mat?riel qu'ils contr?lent. Ceci se fait en allouant des ressources bus (I/O, m?moire, IRQ, DMA) au p?riph?rique physique et en laissant le pilote le d?couvrir. Par exemple, un port s?rie utilise seulement deux ressources?: une IRQ et une adresse d'entr?es/sorties. Ces deux valeurs doivent ?tre fournies au pilote et au p?riph?rique physique. Le pilote (et son p?riph?rique) dispose d'un nom dans le r?pertoire /dev (tel que ttyS1). L'adresse et le num?ro IRQ sont stock?s par le p?riph?rique physique dans ses registres de configuration sur sa carte (ou dans un composant de la carte m?re). Les vieux mat?riels (dans les ann?es 1990) utilisaient des interrupteurs (ou des cavaliers) pour configurer physiquement l'IRQ et l'adresse au niveau du mat?riel. Ce param?trage restera fixe tant qu'une personne n'enlevera pas le bo?tier pour d?placer les cavaliers.
Mais, dans le cas de PnP (pas de cavaliers), les donn?es du registre de configuration sont habituellement perdues lorsque le PC est ?teint, donc les donn?es des ressources bus doivent ?tre fournies ? chaque p?riph?rique ? chaque allumage du PC.
L'architecture du PC n'apporte qu'un nombre limit? de ressources?: IRQ, canaux DMA, adresses d'entr?es/sorties et de plages m?moires. S'il n'existait qu'un nombre limit? de p?riph?riques et qu'ils aient tous des ressources bus standardis?es (telles que des adresses d'entr?es/sorties et des num?ros d'IRQ uniques), il n'y aurait aucun souci pour attacher un pilote ? son p?riph?rique. Chaque p?riph?rique devrait avoir un nombre fixe de ressources qui n'entreraient pas en conflit avec tout autre p?riph?rique sur votre ordinateur. Deux p?riph?riques ne devraient pas avoir les m?mes adresses, il n'y aurait pas de conflit d'IRQ sur le bus ISA, et c?tera. Chaque pilote devrait ?tre d?velopp? avec des adresses, des IRQ, et c?tera, uniques cod?es en dur dans le programme. La vie serait simple.
Une autre fa?on d'emp?cher les conflits d'adresses serait d'avoir un num?ro d'emplacement, inclus dans l'adresse, pour chaque carte. Du coup, il n'y aurait plus de conflits d'adresses entre deux cartes diff?rentes (car elles sont dans des emplacements diff?rents). La conception des cartes ne permettrait pas les conflits d'adresses entre les diff?rentes fonctions de la carte. Il en ressort que l'espace d'adressage (utilis? pour la demande et l'affectation de ressources) le fait r?ellement. Mais cela n'est pas pris en compte pour les adresses d'entr?es/sorties et pour les r?gions m?moire. Partager des IRQ comme sur le bus PCI ?vite aussi des conflits mais peut poser d'autres probl?mes.
Mais l'architecture du PC a des probl?mes de conflit. L'augmentation du nombre de p?riph?riques (incluant les multiples p?riph?riques de m?me type) a tendance ? augmenter les conflits potentiels. En m?me temps, l'introduction du bus PCI, o? deux p?riph?riques ou plus peuvent partager la m?me interruption et l'introduction d'interruptions suppl?mentaires, a tendance ? r?duire les conflits. Le r?sultat global, d? au passage au PCI, a ?t? une r?duction des conflits car les ressources les plus faibles sont les IRQ. N?anmoins, m?me sur le bus PCI, c'est un peu plus efficace pour ?viter le partage des IRQ. Dans certains cas o? les interruptions arrivent en une succession rapide et doivent ?tre trait?es rapidement (comme en audio), le partage peut causer des d?gradations dans les performances. Donc, il n'est pas bon d'affecter tous les p?riph?riques PCI au m?me IRQ, l'affectation doit ?tre partag?e. N?anmoins, certaines personnes trouvent que tous les p?riph?riques PCI sont sur la m?me IRQ.
Donc, les p?riph?riques ont besoin d'avoir de la flexibilit? de fa?on ? ce qu'ils puissent ?tre initialis?s avec n'importe quelle adresse, IRQ, et c?tera. C'est n?cessaire pour ?viter tout conflit et arriver ? un point d'?quilibre. Mais quelques IRQ et adresses sont pratiquement des standards, comme ceux de l'horloge et du clavier. Ils n'ont pas besoin d'une telle flexibilit?.
En plus du probl?me de conflit lors de l'allocation des ressources bus, une indication erron?e en indiquant au pilote de p?riph?rique quelles sont les ressources bus peut causer un autre probl?me. Cela a plus de chances d'arriver dans le cas de la configuration manuelle o? l'utilisateur saisit les ressources utilis?es dans un fichier de configuration sur le disque dur. Ceci fonctionne g?n?ralement bien quand les ressources sont initialis?es avec des cavaliers sur les cartes (en supposant que l'utilisateur sache comment elles ?taient initialis?es et n'a fait aucune faute en saisissant ces donn?es dans les fichiers de configuration). Mais, avec des ressources configur?es par un logiciel PnP, elles ne seront pas toujours identiques et cela pourrait poser probl?me pour toute configuration manuelle o? l'utilisateur saisit les valeurs des ressources bus configur?es par PnP.
L'allocation de ressources bus, lorsqu'elle est faite correctement, ?tablit des canaux de communications sans conflit entre le mat?riel physique et le pilote associ?. Par exemple, si une certaine plage m?moire d'entr?es/sorties (ressource) est allou?e ? la fois au pilote de p?riph?rique et au mat?riel, alors cela a ?tabli une communication sur une voie ? sens unique entre eux. Le pilote peut envoyer des commandes et des informations au p?riph?rique. C'est donc un peu plus qu'une voie ? sens unique car le pilote peut obtenir des informations du p?riph?rique en lisant ces registres. Mais le p?riph?rique ne peut pas initier une communication de cette fa?on. Pour initier une communication, le p?riph?rique a besoin d'une IRQ pour qu'il puisse envoyer une interruption ? son pilote. Ceci cr?e un canal de communication ? double-sens o? le p?riph?rique physique et son pilote peuvent initier une communication.
Le terme Plug-and-Play (PnP) a diff?rentes significations. Au sens g?n?ral, il s'agit de la configuration automatique lorsqu'une personne connecte un p?riph?rique et que celui-ci se configure lui-m?me. Le sens utilis? dans ce livre est tout autre?: PnP signifie la configuration des ressources bus pour PnP (les configurer au niveau des p?riph?riques physiques) et la communication de cette information aux pilotes de p?riph?riques. Dans le cas de Linux, il s'agit souvent d'un pilote d?terminant la fa?on dont le bus a initialis? les ressources bus et, si n?cessaire, le pilote donnant une commande pour changer (r?initialiser) les ressources bus. Souvent, ??PnP?? ne signifie que PnP sur le bus ISA donc le message d'isapnp, ??No Plug and Play device found??, signifie simplement qu'aucun p?riph?rique ISA PnP n'a ?t? trouv?. Les sp?cifications du PCI standard (invent? avant l'utilisation du terme ??PnP??) apportent l'?quivalent de PnP au bus PCI.
PnP fait correspondre les p?riph?riques avec leur pilote et sp?cifie leurs canaux de communication (en allouant des ressources bus). Il communique ?lectroniquement avec les registres de configuration situ?s ? l'int?rieur des p?riph?riques physiques en utilisant un protocole standardis?. Sur le bus ISA et avant le Plug-and-Play, les ressources bus ?taient simplement initialis?es au niveau mat?riel avec des interrupteurs de diff?rentes sortes. Quelquefois, les ressources bus pouvaient ?tre configur?es sur le mat?riel par un pilote (g?n?ralement ?crit seulement pour un syst?me MS mais dans de rares cas support? aussi par un pilote Linux). Cela ressemblait ? du PnP mais aucun protocole standardis? n'?tait utilis? donc il ne s'agissait pas vraiment de PnP. Certaines cartes contiennent un param?trage par cavaliers qui peut ?tre surcharg? par un tel pilote. Pour Linux avant le PnP, les ressources bus ?taient affect?es aux pilotes logiciels par des fichiers de configuration (ou autre chose de ce genre) ou en parcourant le bus aux adresses o? il s'attendait ? trouver le p?riph?rique. Mais ces m?thodes sont toujours utilis?es de nos jours pour permettre ? Linux d'utiliser du mat?riel non PnP. Et, quelque fois, ces vieilles m?thodes sont toujours utilis?es de nos jours sur du mat?riel PnP (apr?s que le BIOS ait affect? des ressources aux mat?riels par les m?thodes PnP).
Le bus PCI ressemblait au PnP d?s le d?but mais il n'a pas ?t? appel? PnP ou ? plug and play ?, ce qui a eu comme r?sultat que PnP signifie souvent PnP sur le bus ISA. Dans la documentation, PnP signifie habituellement PnP sur le bus ISA comme sur le bus PCI.
Voici comment PnP devrait fonctionner. L'hypoth?tique programme de configuration PnP trouve tous les p?riph?riques PnP et demande ? chacun les ressources bus dont il a besoin. Ensuite, il v?rifie quelles sont les ressources bus qu'il peut affecter (IRQ, et c?tera). Bien s?r, s'il a r?serv? des ressources bus utilis?es pour des p?riph?riques non PnP (s'il les conna?t), il ne les donne pas. Il utilise certains crit?res (ne faisant pas partie des sp?cifications PnP) pour donner les ressources bus de fa?on ? ce qu'il n'y ait pas de conflit et de fa?on ? ce que tous les p?riph?riques disposent de ce qu'ils ont demand? (si possible). Il indique ensuite indirectement ? chaque p?riph?rique physique les ressources bus qui lui ont ?t? assign?es et les p?riph?riques se configurent eux-m?mes pour n'utiliser que ces ressources-l?. Enfin, les pilotes de p?riph?riques trouvent d'une mani?re ou d'une autre quelles ressources sont utilis?es par leur p?riph?rique et sont donc capables de communiquer avec les p?riph?riques qu'ils contr?lent.
Par exemple, prenons une carte ayant besoin d'une IRQ (d'un num?ro d'IRQ) et de 1?Mo de m?moire partag?e. Le programme PnP lit cette requ?te des registres de configuration de la carte. Il lui affecte l'IRQ 5 et 1?Mo d'espace m?moire, commen?ant ? partir de l'adresse 0xe9000000. Le programme PnP lit aussi les informations d'identification de la carte, indiquant ainsi le type de p?riph?rique, son num?ro d'identifiant, et c?tera. Ensuite, il informe, directement ou indirectement, le pilote de p?riph?rique convenable pour ce mat?riel, de ce qu'il a fait. Si le pilote lui-m?me g?re le PnP, alors il n'est pas n?cessaire de trouver un pilote pour le p?riph?rique (car le pilote est d?j? en cours d'ex?cution). Sinon, le bon pilote de p?riph?rique doit ?tre trouv? et la configuration du p?riph?rique doit lui ?tre communiqu?e.
Ce n'est pas toujours aussi simple car la carte (ou la table de routage pour le PCI) pourrait indiquer qu'elle ne peut utiliser que certains num?ros d'IRQ ou que les 1?Mo de m?moire doivent r?sider dans un certain espace d'adresses. Les d?tails sont diff?rents pour les bus PCI et ISA, cette derni?re ?tant la plus complexe.
Une fa?on habituellement utilis?e pour allouer des ressources est de commencer avec un p?riph?rique et de lui allouer des ressources bus. Puis de faire la m?me chose avec le p?riph?rique suivant, et c?tera. Ensuite, si finalement tous les p?riph?riques obtiennent les ressources allou?es sans conflit, alors tout va bien. Mais si allouer une ressource requise cr?ait un conflit, alors il serait n?cessaire de revenir en arri?re et d'essayer de faire quelques changements dans les allocations pr?c?dentes de fa?on ? conserver la ressource bus n?cessaire. Ceci s'appelle le balancement. Linux ne le fait pas mais MS Windows en est capable dans certains cas. Pour Linux, tout ceci est fait par le BIOS, le noyau ou les pilotes de p?riph?riques. Avec Linux, le pilote du p?riph?rique n'obtient pas son allocation finale de ressources tant que le pilote n'est pas lanc?, donc une fa?on d'?viter les conflits est de ne pas lancer un p?riph?rique qui pourrait causer un conflit. N?anmoins, le BIOS alloue fr?quemment des ressources au p?riph?rique physique avant que Linux ne soit compl?tement d?marr? et le noyau v?rifie les p?riph?riques PCI pour les conflits d'adresse au d?marrage.
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).
Quand le PC est lanc? la premi?re fois, le BIOS lance son programme pour d?marrer le PC (la premi?re ?tape ?tant de v?rifier le mat?riel de la carte m?re). Si le syst?me d'exploitation est stock? sur disque dur (ce qui est habituellement le cas), alors le BIOS doit disposer de certaines informations sur le disque dur. Si ce disque est PnP, le BIOS peut utiliser des m?thodes PnP pour le trouver. De m?me, pour permettre ? l'utilisateur de configurer manuellement le CMOS du BIOS et de r?pondre aux messages d'erreur lors du d?marrage, un ?cran (et donc une carte vid?o) et un clavier sont aussi requis. Donc, le BIOS doit toujours configurer via PnP les p?riph?riques n?cessaires au chargement du syst?me d'exploitation ? partir du disque dur.
Une fois que le BIOS a identifi? le disque dur, la carte vid?o et le clavier, il est pr?t ? commencer le d?marrage (charger le syst?me d'exploitation en m?moire). Si vous avez indiqu? au BIOS que vous disposez d'un syst?me d'exploitation PnP, il devrait commencer le chargement comme indiqu? ci-dessus et laisser le syst?me d'exploitation finir la configuration PnP. Autrement, un BIOS-PnP essaiera de configurer le reste des p?riph?riques (mais sans en informer leur pilote). peuvent toujours trouver les informations n?cessaires en utilisant les fonctions disponibles dans le noyau Linux.
Pour voir ce qui se trouve sur le bus PCI, ex?cutez lspci ou lspci -vv. Ou vous pouvez aussi saisir scanpci -v pour la m?me information dans le format de code num?rique o? le p?riph?rique est indiqu? par num?ro (par exemple?: ??device 0x122d??) au lieu du nom, et c?tera. Dans de rares cas, scanpci trouvera un p?riph?rique que lspci n'arrive pas ? trouver.
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.
Linux a eu de s?rieux probl?mes dans le pass? pour la gestion de PnP mais la plupart de ces probl?mes sont maintenant r?solus (vers mi-2004). Linux est parvenu d'un syst?me non PnP ? un syst?me qui peut ?tre PnP si le noyau est compil? avec certaines options. Le BIOS peut affecter des IRQ mais Linux peut aussi affecter certains d'entre eux ou m?me les refaire ce que le BIOS a d?j? fait. La partie de configuration de ACPI (Advance Configuration and Power Interface) est con?u pour faciliter la propre configuration des syst?mes d'exploitation. Linux peut utiliser l'ACPI si le noyau a ?t? compil? avec son support.
Dans Linux, il est traditionnel qu'un pilote de p?riph?rique fasse sa propre configuration de bas niveau. C'?tait difficile jusqu'au moment o? le noyau Linux a fourni le logiciel que les pilotes peuvent utiliser pour se faciliter le travail. Aujourd'hui (2005), c'est arriv? ? un point o? le pilote peut simplement appel? la fonction pci_enable_device() du noyau et o? le p?riph?rique se voit configur? en ?tant activ? et en r?cup?rant une IRQ (si n?cessaire) et les adresses affect?es au p?riph?rique. Cette affectation pourrait ?tre ce qui avait ?t? affect? auparavant par le BIOS ou ce que le noyau avait r?serv? quand le p?riph?rique PCI ou ISAPNP a ?t? d?tect? par le noyau. Il existe m?me une option ACPI pour que le noyau affecte toutes les IRQ des p?riph?riques lors du d?marrage.
Donc aujourd'hui, d'une certaine fa?on, les pilotes font toujours la configuration mais ils peuvent la faire en demandant simplement au noyau de s'en charger (et Linux pourrait ne pas avoir besoin de faire grand chose car il est quelque fois capable d'utiliser ce qui a d?j? ?t? configur? par le BIOS ou par lui-m?me). Donc, c'est vraiment la partie du noyau, hors du pilote, qui fait la grande partie de configuration. Du coup, il pourrait ?tre correct d'appeler Linux un syst?me d'exploitation PnP, au moins pour les architectures communes.
Ensuite, lorsqu'un pilote d?couvre son p?riph?rique, il demande ? conna?tre les adresses et IRQ affect?s (par le BIOS ou par Linux) et, habituellement, les accepte simplement. Mais, si le pilote le souhaite, il peut essayer de modifier les adresses en utilisant les fonctions fournies par le noyau. Cependant, le noyau n'acceptera pas d'adresses entrant en conflit avec d'autres p?riph?riques ou des adresses que le mat?riel ne peut pas supporter. Quand le PC d?marre, vous pouvez noter les messages ? l'?cran montrant que certains pilotes de p?riph?riques Linux ont trouv? leurs p?riph?riques mat?riels et quels sont leurs IRQ et adresses.
Donc, le noyau fournit des fonctions (programmes) que les pilotes peuvent utiliser pour trouver si leur p?riph?rique est pr?sent, la fa?on dont il est configur? et les fonctions qui permettent de modifier la configuration si n?cessaire. Le noyau 2.2 pouvait faire ceci pour le bus PCI seulement mais le noyau 2.4 contient cette fonctionnalit? pour les bus ISA et PCI (? condition que les options PnP et PCI appropri?s ont ?t? s?lectionn?es avant la compilation du noyau). Le noyau 2.6 est arriv? avec une meilleure utilisation de l'ACPI. Ceci ne garantie en rien que tous les pilotes utilisent compl?tement et correctement ces fonctionnalit?s. Les p?riph?riques propri?taires que le BIOS ne connait pas pourraient ne pas ?tre configur?s tant qu'une configuration manuelle ne soit effectu?e.
De plus, le noyau tente d'?viter les conflits d'adresses en ne permettant pas ? deux p?riph?riques d'utiliser les m?me ressources bus en m?me temps. Au d?but, ce n'?tait valable que pour les IRQ et les DMA mais, maintenant, cela s'adresse aussi aux adresses.
Si vous avez un ancien bus ISA, le programme isapnp doit ?tre ex?cut? au d?marrage pour trouver et configurer les p?riph?riques PnP sur le bus ISA. Regardez les messages avec ? dmesg ?.
Pour voir quelle aide le noyau peut apporter aux pilotes de
p?riph?riques, consultez le r?pertoire /usr/…/…/Documentation o? un des
??…?? contient le mot ??kernel-doc?? ou quelque
chose
d'approchant. Attention?: cette documentation a tendance ? ne plus ?tre ?
jour pour avoir les derni?res informations donc vous aurez besoin de lire les
messages des listes de diffusion des d?veloppeurs du noyau et peut-?tre aussi
de lire le code source et les commentaires qu'ils ont ?crits. Dans le r?pertoire
de la documentation du noyau, voir pci.txt (??How to Write Linux
PCI
Drivers??, c'est-?-dire ??Comment ?crire des pilotes
PCI pour
Linux??) ainsi que le fichier
/usr/include/linux/pci.h. Si vous ?tes un gourou des
pilotes et si vous connaissez la programmation en C, ces fichiers sont ?crits
d'une telle fa?on qu'il ne vont pas vous permettre d'?crire un pilote. Mais cela
vous donnera une id?e des fonctions type PnP disponibles pour
les pilotes.
Pour le noyau 2.4, voir isapnp.txt. Pour le noyau
2.6, isapnp.txt est remplac? par
pnp.txt qui est totalement diff?rent et g?re en plus le bus
PCI. Voir aussi le livre d'O'Reilly?: Linux Device Drivers, 3?
?dition, 2005. Le texte complet est disponible sur Internet.
Il existe un certain nombre d'autres points qu'un syst?me d'exploitation PnP devrait mieux g?rer?:
Allouer des ressources bus quand il en existe peu par une r?allocation des ressources si n?cessaire?;
G?rer le choix d'un pilote lorsqu'il en existe plus d'un par p?riph?rique?;
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).
Lorsque l'ordinateur est d?marr?, le BIOS est lanc? avant que le syst?me d'exploitation ne soit charg?. Les BIOS modernes sont PnP et peuvent configurer la plupart des p?riph?riques PnP. Quelques anciens BIOS PCI vont seulement configurer le bus PCI. Voici quelques choix qui pourraient exister dans le menu CMOS de votre BIOS?:
Quelle que soit votre r?ponse au BIOS, le BIOS PnP utilisera PnP pour param?trer le disque dur, le lecteur de disquette, la carte vid?o et le clavier, afin de permettre au syst?me de d?marrer. Si vous dites avoir un syst?me d'exploitation PnP, il laissera la fin de la configuration au syst?me d'exploitation (ou aux pilotes de p?riph?riques). Si vous dites ne pas avoir de syst?me d'exploitation PnP, alors le BIOS devra tout configurer.
Comment r?pondre ? cette question de votre BIOS?? Si vous avez au moins un noyau 2.4, vous pourriez r?pondre ce que vous voulez et Linux fonctionnera habituellement correctement. M?me si vous avez Windows 2000 ou XP sur le m?me PC, cela devrait fonctionner de toute fa?on tout simplement parce que Windows et Linux sont tous les deux ? priori des syst?mes d'exploitation PnP et que si le syst?me d'exploitation est PnP, il devrait ?tre capable de g?rer le cas o? le BIOS a tout configur? lui-m?me (si vous avez r?pondu que le syst?me d'exploitation n'est pas PnP). Mais, je continue ? sugg?rer de r?pondre qu'il n'est pas PnP sauf si une raison valable vous oblige ? faire autrement.
La r?ponse n'est pas souvent claire dans ce cas. Si isapnp ?tait utilis? par Linux, alors Linux fera la configuration et il ?tait indiqu? qu'il est mieux de dire qu'il s'agit d'un syst?me d'exploitation PnP. La raison pour laquelle isapnp aurait des probl?mes en pr?sence de p?riph?riques d?j? configur?s par le BIOS n'est pas claire mais de tels probl?mes arrivent quelquefois et sont corrig?s en stoppant la configuration du BIOS (en r?pondant oui, c'est un syst?me d'exploitation PnP). Il existe quelques cas o? dire non r?solvait un probl?me. Donc, si isapnp n'est pas utilis?, non est g?n?ralement mieux. Les pilotes Linux de p?riph?riques PCI devraient configurer correctement ces p?riph?riques. Mais pour le cas o? les p?riph?riques PCI pilot?s par des pilotes non PCI, alors vous pourriez dire que le syst?me d'exploitation n'est pas PnP pour obtenir du BIOS qu'il les configure directement.
Si vous utilisez aussi des syst?mes d'exploitation Windows sur le m?me PC, vous pourriez dire que vous n'avez pas un syst?me d'exploitation PnP. C'est ce que MS vous sugg?re de faire. Peut-?tre que MS souhaite que le BIOS fasse un meilleur travail pour la configuration que Windows ne le fera. Ceci est sens? parce que le BIOS devrait ?tre con?u pour les particularit?s sp?cifiques de la carte m?re, et tout sp?cialement de nos jours o? beaucoup de p?riph?riques sont int?gr?s ? celle-ci. Dire non devrait aussi ?tre bon pour les noyaux Linux 2.4 et ult?rieurs. Mais pour les noyaux pr?c?dents, ce n'est pas si clair (voir la section ci-dessous). Donc, si vous avez des probl?mes avec Linux, vous pourriez essayer de dire que vous avez un syst?me d'exploitation Linux mais ceci va contre ce que raconte MS (mais fonctionnera probablement bien de toute fa?on).
Lorsque le BIOS configure un p?riph?rique diff?remment de ce qui est stock? dans la base de registres de Windows, celui-ci vous dira qu'il a d?couvert un nouveau mat?riel. Ce qu'il est r?ellement en train de faire est de trouver l'ancien mat?riel qui a ?t? configur? diff?remment. De toute fa?on, il enregistre la configuration que le BIOS a utilis?e dans ses registres et le p?riph?rique devrait bien fonctionner ? partir de ce moment.
Pour Windows9x, MS sugg?re de dire au BIOS que vous avez un syst?me d'exploitation PnP (l'oppos? complet du cas pour Windows 2000 et XP). Ceci devrait ?tre bon pour Linux si vous disposez d'un noyau 2.4 ou ult?rieur. Mais si vous avez un noyau Linux pr?c?dent le 2.4, alors il est mieux pour Linux de dire qu'il ne s'agit pas d'un syst?me d'exploitation PnP. Une fa?on de r?soudre ce dilemme est de le configurer pour le syst?me d'exploitation que vous utilisez le plus fr?quemment. Ensuite, au d?marrage de l'autre syst?me d'exploitation, modifiez manuellement la configuration du BIOS. C'est tr?s ennuyant mais c'est faisable si vous n'utilisez pratiquement jamais l'autre syst?me d'exploitation. Sinon, il existe de meilleurs fa?ons de r?soudre ce dilemme.
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.
Les BIOS modernes vous permettent d'allouer manuellement des ressources, principalement des IRQ. Il existe normalement une option pour configurer l'allocation ? ??auto?? de fa?on ? ce que le BIOS d?cide de l'allocation des ressources. ??Auto?? est souvent un bon choix sauf si vous avez d'anciennes cartes ISA propri?taires non PnP.
Si vous avez de telles cartes non PnP, alors il peut ?tre important de r?server les ressources (telles que les IRQ) pour celles-ci dans le BIOS. Sinon, le BIOS pourrait utiliser ces ressources pour d'autres p?riph?riques et cr?er ainsi des conflits. Une exception concerne quelques p?riph?riques propri?taires communs, comme les ports parall?le et s?ries, les disques durs. Le BIOS pourrait les trouver (jetez un ?il ? l'?cran au d?marrage) pour que vous n'ayez pas besoin de r?server les ressources pour eux. Si vous avez utilis? Windows sur votre PC, Windows pourrait d?j? avoir renseign? le BIOS en utilisant l'outil ICU (ou un outil identique) sous Windows.
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.
C'est aussi un peu risqu?. Ceci va ?craser les donn?es du BIOS contenues dans l'ESCD indiquant la fa?on dont vos p?riph?riques PnP ont ?t? configur?s et comment les p?riph?riques non PnP ont ?t? configur?s manuellement. Ne faites jamais ceci ? moins que vous ne soyez convaincu que la base de donn?es est mauvaise et a besoin d'?tre reconstruite. Il ?tait indiqu? quelque part que vous deviez faire ceci seulement lorsque vous n'arrivez plus ? d?marrer. Si le BIOS perd les donn?es sur les p?riph?riques ISA non PnP, alors vous devrez relancer ICA une nouvelle fois sous DOS/Windows pour r?-enregistrer les donn?es.
De nos jours, pratiquement toutes les nouvelles cartes internes sont Plug-and-Play. Du coup, la configuration des ressources bus devraient ?tre dans la plupart des cas enti?rement automatique. Si un p?riph?rique ne fonctionne pas, v?rifiez s'il a ?t? d?tect?, par exemple en red?marrant. Si le pilote de p?riph?rique ne peut pas configurer les ressources, alors probablement une ou plus des m?thodes du 2.6 le feront?:
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?????.
Les pilotes de p?riph?riques (avec l'aide de fonctions du noyau) peuvent ?tre ?crits pour utiliser des m?thodes PnP pour configurer les ressources bus du mat?riel mais seulement pour le p?riph?rique qu'ils contr?lent. Mais beaucoup de pilotes de p?riph?riques acceptent directement ce que le BIOS ou Linux a configur? et utilise le code fourni par le noyau pour d?couvrir comme ce p?riph?rique a ?t? configur?. Comme le pilote a v?rifi? la configuration et la certainement reconfigur?, il conna?t de fa?on ?vidente la configuration et il n'y a aucun besoin de lui donner cette information. C'est dont la fa?on la plus simple de le faire car vous n'avez rien ? faire si le pilote fait tout.
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??.
Si vous avez un BIOS PnP, il peut configurer le mat?riel. Si le pilote ne peut pas le faire, le BIOS le peut probablement. Ceci veut dire que votre BIOS lit les besoins en ressources de tous les p?riph?riques et les configure (en leur allouant les ressources bus). C'est un substitut pour l'OS PnP sauf que le BIOS ne peut faire correspondre les pilotes avec leur p?riph?riques et ne peut pas non plus indiquer aux pilotes la fa?on dont il a configur? les p?riph?riques. Il devrait normalement utiliser la configuration enregistr?e dans sa m?moire non volatile (ESCD). S'il trouve un nouveau p?riph?rique ou s'il existe un conflit, le BIOS devra effectuer les changements n?cessaires et pourrait ne pas utiliser la m?me configuration que celle de l'ESCD. Dans ce cas, il devra mettre ? jour l'ESCD pour refl?ter la situation.
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.
Le BIOS maintient une base de donn?es non volatile contenant la configuration PnP qu'il essaiera d'utiliser (si vous aviez indiqu? qu'il ne s'agit pas d'un syst?me d'exploitation PnP). Elle s'appelle l'ESCD (acronyme pour Extended System Configuration Data, soit Donn?es pour une Configuration ?tendue du Syst?me). Encore une fois, l'ESCD est optionnel mais la plupart des BIOS PnP en disposent. L'ESCD enregistre non seulement la configuration des ressources pour les p?riph?riques PnP mais aussi celle des p?riph?riques non PnP (et les indique en tant que tels) pour ?viter les conflits. Les donn?es de l'ESCD sont habituellement enregistr?es sur un composant et restent intactes lorsque la machine est arr?t?e, mais c'est parfois stock? sur un disque dur???
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.
?ventuellement, Linux pourrait initialiser l'ESCD. Depuis Linux 2.6, une fonction du nouveau code pourrait le faire si le noyau a ?t? compil? avec PNPBIOS. Mais elle reste pour l'instant inutilis?e.
Si le BIOS ne configure pas l'ESCD de la fa?on souhait?e (ou de la bonne fa?on), alors il serait bien de disposer d'un utilitaire Linux pour le faire. Donc, vous pourriez vouloir utiliser Windows (si vous l'avez sur le m?me PC) pour faire cela.
Il existe trois fa?ons d'utiliser Windows pour tenter de modifier l'ESCD. La premi?re est d'utiliser l'utilitaire ICU pour DOS ou Windows 3.x. Il devrait aussi fonctionner pour Windows 9x/2k??? Une autre fa?on est de configurer les p?riph?riques manuellement (??en for?ant??) sous Windows 9x/2k de fa?on ? ce que Windows enregistre les informations dans l'ESCD lorsque Windows est arr?t? normalement. La troisi?me fa?on est possible uniquement pour les p?riph?riques non PnP. Si Windows conna?t quelque chose sur eux, notamment quelles ressources bus ils utilisent, alors Windows enregistrera cette information dans l'ESCD.
Si les p?riph?riques PnP sont configur?s automatiquement par Windows sans que l'utilisateur ait besoin de forcer cette reconnaissance, alors ces param?trages ne se trouveront probablement pas dans l'ESCD. Bien s?r, Windows pourrait bien d?cider de lui-m?me de configurer ce qui est enregistr? dans l'ESCD, ce qui pourrait aboutir au m?me par co?ncidence.
Windows 9x est un syst?me d'exploitation PnP et configure automatiquement via PnP les p?riph?riques. Il maintient leur propre base de donn?es PnP dans la base de registre (fichiers binaires de Windows). Beaucoup d'autres donn?es de configuration r?sident dans la base de registre en plus des ressources bus PnP. Il y a ? la fois une configuration des ressources PnP actuelles et une autre (peut-?tre la m?me) enregistr?e sur le disque dur. Pour voir ?a avec Windows 98, ou pour forcer l'enregistrement des modifications, utilisez le gestionnaire des p?riph?riques.
Dans Windows 98, il existe deux fa?ons d'arriver au gestionnaire des p?riph?riques?:
1. Poste de travail --> Panneau de configuration --> Syst?me --> Gestionnaire de p?riph?riques
2. (clic droit) Poste de travail --> Propri?t?s --> Gestionnaire de 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.
Si vous ajoutez un nouveau p?riph?rique PnP et avez configur? le BIOS ? ??pas un syst?me d'exploitation PnP??, alors le BIOS devrait automatiquement le configurer et enregistrer la configuration dans l'ESCD. S'il ne s'agit pas d'un p?riph?rique non PnP (ou un utilisant les cavaliers), alors il existe quelques options pour le g?rer.
Vous pouvez indiquer directement au BIOS (via le menu de configuration CMOS) que certaines ressources bus qu'il utilise sont r?serv?es et ne peuvent pas ?tre allou?es avec PnP. Ceci ne met pas cette information dans l'ESCD. Il existe un menu de s?lection du BIOS permettant d'indiquer si les choix CMOS supplantent ceux de l'ESCD en cas de conflit. Une autre m?thode revient ? lancer ICU sous DOS/Windows. Encore une autre permet de l'installer manuellement sous Windows 9x/2k puis de s'assurer que cette configuration est ??forc?e?? (voir la section pr?c?dente). Si elle l'est, Windows devrait mettre ? jour l'ESCD ? l'arr?t du PC.
Les p?riph?riques PCI sont PnP ? la base donc cela ne peut pas ?tre d?sactiv?. Mais quelques p?riph?riques ISA ont des options pour d?sactiver PnP par l'interm?diaire de cavaliers ou en lan?ant un programme Windows fourni avec le p?riph?rique (configuration logicielle). Si le pilote du p?riph?rique ne peut pas le configurer, ceci ?vitera la t?che probablement compliqu?e de la configuration PnP. N'oubliez pas de dire au BIOS que ces ressources bus sont r?serv?es. Mais comme le support de Linux pour le PnP a ?t? am?lior?, vous ne voulez g?n?ralement pas d?sactiver PnP. Voici quelques arguments pour lesquels vous ne voudrez pas d?sactiver PnP?:
Si vous avez Windows sur la m?me machine, alors vous pouvez permettre ? PnP de configurer les p?riph?riques diff?remment entre Windows et Linux.
L'ensemble des choix pour les num?ros d'IRQ (ou ports d'adresse) peut ?tre assez limit? sauf si vous utilisez PnP.
Vous pourriez avoir un pilote de p?riph?rique Linux utilisant des m?thodes PnP pour rechercher le p?riph?rique qu'il contr?le.
Si vous avez besoin de modifier la configuration plus tard, il serait plus facile de faire ceci avec PnP (sans utiliser de cavaliers ou d'avoir ? lancer un programme Dos/Windows).
Une fois vos p?riph?riques configur?s sans PnP, ils ne peuvent plus ?tre configur?s par un logiciel PnP ou par un BIOS PnP (jusqu'? ce que vous changiez les cavaliers ou utilisiez le logiciel de configuration Dos/Windows).
Le programme isapnp est utilis? uniquement pour les
p?riph?riques PnP du bus ISA (donc non
PCI). Il ?tait vraiment n?cessaire avant les noyaux 2.4.
Avec le noyau 2.4, qui a apport? des fonctionnalit?s permettant aux pilotes de
g?rer le PnP sur le bus ISA, le programme
isapnp devient moins important. De plus, le
BIOS pourrait
configurer ISA PnP de mani?re
satisfaisante. Mais, le module isa-pnp (ou
l'?quivalent int?gr? au noyau) est d?j? tr?s satisfaisant car de nombreux
pilotes de p?riph?riques ISA l'appellent pour configurer les
ressources du bus.
Avant le noyau 2.6, cela r?sultait en un ??fichier??
/proc/isapnp pouvant ?tre utilis? pour configurer
manuellement (voir isapnp.txt dans la documentation du noyau).
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.
Le paquetage des utilitaires PCI (pciutils, quelque fois appel? ??pcitools??) vous permet de configurer manuellement via PnP le bus PCI (avec difficult?). lspci ou scanpci liste les ressources bus alors que setpci enregistre les allocations des ressources (sauf les IRQ) dans les p?riph?riques physiques. Il semble que setpci soit principalement utilis? dans des scripts et en fait, vous aurez besoin de comprendre le d?tail des registres de configuration du PCI pour pouvoir l'utiliser. Ce th?me n'est pas expliqu? ici, et pas plus dans la page de manuel de setpci.
Les gens l'ont utilis? pour configurer les p?riph?riques PCI dont le pilote a ?chou? dans cette action. Un exemple est disponible dans le guide pratique sur les modems et le guide pratique sur les ports s?ries dans la sous-section ??PCI?: Activer un port d?sactiv???. N?anmoins, activer un p?riph?rique n'est d'aucune utilit? si vous n'avez pas de pilote fonctionnel pour ce p?riph?rique.
Cette m?thode utilise MS Windows pour configurer et devrait ?tre utilis?e seulement si tout le reste ?choue. Si vous avez Windows 9x (ou 2k) sur le m?me PC, alors lancez simplement Windows et laissez-le configurer PnP. Puis lancez Linux ? partir de Windows (ou DOS) en utilisant, par exemple, loadlin.exe. Il peut y avoir un probl?me avec les IRQ pour les p?riph?riques PCI. Quand Windows s'arr?te (sans messages) pour laisser la place ? Linux, il pourrait ?craser l'IRQ (en y mettant 0) qui est stock? dans un des registres de configuration du p?riph?rique PCI. Linux se plaindra de trouver une IRQ 0.
Ce qu'on vient d'aborder arrive lorsque vous lancez Linux en utilisant un raccourci (fichier PIF). Mais un moyen de contourner ce probl?me est connu si vous utilisez toujours le raccourci PIF. Un raccourci est en quelque sorte l'?quivalent du lien symbolique sous Linux, mais il est en fait plus que ?a car il est param?trable. Pour lancer Linux, ? partir de DOS, vous cr?ez un fichier batch (script) qui lance Linux. (Le programme qui lance Linux est dans le paquet appel? loadlin.) Ensuite, cr?ez un raccourci PIF vers ce fichier batch et allez dans la fen?tre des propri?t?s du raccourci. S?lectionnez ??Avanc???, puis v?rifiez que le ??mode MS-DOS?? est bien coch?.
Maintenant, voici une astuce emp?chant de mettre ? z?ro les
IRQ PCI. Cochez ??Sp?cifier une
nouvelle
configuration MS-DOS??. Ensuite, soit vous acceptez la configuration par
d?faut
qui vous est propos?e soit vous cliquez sur ??Configuration?? pour la
modifier.
Maintenant, lorsque vous lancerez Linux en cliquant sur le raccourci, des
nouveaux fichiers de configurations (config.sys et
autoexec.bat) seront cr??s pour votre nouvelle
configuration.
Les anciens fichiers sont enregistr?s comme
Config.wos et Autoexec.wos. Une fois
que vous avez termin? d'utiliser Linux et que vous avez arr?t? votre PC, vous
aurez encore besoin de ces fichiers pour pouvoir lancer DIS la prochaine fois
que vous d?marrerez votre PC. Vous devez vous assurer que les noms redeviennent
*.sys et *.bat. Lorsque vous quittez
Windows/DOS pour aller sous Linux, Windows s'attend que, une fois que vous avez
fini avec Linux, vous retourniez ? Windows pour que celui-ci puisse restaurer
ces fichiers avec leur noms originaux. Mais ceci n'arrivera pas car lorsque
vous quitterez Linux, vous ?teindrez votre PC et ne retournerez pas sous
Windows. Donc, comment renommer ces fichiers?? C'est facile, placez ces
commandes dans votre fichier batch de lancement de Linux pour qu'il renomme les
fichiers. Mettez ces commandes de renommage dans votre fichier batch juste
avant la ligne qui charge Linux.
De la m?me fa?on, il a ?t? rapport? que vous devez cliquer sur l'onglet ??G?n?ral?? (de la fen?tre ??Propri?t?s?? de votre raccourci) et cochez ??Lecture seule??. Sinon, Windows pourrait remettre ? z?ro les ??Param?trages avanc?es?? en ??Utilisez la configuration MS-DOS courante?? et les IRQ PCI se retrouveraient ? z?ro. Comme Windows efface les IRQ lorsque vous utilisez la configuration MS-DOS courante mais il n'efface pas une nouvelle configuration (qui peut configurer tout de mani?re identique ? l'ancienne configuration). Windows ne semble pas tr?s coh?rent.
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?;
Livre?: Plug and Play System Architecture, par Tom Shanley, Mind Share 1999. D?tails sur PnP pour le bus ISA. Une vue de PnP avec le bus PCI?;
Livre?: Programming Plug and Play, par James Kelsey, Sams 1995. D?tails sur la programmation pour communiquer avec un BIOS PnP. Couvre les bus ISA, PCI et PCMCIA.
Un pilote moderne trouvera pour un p?riph?rique la configuration des ressources bus sans que vous ayez besoin de lui dire quoi que ce soit. Il pourrait m?me enregistrer les ressources bus au niveau mat?riel en utilisant des m?thodes PnP. Certains p?riph?riques ont plus d'une fa?on pour trouver comment leur p?riph?rique physique est configur?. Dans le pire des cas, vous devez coder en dur les ressources bus dans le noyau (ou un module) et recompiler.
En un juste milieu, il existe des cas tels que le lancement d'un programme pour donner les informations des ressources bus au pilote ou pour mettre les informations dans un fichier de configuration. Dans certains cas, le pilote peut chercher le p?riph?rique aux adresses o? il suppose qu'il r?side (mais il ne trouvera jamais un p?riph?rique PnP s'il n'a pas ?t? activ? par des m?thodes PnP). Il peut m?me essayer de tester diff?rentes IRQ pour voir laquelle fonctionne. Il peut, ou non, le faire automatiquement.
Dans d'autres cas, le pilote peut utiliser des m?thodes
PnP pour trouver le p?riph?rique et la fa?on dont les
ressources bus ont ?t? configur?es par le BIOS, et c?tera
mais ne les modifiera pas. Il peut aussi regarder dans certains des
??fichiers?? du r?pertoire /proc.
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 les ports s?ries PCI (et pour les ports s?rie ISA PnP apr?s le noyau 2.4), le pilote s?rie d?tecte le type de port s?rie et le configure via PnP. Malheureusement, quelques ports s?rie PCI ne sont pas encore g?r?s.
Pour le pilote du port s?rie ISA standard avec les anciennes versions du noyau et pour le pilote s?rie (ne faisant pas partie des cartes multiports), le pilote travaille sur deux adresses standards pour les ports s?rie. Il ne cherche pas d'IRQ mais il affecte l'IRQ ??standard?? aux deux premiers ports s?ries. Ceci peut ?tre mauvais.
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.
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 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.8, ??Introduction au bus ISA??
Bus ISA?: Section?7.9, ??Cartes ISA PnP??
Bus ISA?: Section?7.12, ??Cartes non PnP??
Bus ISA?: Section?7.14, ??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 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.
? 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 Section?7.12, ??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.
Chaque p?riph?rique PCI qui a besoin d'une interruption vient avec une interruption PCI fixe qui ne peut pas ?tre modifi?. Elle est d?sign? par un num?ro de slot et une lettre (A, B, C ou D), par exemple 3:B. Mais, cette interruption PCI est redirig?e vers un num?ro d'interruption ISA, comme par exemple 21 pour un composant sur la carte m?re.
Ce routage est r?alis? par un routeur programmable d'interruptions (PIR, acronyme de programmable interrupt router). Autrement, une ligne d'interruption pourrait ?tre rout?e directement (sans aucun PIR). Si un PIR est pr?sent, il peut ?tre programm? par le BIOS ou par Linux. Donc, l'interruption d'un periph?rique PCI peut quelque fois ?tre modifi?e, non pas en envoyant l'interruption sur un fil diff?rent, mais en modifiant le routage d'un envoi sur ce film en programmant le PIR. Quand le routage est modifi?, l'interruption fournie par ce nouveau routage est ?crit dans un registre de configuration situ? dans le composant du p?riph?rique.
Avant l'arriv?e du bus PCI, les PC utilisaient le bus ISA. Ensuite, lors de la transition vers le nouveau bus PCI, les PC utilisaient les bus ISA et PCI. Le bus ISA est fait de telle fa?on que toutes les lignes d'interruption arrivent sur chaque carte, donc toute carte peut modifier son num?ro d'IRQ tout simplement en envoyant son signal d'interruption sur la ligne souhait?e. Tous les signaux d'interruption ?taient envoy?s au contr?leur d'interruption qui envoyait ensuite un signal au processeur pour lui indiquer de stopper temporairement son travail et de lancer le code du pilote pour r?pondre ? l'interruption.
Quand le PCI est apparu, la solution simple ?tait d'?tablir une correspondance entre les interruptions PCI et les interruptions ISA qui n'?taient pas utilis?es. Ceci n?cessite l'utilisation du PIR, routeur programmable d'interruptions. Ce routeur r?alise la correspondance. Comme il n'y avait que 15 interruptions, il ?tait commun de placer plusieurs p?riph?riques PCI sur les quelques interruptions disponibles. R?soudre ce probl?me est simple?: proposer un nouveau mat?riel pour augmenter le nombre d'interruptions. Le r?sultat est l'APIC. Son adoption a ?t? lente car la capacit? du bus PCI ? partager les interruptions a diminu? le probl?me. En fait, l'APIC a ?t? principalement utilis? avec les machines bi-processeurs.
Un APIC peut fournir (suivant le mod?le) 16, 24, 32 ou 64 interruptions, etc. Il peut aussi g?rer le routage d'interruptions d'un processeur vers un autre. Voir le fichier ? IO-APIC ? dans le r?pertoire i386 de la documentation du noyau et le guide pratique sur l'ACPI. Ne confondez pas APIC avec ACPI (Configuration avanc?e et interface pour la gestion d'?nergie) qui peut ?tre utilis? par le noyau pour configurer l'APIC.
Le contr?leur APIC actuel qui est connect? sur les lignes d'interruptions est un APIC I/O (ou IO-APIC ou IOAPIC). En utilisant plus d'un IO-APIC, on peut obtenir plus d'interruptions et elles sont num?rot?es de fa?on ? ?tre uniques. Par exemple, le premier contr?leur peut les num?roter de 0 ? 23 et le second les appelera de 24 ? 47, ce qui donne 48 interruptions num?rot?es de 0 ? 47. Mais certaines personnes ont des num?ros d'interruptions hauts. Se pourrait-il que le deuxi?me IO-APIC commence la num?rotation avec un num?ro de base haut, laissant ainsi beaucoup d'IRQ inexistants.??
En plus des IO-APIC, il existe des APIC locaux (LAPIC) qui font partie de chaque processeur. L'IO-APIC travaille en communiquant avec les LAPIC compris dans les processeurs.
Quand APIC a ?t? introduit, les anciens PIC ISA ?taient aussi conserv?s en laissant le choix d'utiliser ou non l'APIC ou le PIC ISA (qui est quelque fois appel? PIC ou XT-PIC dans /proc/interrupts?; le XT vient du PC XT d'IBM qui ?tait le second mod?le de PC d'IBM en 1983). Il est possible de dire au noyau (sur la ligne de commande du noyau) de ne pas utiliser APIC auquel cas il utilisera le vieux XT-PIC s'il est disponible. Comme l'APIC peut avoir plus d'interruptions que les 15 fournies par XT-PIC, il pourrait y avoir des probl?mes???
Pour savoir si vous utilisez PIC ou APIC, regardez dans /proc/interrupts. Si vous voyez XT-PIC pour l'IRQ 2 seule et IO-APIC pour les autres, cela pourrait signifier que vous avez l'ancien XT-PIC mais qu'il n'est pas actuellement utilis?. En fait, l'IRQ 2 est utilis? pour la communication entre les deux anciens XT-PIC juste au cas o? vous en auriez besoin apr?s avoir d?sactiver l'APIC. Deux XT-PIC sont n?cessaires car chacun supportent seulement huit interruptions.
Un autre nouveau d?veloppement concerne les interruptions signal?es par message (MSI, acronyme de Message Signalled Interrupts (MSI) o? l'interruption est juste un message envoy? ? une adresse sp?ciale sur le bus principal de l'ordinateur (pas de ligne d'interruption n?cessaire). Mais le p?riph?rique qui envoie un tel message doit tout d'abord obtenir le contr?le du bus principal de fa?on ? ce qu'il puisse envoyer le message d'interruption. Un tel message contient plus d'informations que ??J'envoie une interruption??. Il contient un index pour l'adresse du programme qui a besoin d'?tre ex?cut? pour remplir la mission de l'IRQ. Ce nombre, par exemple 3, signifie que le processeur trouve l'adresse ? laquelle il doit se rendre dans le troisi?me ?l?ment d'une table sp?ciale connue du processeur.
Comme le mat?riel du p?riph?rique doit conna?tre MSI pour que le p?riph?rique utilise MSI, il est fr?quent que certains p?riph?riques utilisent MSI alors que d'autres utilisent les interruptions traditionnelles. Since for a device to use MSI the device hardware must support MSI, Les m?thodes conventionnelles du support mat?riel des interruptions (appel?es INTx) seront donc certainement pr?sentes pendant longtemps encore. Les MSI ont des num?ros d'interruption comme les interruptions INTx mais ces nombres sont souvent trop grands pour ?viter toute r?utilisation des nombres des interruptions INTx.
Les interruptions PCI peuvent ?tre partag?es, signifiant que deux p?riph?riques voire plus utilisent la m?me IRQ. C'est faisable, il est g?n?ralement pr?f?rable de ne pas les partager. Le partage ne fonctionne pas bien pour les tr?s anciens mat?riels PCI (avant 1995??) et pour les mat?riels PCI d?fectueux d?s l'usine (ils ont ?t? cr??s ainsi). Par exemple, si un p?riph?rique PCI sur l'IRQ 9 r?clamait par erreur que toute IRQ 9 ?tait pour lui, alors les autres p?riph?riques utilisant l'IRQ 9 verraient toutes leurs demandes d'interruption ignor?es. Sans partage, ce probl?me est ?vit?.
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.
Certaines informations sont fournies par les messages au d?marrage. Elles sont visibles gr?ce ? l'outil ??dmesg??. Les fa?ons de rechercher les tables impliquent du logiciel que vous pourriez ne pas avoir (ou qui n'existe pas encore). Pour v?rifier le routage qu'effectue PCI vers les 16 interruptions ISA, utiliser ??pirtool?? qui affiche la table de routage $PIR. Si vous avez un APIC avec un routage en dur (pas de PIR), utiliser ??mptable?? pour rechercher dans la table MP. Pour un APIC routable, des m?thodes ACPI _PRT sont utilisables pour acc?der ? une table (mais je ne sais pas si un outil en ligne de commande existe pour cela??)
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" ?.
Voici quelques d?tails sur le syst?me d'interruptions PCI. Chaque carte PCI (et les p?riph?riques mont?s sur la carte-m?re) a quatre interruptions possibles?: INTA#, INTB#, INTC#, INTD#. ? partir de maintenant, nous les appelerons simplement A, B, C et D. Chacune a sa propre broche sur le connecteur d'une carte PCI. Donc, pour un syst?me comprenant sept emplacements (pour sept cartes), il pourrait y avoir 28 (7 x 4) diff?rentes lignes d'interruption pour ces cartes. Les p?riph?riques int?gr?s ? la carte-m?re ont aussi des interruptions suppl?mentaires. Mais les sp?cifications permettent un nombre plus r?duit de lignes d'interruption, donc certains bus PCI semblent n'avoir que quatre ou huit lignes d'interruption. Ceci n'est pas trop restrictif car les interruptions pourraient ?tre partag?es. Pour une ligne ? quatre interruptions (LNKA, LNKB, LNKC, LNKD), il y a un composant appel? ??routeur programmable d'interruptions?? qui redirige LNKA, LNKB, LNKC, LNKD vers les IRQ s?lectionn?es. Ce routage peut ?tre modifi? par le BIOS ou par Linux. Par exemple, LNKA peut ?tre rout? vers l'IRQ 5. Supposons que nous d?signons l'interruption B de l'emplacement 3 comme l'interruption 3B. Les interruptions 3B et 2A pourraient ?tre connect?es de fa?on permanente ? LNKA qui est rout? vers l'IRQ 5. Ces deux interruptions, 3B et 2A, sont partag?es en permanence par le cablage sur la carte-m?re.
Saisir dmesg sur la ligne de commande permet de voir comment les lignes d'interruption style LNKA sont redirig?es (ou rout?es) vers les IRQ (*5 signifie que c'est li? ? l'IRQ 5). Recherchez PCI Interrupt Link. Notez que ??link?? est utilis? ici avec deux significations?: 1. le lien (routage) des lignes d'interruptions PCI vers les les IRQ, 2. le label d'une ligne d'interruption comme LNKB (lien B). Les labels de la ligne d'interruption semblent ?tre fournis par le BIOS (??) et pourraient avoir des noms diff?rents comme?: LNKC, LNK2, APCF, LUBA, LIDE, et c?tera. Question?: quand un grand nombre de lignes d'interruption sont affich?es comme ?tant d?sactiv?es, existent-elles toutes physiquement sur la carte-m?re?? ou existent-elles seulement dans la partie ACPI du BIOS pour que ce dernier puisse fonctionner avec les cartes-m?res qui ont un grand nombre de lignes d'interruption??
Connecter toutes les interruptions A (INTA#) ? la ligne LNKA, toutes les B ? la ligne LNKB, et c?tera. est une m?thode simple pour connecter en dur ces lignes des p?riph?riques PCI (comme le 3B) aux interruptions LNKA, et c?tera. Cette m?thode a ?t? utilis?e une fois plusieurs ann?es auparavarant mais ce n'est pas la bonne solution. Voici pourquoi. Si une carte a seulement besoin d'une interruption, elle doit utiliser A. Si elle a besoin de deux interruptions, elle doit utiliser A et B. Du coup, INTA# est utilis? bien plus fr?quemment que INTD#. Donc, on va se trouver avec un nombre excessif d'interruptions partageant la premi?re ligne (LNKA connect? ? toutes les INTA#). Pour d?passer ce probl?me, il vaut mieux les connecter de fa?on al?atoire pour que chacune des quatre lignes d'interruptions (LNKA, LNKB, LNKC, LNKD) partagent ? peu pr?s le m?me nombre d'interruptions PCI.
Une fa?on de le faire est de lier en dur LNKA avec les interruptions 1A, 2B, 3C, 4D, 5A, 6B, 7C. Ceci se fait en connectant physiquement le fil W aux fils 1A, 2B, et c?tera. De la m?me fa?on, le fil LNKB pourrait ?tre connect? aux fils 1B, 2C, 3D, 4A, 5B, 6C, 7D, et c?tera. Puis, au d?marrage, le BIOS dirige les LNKB, LNKA, LNKC, LNKD aux IRQ. Apr?s cela, il ?crit l'IRQ que chaque p?riph?rique utilise dans un registre de configuration du mat?riel dans chaque p?riph?rique. ? partir de maintenant, tout programme interrogeant ce registre peut savoir l'IRQ utilis?e par le p?riph?rique. Notez qu'?crire simplement l'IRQ dans un registre sur une carte PCI ne configure en aucun cas l'IRQ pour ce p?riph?rique.
Une utilisation pratique de cette information est qu'en dernier ressort, une personne pourrait modifier les IRQ d'une carte PCI en l'ins?rant dans un emplacement diff?rent. Dans l'exemple ci-dessus, INTA# d'une carte PCI sera connect? au fil LNKA si la carte est ins?r?e dans l'emplacement 1 (1A correspond ? LNKA) mais INTA# sera connect? au fil LNKB si elle est ins?r?e dans l'emplacement 4 (4A correspond ? LNKB).
Une carte dans un emplacement pourrait avoir jusqu'? huit p?riph?riques mais il n'y a que quatre interruptions PCI pour elle (A, B, C, D). Cela suffit car les interruptions pourraient ?tre partag?es pour que chacun des huit p?riph?riques (s'ils existent) puisse avoir une interruption partag?e. La lettre de l'interruption PCI d'un p?riph?rique est souvent fix?e et cod?e en dur dans le p?riph?rique. L'affectation des interruptions est r?alis?e par soit le BIOS ou par Linux, ?tablissant une correspondance entre les interruptions PCI et les interruptions ISA comme mentionn? ci-dessus.
S'il n'existe que quatre lignes (LNKA, LNKB, LNKC, and LNKD) comme dans l'exemple ci-dessus, les choix de correspondance pour le BIOS sont limit?s. Certaines cartes-m?re peuvent utiliser plus de lignes et ont donc plus de choix. Par exemple, de LNKA ? LNKH (8 lignes). Les messages au d?marrage (dmesg) peuvent les afficher et indiquer leur correspondance. Le BIOS sait comment elles sont c?bl?es.
Sur le bus PCI, le BIOS (ou Linux) affecte des IRQ (interruptions) de fa?on ? ?viter les conflits avec les IRQ qu'il sait affect?s au bus ISA. Quelque fois, le menu du CMOS du BIOS peut vous autoriser ? affecter des IRQ aux cartes PCI ou indiquer au BIOS les IRQ r?serv?es aux p?riph?riques ISA. Les affectations sont connues sous le nom d'une table de routage. Sous MS WIndows, c'est appel? IRQ steering mais cela couvre aussi le cas d'un routage dynamique des IRQ apr?s le d?marrage. Le BIOS peut supporter son propre IRQ steering.
Si votre PC utilise les interruptions PCI qui sont renvoy?es vers des interruptions ISA, vous auriez le droit de penser que les interruptions seront lentes ?tant donn? que le bus ISA ?tait lent. Pas vraiment. Le composant de contr?le des interruptions ISA a un fil d'interruption direct le reliant au CPU pour qu'il obtienne une attention imm?diate. Bien que les signaux sur les bus d'adresses et de donn?es de l'ancien ISA sont lents pour arriver au CPU, les signaux d'interruptions y arrivent rapidement.
L'USB (Universal Serial Bus, c'est-?-dire Bus Universel S?rie) est un bus ? grande vitesse sur un c?ble externe qui se connecte au PC. Le bus externe a ses propres protocoles de communication et n'utilise pas les IRQ, adresses d'entr?es/sorties (ou tout autre ressource bus) sur les c?bles bus externes. La communication se fait par paquets comme sur Internet, seulement sur des allocations de tranches de temps, ce qui emp?che un p?riph?rique de manger le bus si d'autres p?riph?riques en ont besoin. Il existe des tranches de temps libre qui permettent ? tout p?riph?rique d'envoyer un message court au contr?leur de bus sans avoir besoin des IRQ sur le bus.
N?anmoins, le contr?leur de bus USB int?gr? au PC a une IRQ et une adresse sur le bus PCI (ou ISA), utilis?es pour la communication entre le CPU et tous les p?riph?riques USB. Donc, il n'y a pas d'allocations de ressources n?cessaires pour les p?riph?riques individuels sur le bus USB. Vous pouvez aussi imaginer que tous les p?riph?riques sur le bus USB partagent la m?me interruption et la m?me adresse. Si un p?riph?rique est sur l'USB, il a besoin d'un pilote qui comprenne l'USB.
Mais, chaque p?riph?rique USB a un identifiant, comme les cartes du bus PCI. Linux maintient donc une table des identifiants de fa?on ? ce que les pilotes de p?riph?rique puissent les v?rifier et trouver ainsi leur p?riph?rique. L'USB supporte aussi le ??hot plug??. Pour trouver ce qui est plac? sur le bus USB, vous pouvez utiliser un outil g?n?raliste de d?tection de mat?riel comme discover ou hwinfo.
??Hot plug?? correspond ? la connexion d'un p?riph?rique sur un PC (habituellement avec un c?ble) et ? sa d?tection imm?diate. Si n?cessaire, il est configur? avec les ressources bus. Son pilote est aussi lanc?, peut-?tre en chargeant le module correspondant. Pour que ceci fonctionne, le mat?riel utilis? doit ?tre con?u de fa?on appropri?. Vous pouvez utiliser cette fonctionnalit? avec certaines cartes PCI (Cardbus), p?riph?riques USB et IEEE 1394 (Firewire).
Lorsqu'un nouveau p?riph?rique est d?tect?, ses registres sont lus de fa?on ? r?cup?rer un num?ro d'identifiant du p?riph?rique. Pour trouver un pilote, Linux doit maintenir une table r?alisant la correspondance entre num?ro de p?riph?rique et pilote. Cette table existe dans le noyau depuis la version 2.4. Elle est nomm?e MODULE_DEVICE_TABLE.
??Hot Swap?? vous permet de remplacer un ancien p?riph?rique en l'enlevant et en branchant le nouveau. Vous avez donc interverti (swapped) les p?riph?riques. Maintenant, en plus d'?tre capable de d?tecter le branchement d'un nouveau p?riph?rique, la suppression d'un ancien p?riph?rique doit aussi ?tre d?tect?e.
Les p?riph?riques externes connect?s par le port s?rie via un c?ble (comme les modems externes) sont aussi appel? Plug-and-Play. Comme seul le port s?rie a besoin de ressources bus (une IRQ et une adresse d'entr?es/sorties), il n'y a pas de ressources bus ? allouer pour ces p?riph?riques. Dans ce cas, PnP est utilis? uniquement pour l'identification du modem (lire le num?ro/code du mod?le). Ceci est important dans le cas o? ce modem est un modem logiciel (linmodem) et requiert un pilote sp?cifique. Il existe une sp?cification PnP pour de tels p?riph?riques s?ries externes (quelque chose connect? au port s?rie).
Linux ne supporte pas encore ceci?? Pour un modem mat?riel, le pilote s?rie ordinaire suffira, donc il n'y a pas besoin de chercher un pilote avec serialpnp. Vous devez toujours indiquer au programme de communication sur quel port se trouve le modem. Avec PnP, vous n'auriez m?me pas besoin de faire ?a. Avec l'arriv?e des modems logiciels disposant de pilotes Linux (linmodem), il serait bien que les pilotes appropri?s s'installent automatiquement via PnP.
Ceci signifie qu'une interruption est survenue alors qu'aucun pilote ne l'attendait. Il est improbable que le mat?riel ait g?n?r? une interruption par erreur. Il est plus probable que le logiciel comporte un petit bogue et n'a pas r?alis? qu'un logiciel a fait quelque chose qui a g?n?r? cette interruption. Dans la plupart des cas, vous pouvez ignorer ce message en toute s?curit?, et tout particuli?rement si cela n'est arriv? qu'une ou deux fois lors du d?marrage. Pour les messages du d?marrage, regardez les messages qui lui sont proches pour trouver une indication sur ce qui s'est pass?. Par exemple, si une recherche ?tait en cours, il est possible que cela ait activ? un p?riph?rique physique qui en retour a g?n?r? une interruption, interruption que le pilote n'attendait pas. Le pilote n'?coutait peut-?tre pas le bon num?ro d'IRQ.
Le BIOS a ?t? incapable de configurer les ressources bus. Il peut exister un conflit d'interruptions qui ne peut ?tre ?vit?. Dell vous sugg?re que vous enleviez certaines des cartes non essentielles pour voir si le probl?me dispara?t. Dans un cas, le probl?me ?tait d? ? une carte m?re d?fectueuse.
Si vous utilisez isa-pnp, l'adresse d'entr?es/sorties 0xa79 ne doit jamais ?tre utilis?e par un p?riph?rique, quel qu'il soit. Donc, si un autre mat?riel utilise 0xa79 lorsque vous essayez de charger le module isa-pnp, vous obtiendrez ce message dans vos journaux de trace et isa-pnp quittera. Une fa?on de corriger cela est de charger le module isa-pnp bien plus t?t avant que tout autre mat?riel ne soit initialis?. Pour le PCMCIA, ceci impose de charger isa-pnp avant de lancer les modules cb et le service associ?.
Ici, ??r?gion?? signifie un ensemble d'adresses. Un p?riph?rique PCI qui a besoin de deux r?gions aura la r?gion 0 comme premi?re adresse et la r?gion 1 pour deuxi?me adresse. Utilisez la commande lspci --v pour voir les diff?rentes r?gions de ressources (souvent appel? r?gions) et si l'adresse est de type entr?e/sortie ou m?moire. Dans le jargon PCI, la r?gion 2 est l'??adresse de base 2?? (ou ??registre d'adresse de base 2??), et c?tera.
Quand deux p?riph?riques ou plus utilisent la m?me ligne d'interruption, (et le m?me num?ro d'IRQ), il s'agit soit d'un ??partage d'interruption?? soit d'un ??conflit d'interruption??. Le bus PCI autorise tous les p?riph?riques PCI ? partager des interruptions avec les autres, ce qui est appel? le partage. Mais si un p?riph?rique ISA (ou un p?riph?rique LPC???) utilise la m?me interruption (IRQ) qu'un autre p?riph?rique (PCI, ISA ou LPC???), il y habituellement un conflit d'interruption.
Il existe des exceptions. Certains p?riph?riques PCI tr?s anciens (pr?-1995) ne permettent pas le partage d'interruption. ? contrario, quelques p?riph?riques ISA ont ?t? con?us pour partager les interruptions (entre deux p?riph?riques ISA??) mais ces deux p?riph?riques ISA doivent ?tre con?us de cette fa?on et ?tre pilot?s par du logiciel au courant du partage des interruptions. La carte-m?re doit aussi le supporter. La discussion suivante se rapporte aux PC qui ont un bus ISA.
Un conflit signifie que, quand une interruption survient, aucun pilote de p?riph?rique (ou le mauvais) ne sera appel?. Cela peut aboutir ? de mauvaises actions comme des d?passements de tampon (perte de donn?es). Un p?riph?rique peut presque immobiliser sa ligne d'interruption quand il n'envoie pas son interruption, et de ce fait emp?cher tout autre dispositif d'employer cette ligne d'interruption. Cela ne pose pas de probl?me seulement si seul ce p?riph?rique utilise cette interruption mais si un deuxi?me p?riph?rique essaie d'utiliser la m?me ligne d'interruption, il ne pourra plus le faire. Si ce second p?riph?rique immobilise aussi la ligne lorsqu'il n'envoyait pas d'interruption, alors aucun des deux p?riph?riques ne peut utiliser l'interruption. Linux et les deux p?riph?riques sont inconscients de ce conflit et continuent ? envoyer les interruptions qui vont nul part et sont donc perdus.
Les conflits d'interruptions ?taient communs quand les IRQ ?taient configur?es gr?ce ? des cavaliers sur les cartes (bus ISA), souvent parce que le noyau ne connaissait pas la configuration de ces cavaliers. Le Plug-and-Play ISA (aucun cavalier) a beaucoup aid? car le logiciel pouvait modifier les IRQ. L'abandon d'ISA en faveur du PCI a pratiquement ?limin? les conflits IRQ. Malgr? tout, votre PC peut toujours avoir des p?riph?riques sur la carte-m?re (pas sur une carte fille) sur un bus ISA, LPC ou X. Mais le BIOS et le noyau devraient savoir comment les configurer et donc ?viter de les utiliser pour les p?riph?riques PCI, ?vitant ainsi les conflits d'interruption. Mais il existe toujours un probl?me avec PCI car il peut manquer d'interruptions disponibles, tout sp?cialement sur les anciens PC qui ont seulement 16 interruptions.
Mais, bien qu'ayant ?limin? le probl?me des conflits, le partage d'IRQ sur le bus PCI a introduit un nouveau probl?me qui est moins s?rieux, le probl?me d'?quilibre des IRQ. Si des p?riph?riques utilisant beaucoup les interruptions partagent la m?me IRQ, cela pourrait amener des d?lais dans la r?cup?ration des IRQ et pourrait m?me amener ? des d?passements de tampon et d'autres erreurs. Ceci n'est pas d? ? la fa?on dont le logiciel d?termine le p?riph?rique qui a lanc? cette interruption.
Il existe deux types de conflits d'interruptions. Le premier est un vrai conflit, celui d?crit ci-dessus. Dans ce cas, les interruptions ne fonctionnent plus et le pilote de p?riph?rique continue d'essayer de contr?ler son p?riph?rique et ne sait pas que les interruptions ne fonctionnent pas. Le second type de conflit d'interruption arrive quand un pilote de p?riph?rique est lanc? mais d?couvre que l'interruption dont il a besoin est d?j? utilis?. Il affiche un message d'erreur et quitte. Le message indique quelque chose comme ? ressource en cours d'utilisation ? (? ressource busy ?) mais ne pr?cise pas clairement qu'il s'agit d'un probl?me d'interruption.
Le BIOS et le noyau ne vont pas permettre un conflit d'interruptions en connaissance de cause. Alors comment cela peut-il arriver?? Une fa?on d'y parvenir arrive quand quelqu'un a indiqu? un mauvais IRQ dans un fichier de configuration, par exemple en donnant un param?tre ? irq=9 ? ? un module. Dans cet exemple, supposons que l'IRQ du p?riph?rique est r?ellement le 5. Quand un autre pilote de p?riph?rique se lance et trouve son p?riph?rique ? l'IRQ 5, vous avez deux vrai p?riph?riques utilisant la m?me IRQ, ce qui aboutit ? un vrai conflit. Le noyau a approuv? l'utilisation de l'IRQ 5 par le second p?riph?rique car il a ?t? tromp? et pensait que le premier p?riph?rique ?tait sur l'IRQ 9.
Il existe d'autres cas o? le noyau ne sait pas qu'une IRQ est utilis?e. Par exemple quand une ancienne carte ISA est configur? par un cavalier mais que son pilote n'est pas encore lanc? (il peut m?me ne pas voir de pilote). Un autre cas, le BIOS configure un IRQ au niveau mat?riel mais aucun pilote Linux n'est lanc? pour ce mat?riel. Linux ne conna?tra donc pas cette IRQ. Ceci peut m?me arriver pour une carte PCI, celle-ci s'affichera avec la commande lspci -v mais ne sera pas disponible dans le r?pertoire /proc/interrupts et n'est donc pas connue par le noyau. Est-ce un bogue du noyau??
Quels sont les sympt?mes d'un conflit d'interruption?? On pourrait penser que les p?riph?riques ne fonctionnent pas du tout mais comme les adresses sont connues, le pilote peut communiquer. Les interruptions sont souvent utilis?es pour contr?ler le flux de donn?es provenant et allant au p?riph?rique. Sans les interruptions, le flux n'est pas contr?l?, ce qui signifie des d?passements de tampon, voire m?me pas de flux du tout, les interruptions pouvant aussi ?tre utilis?es pour initier le flux. Pour un modem s?rie, le r?sultat est un flux extr?mement lent avec de longues pauses et des erreurs fr?quentes. Pour une carte son, cela pourrait signifier qu'un mot ou deux sont entendus, puis plus rien.
Ceci arrive quand un pilote de p?riph?rique est lanc? mais quitte imm?diatement pour ?viter un conflit d'interruption. G?n?ralement, il affiche un message d'erreur comme ? ressource en cours d'utilisation ? ou l'enregistre dans un journal de trace.
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.
C'est en quelque sorte un r?seau Plug-and-Play d?velopp? par Microsoft mais utilisable sous Linux. Vous connectez quelque chose sur un r?seau et ce quelque chose n'a pas besoin d'?tre configur? mais ne va communiquer qu'avec des p?riph?riques UPnP du r?seau. Ici, ??configurer?? est utilis? dans le sens large et ne signifie pas simplement configurer les ressources bus. Un des objectifs est de permettre au gens connaissant peu de choses sur les r?seaux ou sur la configuration et l'installation d'un routeur, d'une passerelle, d'une imprimante r?seau, et c?tera de le faire. Une utilisation majeure de UPnP serait dans les r?seaux sans-fil.
UPnP utilise?:
un protocole de d?couverte des services (Simple Service Discovery Protocol) pour trouver les p?riph?riques,
une architecture de notification g?n?rale d'?v?nements (General Event Notification Architecture),
un protocole d'acc?s aux objets (Simple Object Access Protocol) pour assurer le contr?le des p?riph?riques.
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)??.
Le terme ??adresse?? est quelque fois utilis? dans ce document
pour
signifier un ensemble contigu d'adresses. Les adresses sont en unit? d'octets.
Donc, par exemple, un port s?rie sur l'espace d'adressage 3F8-3FF sera souvent
juste r?f?renc? par son adresse de base, 3F8. 3F8 est l'emplacement du premier
octet de la plage (espace d'adressage). Pour visualiser les espaces d'adressage,
jetez un ?il ? /proc/iomem et
/proc/ioports.
Pour acc?der ? la fois aux espaces d'adresses m?moire principale et d'entr?es/sorties, le m?me bus d'adresses est utilis? (les fils utilis?s pour l'adresse sont partag?s). Comment le p?riph?rique sait-il si l'adresse apparaissant sur le bus est une adresse m?moire ou d'entr?es/sorties?? En fait, pour l'ISA (pour le PCI, lisez aussi ceci), il existe quatre fils d?di?s sur le bus qui am?nent ce type d'informations. Si un de ces quatre fils est ??activ???, cela indique que le CPU veut lire une adresse d'entr?es/sorties et la m?moire principale ignore l'adresse sur le bus. En tout, les fils de lecture et ?criture existent ? la fois pour les adresses de m?moire principale et pour les adresses d'entr?es/sorties (quatre fils en tout).
Pour le bus PCI, il s'agit de la m?me id?e de base (utilisant aussi quatre fils) mais r?alis?e un peu diff?remment. Au lieu d'avoir un seul des quatre fils activ?, un nombre binaire est plac? sur les fils (d'o? 16 possibilit?s diff?rentes). Donc, il est possible de v?hiculer plus d'informations sur ces quatres fils. Quatre de ces 16 nombres sont utilis?s pour les espaces en m?moire principale et d'entr?es/sorties comme indiqu? dans le paragraphe ci-dessus. En plus, il existe aussi un espace d'adressage de configuration qui utilise plus de deux chiffres suppl?mentaires. Cela laisse dix autres nombres disponibles pour d'autres utilisations.
Ceci est diff?rent des espaces d'adresses m?moire et d'entr?es/sorties parce que l'espace d'adresses de configuration est ??g?ographique??. Chaque emplacement d'une carte a un num?ro d'emplacement faisant parti de l'adresse. De cette fa?on, Linux (ou le BIOS) peut adresser un certain emplacement et trouver le type de carte fich? dans cet emplacement. Chaque p?riph?rique a des registres standards de 64 bits et quelques uns d'entre eux contiennent des num?ros qui peuvent identifier de fa?on non ambigu? le p?riph?rique. Comme le nombre d'emplacements est limit? comme le sont le nombre de p?riph?riques PCI construit dans la carte m?re, Linux (ou le BIOS) a besoin de v?rifier un nombre limit? d'adresses pour trouver tous les p?riph?riques PCI. S'il ne lit que des uns (0xFF en hexad?cimal) ? partir du premier registre d'un p?riph?rique, alors cela signifie qu'aucun p?riph?rique n'est pr?sent. Comme il n'y a aucune carte ou p?riph?rique fournissant tous les num?ros un (0xFF), le ??host bridge?? PCI sur la carte m?re fournit ce num?ro pour tous les p?riph?riques inexistants.
Le num?ro d'emplacement PCI est appel? (dans le jargon PCI le num?ro de p?riph?rique et comme une carte peut avoir au plus huit p?riph?riques sur elle, un num?ro de fonction (allant de 0 ? 7) identifie le p?riph?rique qui se trouve sur une carte PCI. Ces num?ros font partie de l'adresse g?ographique. Les d?veloppeurs Linux l'appellent pci-slot-name. Du coup, ce que Linux appelle un p?riph?rique est en fait une fonction dans le jargon PCI. Le num?ro du bus PCI (souvent 00) devient aussi une partie de l'adresse g?ographique. Par exemple, 0000:00:0d.2 correspond au bus PCI 0, emplacement 0, fonction 2. Pour l'adresse g?ographique compl?te, vous devez inclure le num?ro sur deux mots des registres de configuration du p?riph?rique auquel on veut l'acc?s. Les 0000 en t?te (en 1999) ?taient r?serv?s pour une utilisation future.
Comment le processeur d?signe-t-il qu'une lecture ou une ?criture doit se faire dans l'espace de configuration PCI?? Il ne le fait pas, en tout cas pas directement. ? la place lorsque l'acc?s ? l'espace de configuration est d?sir?, il fait une ?criture sur 32 bits (un mot double) pour ?crire 0cf8-0cfb en espace d'entr?es/sorties et ?crit l'adresse g?ographique compl?te ici. Le host bridge PCI ?coute ? cette adresse et nous assure que la prochaine ?criture de donn?es sera 0cfc-0cff. C'est enregistr? dans des registres de configuration du p?riph?rique sp?cifi?. Le pont fait les deux en envoyant un signal sp?cial ? la carte PCI sp?cifi?e (ou ce qui y ressemble) sur un fil d?di? qui va seulement ? l'emplacement o? la carte est connect?e. Il place aussi des bits sur le bus de contr?le indiquant que ce qui est sur le bus d'adresse maintenant est une adresse g?ographique de l'espace de configuration.
Pourquoi ne pas faire simple et demander simplement au processeur de placer les bits sur le bus de contr?le pour indiquer que l'adresse sur le bus principal est une adresse g?ographique pour la configuration du PCI?? Et bien, la plupart des processeurs ne sont pas capables de le faire donc le ??host bridge?? PCI le fait ? la place.
Sur le bus ISA, il existe une m?thode int?gr?e dans chaque carte PnP pour v?rifier qu'aucune autre carte n'utilise la m?me adresse d'entr?es/sorties. Si deux cartes ou plus utilisent la m?me adresse d'entr?es/sorties, les cartes ont peu de chance de fonctionner correctement (voire de fonctionner tout court). Un bon logiciel PnP devrait allouer les ressources bus de mani?re ? ?viter ce conflit, mais m?me dans ce cas, une carte non PnP pourrait avoir la m?me adresse.
Le test fonctionne par une carte pla?ant un nombre de test connu dans ses propres registres d'entr?es/sorties. Puis, le logiciel PnP le lit et v?rifie que ce qu'il lit correspond bien au num?ro de test connu. Il r?p?te le m?me test avec un autre num?ro. Comme il v?rifie l'ensemble des adresses d'entr?es/sorties allou?es ? la carte, il est appel? un v?rificateur de plage. Il pourrait ?tre appel? plus logiquement un testeur de conflit d'adresses. Si un conflit est d?tect?, vous obtenez un message d'erreur.
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 adresses sont aussi connues comme les ??ports d'auto-configuration??. Pour le bus ISA, il n'existe pas techniquement de plage d'adresses de configuration, mais le CPU utilise une fa?on sp?ciale d'acc?der aux registres de configuration PnP sur les cartes PnP. Dans ce but, trois adresses d'entr?es/sorties sont allou?es et chacune adresse un seul octet (il n'y a pas ? proprement parler d'espace ou de plage). Il ne s'agit pas de trois adresses pour chaque carte mais de trois adresses partag?es par toutes les cartes ISA-PnP.
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.
Il a ?t? dit pr?c?demment qu'il existe un fil pour chaque interruption. Mais l'interruption s?rialis?e (ou interruption s?rie) est une exception. Un seul fil est utilis? pour toutes les interruptions qui sont multiplex?es sur ce fil. Chaque interruption a un cr?neau horaire sur la ligne d'interruption. Il est utilis? sur le bus LPC mais aussi sur le bus PCI bien que cela soit plus rare pour ce dernier??
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??.
Il existe aussi un autre type d'interruption nomm?e ??interruption logicielle??, non couverte par ce guide pratique et n'utilisant pas de ressources. Alors qu'une interruption mat?rielle est g?n?r?e par le mat?riel, une interruption logicielle est initi?e par le logiciel. Il existe plusieurs fa?ons pour ce faire. Une fa?on est que le logiciel dise au processeur d'ex?cuter une interruption (une instruction d'interruption). Une autre fa?on consiste, pour le logiciel, ? envoyer des messages aux autres processus pour les interrompre m?me s'il n'est pas clair qu'on puisse appeler ?a une interruption. Le processus ksoftirq process, que vous pouvez trouver dans la liste des processus sur un PC Linux, est un programme qui lance ce type d'interruption pour g?rer les pilotes de p?riph?riques. Le pilote de p?riph?rique commence ? s'ex?cuter ? cause d'une interruption mat?rielle mais, plus tard, des interruptions logicielles sont utilis?es pour la deuxi?me moiti? de la routine d'interruption du pilote. Donc, le processus ksoftirq est aussi connu comme la ??seconde moiti???. Pour plus de d?tails, voir la documentation du noyau.
Les interruptions am?nent beaucoup d'informations mais seulement indirectement. Le signal de demande d'interruption (un voltage sur un fil) envoy? par un mat?riel indique seulement au composant, appel? le contr?leur d'interruption, qu'un certain p?riph?rique demande l'attention. Le contr?leur d'interruption envoie le signal au CPU. Le CPU s'interrompt dans ce qu'il faisait, trouve le pilote de ce p?riph?rique et ex?cute une partie de celui-ci nomm?e ??routine d'interruption?? (ou ??gestionnaire d'interruption??). Cette ??routine?? essaie de trouver ce qui est arriv? et g?re ensuite le probl?me. Par exemple, le p?riph?rique peut avoir besoin d'envoyer/recevoir des octets. Ce programme (cette routine) peut facilement comprendre ce qui s'est pass? car le p?riph?rique dispose de registres disponibles sur des adresses connues par le pilote (? condition que le num?ro d'IRQ et que les adresses d'entr?es/sorties soient correctement configur?s). Ces registres contiennent l'?tat du p?riph?rique. Le logiciel lit le contenu de ces registres et en inspectant le contenu, trouve ce qui est arriv? et r?alise l'action appropri?e.
Donc, chaque pilote de p?riph?rique a besoin de savoir le num?ro d'interruption (IRQ) o? ?couter. Sur le bus PCI (et dans certains cas sp?ciaux, sur le bus ISA), il est possible que deux (voire plus) p?riph?riques partagent le m?me num?ro d'IRQ. Notez que vous ne pouvez pas partager une interruption PCI avec une interruption ISA (y a-t'il des exceptions??). Quand une interruption partag?e est lanc?e, le processeur ex?cute toutes les routines du service d'interruption s?quentiellement pour tous les p?riph?riques utilisant cette interruption. La premi?re action qu'entreprend la premi?re routine lanc?e est de v?rifier les registres du p?riph?rique pour voir si une interruption a ?t? g?n?r?e par son p?riph?rique. S'il se trouve que ce n'est pas le cas (fausse alarme), il s'arr?tera imm?diatement et la prochaine routine commence pour le deuxi?me p?riph?rique qui utilise cette m?me interruption, et c?tera. Il v?rifie le p?riph?rique comme d?crit ci-dessus. Cette s?quence est r?p?t?e jusqu'? la d?couverte du p?riph?rique qui a lanc? cette interruption. Toutes les routines d'interruption pour une interruption constituent une cha?ne. Donc, la cha?ne est travers?e jusqu'? ce qu'une routine de la cha?ne r?clame l'interruption en disant?: cette interruption est pour moi. Apr?s avoir g?r? l'interruption, les routines suivantes du service d'interruption ne sont pas ex?cut?es.
Mettre un certain voltage sur une ligne IRQ revient seulement ? demander que le CPU s'interrompe de fa?on ? ex?cuter la routine du pilote du p?riph?rique. Dans pratiquement tous les cas, le CPU est interrompu par la requ?te. Mais les interruptions du CPU peuvent ?tre temporairement d?sactiv?es ou ??faire la queue??, et donc, dans de rares cas, une interruption peut ne pas ?tre g?r?e (ou peut subir un certain d?lai). Donc, ce qui a ?t? auparavant appel? une interruption est plus pr?cis?ment une ??demande d'interruption??, ce qui explique l'acronyme d'IRQ (??Interrupt ReQuest??, c'est-?-dire ReQu?te d'Interruption).
L'indication pr?c?dente, ? savoir que les pilotes de p?riph?rique ?coutent leur interruption, ?tait une explication tr?s simplifi?e. En fait, il s'agit d'un composant (ou d'une partie d'un composant) embarqu? sur la carte-m?re, appel? le contr?leur d'interruptions. Il va ?couter toutes les interruptions. Quand le contr?leur r?cup?re une interruption, il envoie un signal au CPU pour lancer la routine du service d'interruption du pilote de p?riph?rique appropri? pour g?rer cette interruption.
Il existe diff?rents types de contr?leurs d'interruptions. L'un d'entre eux est l'APIC (acronyme de Advanced Programmable Interrupt Controller) qui a habituellement des broches en entr?e pour un grand nombre d'interruptions, y compris les interruptions PCI. Les anciens contr?leurs ont seulement des broches pour les interruptions ISA mais ils peuvent toujours g?rer les interruptions PCI car il s'agit d'un routeur programmable d'interruptions qui convertit les interruptions PCI en interruptions ISA et les envoie vers certaines broches (c'est-?-dire vers certaines IRQ).
C'est uniquement pour l'ancien bus ISA. L'isolation est une m?thode complexe d'affectation d'un point temporaire (num?ro d'identifiant ou CSN, Card Select Number) ? chaque p?riph?rique PnP du bus ISA. Comme il existe des moyens plus efficaces (mais plus complexes) de le faire, certains pourraient dire qu'il s'agit d'une m?thode simple. Seule une adresse d'?criture est utilis?e pour les ?critures PnP vers tous les p?riph?riques pour que toutes les ?critures vers cette adresse aillent sur tous les p?riph?riques PnP. Cette adresse d'?criture est utilis? pour envoyer (affecter) un num?ro de carte unique ? chaque p?riph?rique PnP. Pour ?tre assign?, ce num?ro de carte n?cessite qu'un seul p?riph?rique soit en ?coute lorsque le num?ro de carte est envoy? (?crit) ? cette adresse commune. Tous les p?riph?riques PnP ont un num?ro de s?rie unique qu'ils utilisent lors du processus d'isolation. Faire l'isolation est comme un jeu. Cela se fait en utilisant l'?quivalent d'un bus commun de fils connectant tous les p?riph?riques PnP au programme d'isolation.
Pour le premier tour du ??jeu??, tous les p?riph?riques PnP ?coutent sur ce fil et envoient simultan?ment une s?quence de bits sur le fil. Les bits autoris?s sont soit un 1 (voltage positif) soit un ??0 ouvert?? sans voltage (circuit ouvert ou trois-?tats). Pour cela, chaque p?riph?rique PnP commence ? envoyer s?quentiellement son num?ro de s?rie sur ce fil, voltage (circuit ouvert ou trois-?tats). Pour faire cela, chaque p?riph?rique PnP lance simplement son num?ro de s?rie sur les fils, bit ? bit, en commen?ant par le plus haut. Si un p?riph?rique envoie un 1, un 1 sera entendu par tous les autres p?riph?riques. Si tous les p?riph?riques envoient un ??0 ouvert??, rien ne sera entendu sur le fil. Le but est d'?liminer (? la fin du premier tour) tous les p?riph?riques sauf celui poss?dant le num?ro de s?rie le plus important. ???liminer?? signifie enlever de ce tour du jeu et donc cesser temporairement d'?couter tout ce qui passe sur le fil. (Notez que tous les num?ros de s?rie ont la m?me taille.) Quand il ne reste qu'un seul p?riph?rique en ?coute, un num?ro de carte lui est donn?.
Tout d'abord, consid?rez seulement le bit le plus haut du num?ro de s?rie qui est plac? sur le fil par tous les p?riph?riques qui n'ont pas encore de num?ro de carte. Si un p?riph?rique PnP envoie un 0 (0 ouvert) mais entend un 1, cela signifie qu'un ou plusieurs autres p?riph?riques PnP a un num?ro de s?rie plus important, donc il se supprime temporairement pour ce tour. Maintenant, les p?riph?riques restant en jeu (pour ce tour) ont tous le m?me bit de haut niveau (un 1), donc nous pouvons supprimer ce bit et continuer avec le ??reste du num?ro de s?rie?? pour la suite du tour. Ensuite, recommencez depuis le d?but de ce paragraphe et r?p?tez jusqu'? ce que le num?ro de s?rie soit examin? en entier pour chaque p?riph?rique (voir plus bas pour les cas ??tous ? 0??).
Donc, il est clair que seules les cartes avec un petit num?ro de s?rie sont ?limin?es lors d'un tour. Mais qu'arrive-t-il si tous les p?riph?riques du jeu envoient un 0 comme leur bit de haut niveau?? Dans ce cas, un ??0 ouvert?? est envoy? sur la ligne et tous les participants restent en lice. S'ils ont tous un 0 au d?but, alors les 0 sont supprim?s comme les 1 du paragraphe ci-dessus. Le jeu continue alors avec le bit suivant du num?ro de s?rie).
A la fin du tour (apr?s que le dernier bit ait ?t? envoy?), seul un p?riph?rique PnP, celui poss?dant le plus haut num?ro de s?rie, reste en jeu. Il se voit attribuer un num?ro de carte et quitte le jeu d?finitivement. Ensuite, tous les autres p?riph?riques du tour pr?c?dent (qui n'ont donc pas de num?ro de carte) reviennent dans le jeu et un nouveau tour commence, avec un participant en moins. ?ventuellement, tous les p?riph?riques PnP se voient assigner un num?ro de carte. Il est facile de prouver que cet algorithme fonctionne. L'algorithme actuel est un peu plus complexe que celui pr?sent? ci-dessus car chaque ?tape est r?p?t?e deux fois pour s'assurer, et ces r?p?titions sont faites d'une fa?on un peu diff?rente (mais en utilisant la m?me id?e de base).
Une fois tous les num?ros de carte assign?s, ils sont utilis?s pour s'adresser ? chaque p?riph?rique PnP pour envoyer/lire des donn?es de configuration. Notez que ces num?ros de carte sont seulement utilis?s pour la configuration PnP et ne sont pas utilis?s pour les communications normales avec le p?riph?rique PnP. Lorsque l'ordinateur d?marre, un BIOS PnP fera l'isolation puis s'occupera de la configuration PnP. Apr?s ?a, tous les num?ros de carte sont ??perdus?? d'une telle fa?on que si quelqu'un veut changer (ou inspecter) la configuration une nouvelle fois, l'isolation devra ?tre refaite int?gralement.
Si un bus dispose d'une fonctionnalit? de ma?trise du bus, il est peu probable que des ressources seront n?cessaires pour le DMA sur ce bus. Par exemple, le bus PCI n'a pas besoin des ressources DMA car il dispose de cette fonctionnalit?. N?anmoins, la ??ma?trise du bus?? est souvent appel?e DMA. Mais, comme il ne s'agit pas strictement de DMA, il ne n?cessite aucune ressource DMA. Les bus locaux ISA et VESA n'ont pas de ma?trise du bus. Les anciens bus MCU et EISA l'avaient.
Vous devez donner l'adresse d'entr?e/sortie, l'IRQ et le canal DMA comme param?tres au module ou les compiler dans le noyau. Mais certaines cartes PCI seront automatiquement d?tect?es. RedHat fournit un programme sndconfig qui d?tecte les cartes ISA PnP et configure automatiquement les modules en chargeant les ressources bus d?tect?es.
Ceci d?tectera la carte par des m?thodes PnP, puis s?lectionnera le pilote et le chargera. Il configurera aussi les ressources bus sur les cartes ISA-PnP et sur les cartes PCI. Il remplace OSS (Open Sound System), auparavant populaire.
Windows NT4 ne supportait pas ISAPNP mais dispose d' un programme PNPISA que vous pouvez utiliser ??? vos risques et p?rils??. Pour NT4, les utilisateurs se sont vus conseiller de ne pas configurer le BIOS avec l'indication que le syst?me d'exploitation est PnP de fa?on ? ce que le BIOS s'occupe de la configuration des ressources. Du coup, MS Windows et Linux ?taient auparavant d?pendants de la configuration du BIOS (et le sont toujours).
La traduction fran?aise de ce document a ?t? r?alis?e par Guillaume
Lelarge
<gleu CHEZ wanadoo POINT fr>.
La publication de ce document a ?t? pr?par?e par Jean-Philippe Gu?rard
<fevrier CHEZ tigreraye POINT org>.