  Le HOWTO _P_l_u_g_-_a_n_d_-_P_l_a_y pour Linux
  David S.Lawyer    dave@lafn.org
  v0.08, 28 Novembre 1999

  Aide  l'utilisation et  la comprhension des priphriques Plug-and-
  Play.  Comment rendre votre systme Linux apte  grer le Plug-and-
  Play.
  ______________________________________________________________________

  Table des matires
























































  1. Introduction

     1.1 Copyright, Marques dposes, Limitation de garantie & Crdits
        1.1.1 Copyright
        1.1.2 Marques dposes
        1.1.3 Limitation de garantie
     1.2 Pour le futur : Vous pouvez contribuer
     1.3 Nouvelles versions de cet HOWTO

  2. Que devrait faire le PnP : Allouer les "Ressources du bus"

     2.1 En quoi consiste le
     2.2 Comment un ordinateur trouve-t-il les priphriques (et inversement)
     2.3 Adresses d'E/S etc.
     2.4 Les IRQ, vue d'ensemble
     2.5 Les canaux DMA
     2.6 Espace mmoire
     2.7 Les "ressources" pour le priphrique et son pilote
     2.8 Le  problme
     2.9 Le

  3. La solution

     3.1 Introduction au
     3.2 Comment cela fonctionne-t-il ? (explication simplifie)
     3.3 Dmarrage du PC
     3.4 Les bus
     3.5 Linux doit mieux prendre en compte le

  4. Configuration d'un BIOS PnP

     4.1 Avez-vous un systme d'exploitation PnP ?
        4.1.1 Cohabitation avec Windows9x
     4.2 Comment doivent tre contrles les ressources du bus ?
     4.3 Rinitialiser la configuration ?

  5. Comment agir avec les cartes PnP

     5.1 Introduction
     5.2 Dsactiver le
     5.3 Le BIOS configure le PnP
        5.3.1 Introduction  l'utilisation du BIOS pour configurer le
        5.3.2 La base de donnes ESCD du BIOS
        5.3.3 Utilisation de Windows pour paramtrer l'ESCD
        5.3.4 Ajout d'un nouveau priphrique (sous Linux ou sous Windows)
     5.4 Isapnp
     5.5 Utilitaires PCI
     5.6 Corriger le noyau pour rendre Linux compatible PnP
     5.7 Configuration par Windows
     5.8 Configuration par les pilotes de priphriques
     5.9 Logiciels et documents

  6. Communication de la configuration au pilote

     6.1 Introduction
     6.2 Pilote du port srie : setserial
     6.3 Pilotes de cartes son
        6.3.1 OSS-Lite
        6.3.2 OSS (Open Sound System) et ALSA

  7. Quelle est ma configuration actuelle?

     7.1 Comment mes pilotes de priphriques sont-ils configurs ?
     7.2 Comment mes priphriques sont-ils configurs ?

  8. Appendice
     8.1 Adresses
        8.1.1 Adresses de configuration sur le bus ISA (Port de lecture etc.)
        8.1.2 Champs d'adresses
        8.1.3 Espace d'adresses
        8.1.4 Vrification des champs d'adresses (Test des conflits d'adresses E/S ISA)
        8.1.5 Communication directe via la mmoire.
     8.2 Les interruptions - Description dtaille.
     8.3 Interruptions PCI
     8.4 Isolation


  ______________________________________________________________________

  Adaptation franaise : Albert-Paul Bouillot apb@club-internet.fr

  DDffiinniittiioonn :: _P_l_u_g_-_a_n_d_-_P_l_a_y (Installez-et-Utilisez),PPnnPP.  C'est du
  jargon. C'est un matriel ou un logiciel, qui, aprs avoir t
  install ("plugged in"), peut tre utilis immdiatement ("played
  with"), par opposition au matriel ou au logiciel qui ncessite d'tre
  configur.


  11..  IInnttrroodduuccttiioonn

  11..11..  CCooppyyrriigghhtt,, MMaarrqquueess ddppoosseess,, LLiimmiittaattiioonn ddee ggaarraannttiiee && CCrrddiittss

  11..11..11..  CCooppyyrriigghhtt

  Copyright (c) 1998, 1999 de David S. Lawyer.

  Vous pouvez librement copier ou distribuer (vendre ou donner) ce
  document, dans n'importe quel format.  Pour les corrections et les
  modifications mineures, prenez contact avec le gestionnaire. Vous
  pouvez en raliser des travaux drivs et les distribuer  condition
  de :


  1. Envoyer le travail driv (dans le format le plus appropri, par
     exemple sgml) au LDP (Projet de Documentation Linux) ou quivalent
     pour en assurer la diffusion sur Internet. Si ce n'est pas le LDP,
     indiquez-lui l'endroit o il est disponible. Sauf pour les
     traductions, envoyez une copie de ce travail  la dernire url
     indique du gestionnaire ;

  2. tablir une licence dans l'esprit de celle-ci ou utiliser la
     licence GPL. Inclure une notice de copyright et au moins un
     pointeur sur la licence retenue ;

  3. Reconnatre les mrites des auteurs et contributeurs importants.

  Si vous envisagez de faire un travail, autre qu'une traduction, 
  partir de ce document, discutez de votre projet avec le gestionnaire
  actuel.


  11..11..22..  MMaarrqquueess ddppoosseess

  Si certains mots sont des marques dposes, le contexte doit en mettre
  l'appartenance en vidence.  Par exemple "MS Windows" (ou simplement
  "Windows") implique que "Windows" appartient  Microsoft.


  11..11..33..  LLiimmiittaattiioonn ddee ggaarraannttiiee

  Une grande partie des informations contenues dans cet HOWTO ont t
  obtenues d'Internet, de livres qui peuvent tre errons ou obsoltes
  etc.  Bien que je n'aie pas essay de vous induire en erreur
  sciemment, il peut y avoir un certain nombre d'inexactitudes dans ce
  document. Ayez l'obligeance de me le faire savoir.  Dans la mesure o
  cette documentation est gratuite, il est bien vident que ni moi, ni
  les auteurs prcdents (ni le traducteur ;-) ) ne pourront tre tenus
  pour lgalement responsables des erreurs ventuelles.


  11..22..  PPoouurr llee ffuuttuurr :: VVoouuss ppoouuvveezz ccoonnttrriibbuueerr

  Merci de me faire part de toutes erreurs dans les faits, les opinions,
  la logique, l'orthographe et la grammaire, la clart, les liens etc.
  que vous pourrez rencontrer. Mais d'abord, vrifiez que le document ne
  soit pas trop ancien et que vous possdez la dernire version.  Merci
  de m'envoyer toutes les infos que vous pensez devoir concerner ce
  document.

  Je n'ai pas tudi en dtail ni les outils "isapnptools" ni les
  correctifs du noyau de David Howells (mais j'envisage de le faire). De
  mme, je ne comprends pas totalement comment le BIOS configure le PnP
  (cela dpend de la version du BIOS) ni comment Windows9x met  jour
  l'ESCD.  Donc, cet HOWTO est encore incomplet et peut se rvler
  inexact (faites-moi savoir o sont les erreurs). Dans cet HOWTO j'ai
  parfois utilis;nbsp;?? pour indiquer que je ne connais pas vraiment
  la rponse.


  11..33..  NNoouuvveelllleess vveerrssiioonnss ddee cceett HHOOWWTTOO

  Les nouvelles versions du Plug-and-Play-HOWTO devraient tre
  disponibles  peu prs tous les mois pour consultation et/ou
  tl-chargement sur les sites miroirs du LDP.  Pour obtenir une liste
  de ces sites, consultez : <http://metalab.unc.edu/LDP/mirrors.html>.
  Diffrents formats sont disponibles. Si vous voulez rapidement
  vrifier la date de la dernire version, regardez  :
  <http://metalab.unc.edu/LDP/HOWTO/Plug-and-Play-HOWTO.html>.


  22..  QQuuee ddeevvrraaiitt ffaaiirree llee PPnnPP :: AAlllloouueerr lleess ""RReessssoouurrcceess dduu bbuuss""

  22..11..  EEnn qquuooii ccoonnssiissttee llee PPlluugg--aanndd--PPllaayy  ((PPnnPP)) ??

  En simplifiant beaucoup, le _P_l_u_g_-_a_n_d_-_P_l_a_y est une mthode pour
  indiquer automatiquement au logiciel (pilotes de priphriques) o
  trouver diffrents lments matriels (priphriques) tels que modems,
  cartes rseau, cartes son etc. La tche du _P_l_u_g_-_a_n_d_-_P_l_a_y consiste 
  mettre en correspondance les priphriques physiques et les logiciels
  (pilotes de priphriques) qui les font fonctionner et  tablir un
  canal de communication entre chaque priphrique et son pilote. Pour
  ce faire, le PnP alloue les "ressources bus" suivantes  la fois aux
  pilotes et au matriel : adresses d'E/S, IRQ, canaux DMA (uniquement
  pour le bus ISA), rgions mmoire. Si vous ne comprenez pas ce que
  signifient ces quatre notions, lisez les paragraphes suivants.  Aprs
  que ces ressources du bus ont t assignes (et si les pilotes
  adquats sont installs), les noms des units priphriques dans le
  rpertoire /dev sont prts  tre utiliss.

  Cette mthode d'affectation de certaines ressources du bus est
  quelquefois dsigne par le terme "configuration", mais c'est
  uniquement d'une configuration de bas niveau qu'il s'agit. Mme
  lorsque le _P_n_P est utilis au maximum, une bonne partie de la
  configuration des priphriques est ralise par autre chose que le
  _P_n_P. Par exemple, pour la configuration du modem, une "chane de
  caractres d'initialisation" est envoye au modem  travers le "canal"
  adresse d'E/S. Cette "chane de caractres d'initialisation" n'a rien
   voir avec le PnP bien que le "canal" utilis pour l'envoyer ait t
  allou par le PnP. Le rglage de la vitesse (et de beaucoup d'autres
  paramtres) d'un port srie est ralis en envoyant, de programmes
  excuts par l'utilisateur (souvent automatiquement, au dmarrage),
  des messages au pilote de priphrique. Et cette configuration n'a
  rien  voir avec le _P_n_P. Donc, quand on parle de la configuration
  effectue par le_P_n_P, cela ne concerne qu'un certain type de
  configuration.  Alors que d'autres documentations (telle celle de MS
  Windows) parlent simplement de "ressources" quand il s'agit des
  ressources du bus, j'ai volontairement utilis le terme "ressources du
  bus" pour les distinguer de la multitude d'autres ressources
  disponibles.


  22..22..  CCoommmmeenntt uunn oorrddiinnaatteeuurr ttrroouuvvee--tt--iill lleess pprriipphhrriiqquueess ((eett iinnvveerrssee
  mmeenntt))

  Un ordinateur est constitu d'un CPU/processeur qui effectue les
  traitements, et de mmoire pour stocker les programmes et les donnes.
  De plus, il y a un certain nombre de priphriques tels que diffrents
  types d'unit de disques, une carte vido, un clavier, des cartes
  rseau, des cartes modem, des cartes son, des ports srie et parallle
  etc.  Il y a galement une alimentation pour fournir l'nergie
  ncessaire, diffrents bus sur une carte mre pour connecter les
  priphriques au CPU, ainsi qu'un botier pour contenir le tout.

  Dans les temps anciens, la plupart des priphriques avaient leur
  propre carte d'interface (circuits imprims). Aujourd'hui, en plus des
  cartes d'interface, beaucoup de "priphriques" sont de petits
  circuits monts de faon permanente sur une carte unique appele
  "carte mre". Les cartes qui se connectent sur la carte mre peuvent
  contenir plus d'un priphrique.  Les circuits mmoire sont
  quelquefois galement considrs comme des priphriques mais ne sont
  pas _p_l_u_g_-_a_n_d_-_p_l_a_y au sens de cet HOWTO.

  Pour qu'un systme informatique fonctionne correctement, chaque unit
  priphrique doit tre sous le contrle de son "pilote de
  priphrique" Ce logiciel fait partie du systme d'exploitation (ou
  d'un module) et tourne sur le CPU. Les pilotes de priphriques sont
  associs  des "fichiers spciaux" dans le rpertoire /dev, bien que
  ce ne soient pas vraiment des fichiers. Ils ont des noms tels que hda1
  (premire partition sur le disque dur a), ttyS0 (premier port srie),
  eth1 (deuxime carte Ethernet) etc. Pour rendre les choses plus
  compliques, le pilote de priphrique slectionn, disons pour eth1,
  dpendra du type de carte Ethernet que vous aurez. Donc, eth1 ne peut
  pas tre affect  n'importe quel pilote Ethernet, mais  un certain
  pilote qui fonctionnera avec le type de carte que vous avez install.
  Pour grer un priphrique, le CPU (sous le contrle du pilote de
  priphrique), envoie des commandes (et des donnes) vers les
  diffrents priphriques et en lit les infos. Pour cela, chaque pilote
  de priphrique doit connatre l'adresse utilise pour le priphrique
  qu'il gre.  Connatre une telle adresse correspond  mettre en oeuvre
  un canal de communication, mme si le "canal" physique est en ralit
  un bus de donnes dans le PC qui est partag avec pratiquement tout le
  reste.

  Le canal de communication est en ralit un peu plus compliqu que la
  description qui en est faite ci-dessus. Une "adresse" est en ralit
  un ensemble d'adresses et il y a un canal inverse (les interruptions)
  qui permet aux priphriques d'envoyer, en urgence, une requte de
  "demande d'aide" au pilote de priphrique.


  22..33..  AAddrreesssseess dd''EE//SS eettcc..

  Les PC utilisent trois espaces d'adresses : mmoire principale, E/S,
  et configuration (uniquement dans le cas du bus PCI). Les trois types
  d'adresses partagent le mme bus  l'intrieur du PC. Mais la tension
  sur certains fils spcialiss indique  tous les priphriques  quel
  "espace" une adresse appartient : E/S, mmoire centrale, ou
  configuration.  Consultez ``Adresses'' pour plus de dtails. Les
  priphriques sont normalement situs dans l'espace d'adressage E/S
  bien que, maintenant ils utilisent l'espace d'adressage mmoire
  centrale. Une adresse E/S (Entre/Sortie) (ou I/0, pour Input/Output)
  est quelquefois appele simplement "I/O", "IO", "i/o" ou "io". Le
  terme "port d'E/S" (ou "I/O port") est galement utilis.  Il y a deux
  tapes principales pour allouer les adresses d'E/S (ou d'autres
  ressources telles que les interruptions) :


  1. Affecter l'adresse d'E/S etc. sur la carte (dans l'un de ses
     registres)

  2. Communiquer cette adresse d'E/S etc. au pilote.


  Le processus en deux tapes ci-dessus ressemble un peu au problme de
  la recherche du numro de la maison de quelqu'un dans une rue. Vous
  devez obtenir (et noter) le numro de la maison et quelqu'un doit
  avoir appos le numro sur la maison afin qu'on puisse le trouver.
  Dans les ordinateurs, le pilote de priphrique doit obtenir
  l'adresse, et le matriel du priphrique doit installer la mme
  adresse dans l'un de ses registres. Ces deux oprations doivent tre
  ralises, mais certains font l'erreur de ne raliser que l'une de ces
  deux tapes et se demandent ensuite pourquoi l'ordinateur ne peut pas
  trouver le priphrique. Par exemple, ils utiliseront "setserial" pour
  attribuer une adresse  un port srie, sans penser que cela indique
  seulement au pilote quelle est cette adresse. Cela ne slectionne pas
  l'adresse physique du port srie lui-mme. Si le port srie a, en
  ralit, une adresse diffrente (ou pas d'adresse du tout)et que vous
  indiquiez une adresse errone a setserial, vous avez des problmes.

  Une autre obligation, vidente, consiste a avoir paramtr l'adresse
  d'E/S sur la carte avant que le pilote de priphrique n'essaie
  d'utiliser cette adresse. Comme les pilotes de priphriques dmarrent
  souvent ds la mise en route de l'ordinateur, ils essaient quelquefois
  d'accder  une carte (pour tester sa prsence etc. ) avant que
  l'adresse ait t paramtre dans la carte par le programme de
  configuration _P_n_P. Ainsi, vous voyez des messages d'erreur indiquant
  qu'une carte est introuvable bien qu'elle soit prsente (mais son
  adresse n'a pas encore t attribue).

  Ce qui vient d'tre dit dans les deux derniers paragraphes concernant
  les adresses d'E/S s'applique avec la mme force aux autres
  ressources : ``Les IRQ --Vue d'ensemble'', ``Canaux DMA'',et ``Espace
  mmoire''.  C'est ce que nous allons expliquer dans les trois
  paragraphes suivants.


  22..44..  LLeess IIRRQQ,, vvuuee dd''eennsseemmbbllee

  Aprs avoir lu ce paragraphe, il faut lire ``Interruptions --Dtails''
  pour avoir quelques dtails complmentaires.  Ce qui suit est
  volontairement trs simplifi : en plus de l'adresse, il faut
  galement prendre en compte un numro d'interruption (tel que IRQ5),
  que l'on appelle galement numro d'IRQ (IRQ = Interrupt ReQuest,
  demande d'interruption). Nous avons dj mentionn plus haut que le
  pilote de priphrique doit connatre l'adresse de la carte de faon 
  pouvoir communiquer avec elle. Mais comment se fait la communication
  dans l'autre sens ? Supposons que le priphrique ait besoin de dire
  quelque chose  son pilote immdiatement.  Par exemple, le
  priphrique peut venir de recevoir une rafale d'octets destins 
  aller en mmoire centrale et que le priphrique ait besoin de
  demander  son pilote de venir les rcuprer immdiatement de sa
  mmoire tampon pratiquement pleine pour les transfrer en mmoire
  centrale.

  Comment le priphrique peut-il appeler son pilote  l'aide ? Il ne
  peut pas utiliser le bus de donnes principal puisque celui-ci est
  dj en cours d'utilisation. Au lieu de cela, il lance un appel en
  mettant une certaine tension sur une ligne d'interruption (qui fait
  partie du bus). Il y a l'quivalent de 16 lignes, et chacune d'elle
  correspond (indirectement)  un certain pilote de priphrique.
  Chaque ligne possde un numro d'interruption (IRQ) unique (IRQ =
  Interrupt ReQuest). Le priphrique doit envoyer son interruption sur
  la bonne ligne et le pilote de priphrique doit attendre
  l'interruption sur cette ligne. Le numro d'IRQ stock dans le
  priphrique dtermine quelle est la ligne concerne. Ce mme numro
  d'IRQ doit tre connu du pilote de priphrique de manire que celui-
  ci sache quelle ligne d'IRQ le concerne.

  Lorsqu'un pilote de priphrique reoit une interruption (un appel 
  l'aide) il doit se renseigner sur la cause de l'mission de cette
  interruption et effectuer les actions appropries pour y rpondre. Sur
  un bus ISA chaque priphrique a besoin d'un numro d'interruption
  unique (sauf que deux ports srie ou plus peuvent partager la mme
  interruption depuis le noyau 2.2). Sur un bus PCI, le partage des
  interruptions est permis.


  22..55..  LLeess ccaannaauuxx DDMMAA

  Les canaux DMA ne concernent que le bus ISA.  DMA signifie "Accs
  Direct Mmoire" (Direct Memory Access). Dans ce cas, le priphrique
  est autoris  prendre le pas sur le CPU pour le contrle du bus et 
  transfrer les octets directement en mmoire centrale. Normalement le
  CPU effectuerait un tel transfert en deux tapes :

  1. Lecture de l'espace mmoire E/S du priphrique et stockage de ces
     octets dans le CPU lui-mme

  2. criture de ces octets du CPU dans la mmoire centrale.

     Avec le DMA le processus de transfert des octets du priphrique
     vers la mmoire centrale se droule normalement en une seule tape.
     Les priphriques doivent avoir cette capacit intgre dans le
     matriel, et donc tous les priphriques ne fonctionnent pas en
     DMA. Pendant que le transfert DMA est en cours d'excution, le CPU
     ne peut pas faire grand-chose puisque le bus principal est utilis
     par ce transfert DMA.

  Le bus PCI n'a pas vraiment de DMA, mais plutt quelque chose de
  mieux : le "contrle du bus" (bus mastering). Cela fonctionne un peu
  comme le DMA et on l'appelle quelquefois DMA (par exemple, les units
  de disques durs se nomment "UltraDMA"). Cette technique permet aux
  priphriques de prendre temporairement le contrle du bus et de
  transfrer des octets exactement comme le fait le CPU lorsqu'il a le
  contrle du bus. On n'utilise pas de numros de canaux car le bus PCI
  est constitu de telle manire que le matriel sait quel est le
  contrleur du bus actuel et quel est le priphrique qui demande  le
  devenir. Il n'y a donc pas d'allocation de canaux DMA dans le cas d'un
  bus PCI.

  Quand un priphrique, sur un bus ISA, dsire effectuer un transfert
  DMA, il gnre une requte de DMA en utilisant une ligne spcialise
  comme pour une demande d'interruption. Le DMA aurait pu tre ralis
  en utilisant les interruptions mais cela aurait introduit des retards,
  donc il est plus rapide d'utiliser un type d'interruption spcial
  connu sous le nom de requte DMA. Comme les interruptions, les
  requtes DMA sont numrotes de faon  identifier le priphrique qui
  a envoy cette requte. Ce numro est appel canal DMA.  Puisque tous
  les transferts DMA utilisent le bus principal (et qu'un seul
  utilisateur ne peut utiliser ce bus  un instant donn) ils utilisent
  tous le mme canal, mais le numro de "canal DMA" sert  identifier
  qui est en train d'utiliser le "canal". Des registres existent sur la
  carte mre pour stocker l'tat courant de chaque "canal". Donc, pour
  mettre une requte DMA, le priphrique doit connatre son numro de
  canal DMA qui doit tre stock dans un registre sur le priphrique
  physique.


  22..66..  EEssppaaccee mmmmooiirree

  Certains priphriques se voient assigner des adresses dans l'espace
  de la mmoire principale. On parle souvent de "mmoire partage" ou
  "d'E/S en zone mmoire". Quelquefois, il s'agit de mmoire morte (ROM)
  sur le priphrique. A propos de ressources _P_n_P, on parle simplement
  de "mmoire". Un tel priphrique peut galement utiliser l'espace
  d'adressage E/S.

  Lorsque vous branchez une telle carte, en ralit vous connectez un
  module mmoire pour la mmoire principale. Cette mmoire peut tre
  soit de la mmoire morte (ROM = Read Only Memory) soit de la mmoire
  partage. La mmoire partage est partage entre le priphrique et
  l'Unit Centrale (CPU qui excute le pilote de priphrique). Cette
  mmoire peut servir de moyen de "transfert" direct des donnes entre
  le priphrique et la mmoire principale. En ralit, ce n'est pas un
  transfert  proprement parler puisque le priphrique met ses donnes
  dans sa propre mmoire qui se trouve tre galement la mmoire
  centrale.  la fois la carte et le pilote de priphrique doivent
  savoir o cela se passe.  Il faut utiliser des adresses mmoires
  hautes de faon  viter tout conflit avec les circuits mmoires des
  adresses basses (de la mmoire centrale) de votre ordinateur.

  Pour la ROM, c'est diffrent. C'est comme un programme (peut-tre le
  pilote de priphrique) qui serait utilis avec le priphrique.
  Heureusement, il peut tourner avec Linux et pas seulement avec Windows
  ?? Il peut tre ncessaire de le dupliquer en mmoire centrale pour le
  faire tourner plus vite. Une fois dupliqu, il n'est plus "en lecture
  seule".


  22..77..  LLeess ""rreessssoouurrcceess"" ppoouurr llee pprriipphhrriiqquuee eett ssoonn ppiilloottee

  Donc, les pilotes de priphriques doivent tre "attachs" d'une faon
  quelconque au matriel qu'ils contrlent. Cela est ralis en
  fournissant des "ressources" (E/S, Mmoire, IRQ, DMA)  la fois au
  priphrique physique et au logiciel de pilotage. Par exemple, un port
  srie n'utilise seulement que 2 ressources (parmi les 4 possibles) :
  une IRQ et une adresse d'E/S. Ces deux valeurs doivent tre fournies
  au pilote de priphrique et au priphrique physique. On donne alors
  un nom (tel que ttyS1) au pilote (et  l'unit priphrique
  correspondante) dans le rpertoire /dev.  L'adresse et le numro d'IRQ
  sont stocks dans un registre sur la carte du priphrique physique
  (ou dans un circuit sur la carte mre). Si l'on utilise de cavaliers,
  cette information est toujours stocke dans la partie "matriel" du
  priphrique (sur la carte etc.). Mais dans le cas du _P_n_P, la donne
  enregistre est gnralement perdue lors de l'arrt du PC (mise hors
  tension) de sorte que cette donne doit tre fournie  chaque fois que
  le PC est remis en fonction.





  22..88..  LLee  pprroobbllmmee

  L'architecture du PC fournit seulement un nombre limit d'IRQ, de
  canaux DMA, d'adresses d'E/S et de rgions mmoire.  S'il n'y avait
  que quelques priphriques et qu'ils aient des ressources
  standardises (comme des adresses d'E/S et des numros d'IRQ uniques)
  il n'y aurait aucun problme pour attacher des pilotes de
  priphriques aux units priphriques. Chaque unit aurait des
  ressources fixes qui n'entreraient en conflit avec aucune autre unit
  priphrique de l'ordinateur. Deux priphriques n'auraient pas la
  mme adresse d'E/S, la mme IRQ etc. Chaque pilote pourrait tre
  programm avec l'adresse d'E/S, l'IRQ etc. codes en dur dans le
  programme. La vie serait simple.

  Mais ce n'est pas le cas. Non seulement il existe tellement de
  priphriques diffrents aujourd'hui que les conflits sont frquents,
  mais, de plus, on a souvent besoin d'avoir plus d'un priphrique d'un
  type donn. Par exemple, on peut vouloir disposer de plusieurs units
  de disques diffrentes, de plusieurs ports srie etc. Pour ces
  raisons, les priphriques doivent tre paramtrables afin que l'on
  puisse leur attribuer les adresses, IRQ etc.  que l'on dsire pour
  viter les conflits. Mais quelques IRQ et adresses sont tout  fait
  standard comme celles de l'horloge et du clavier. Elles ne ncessitent
  pas une telle adaptabilit.

  En dehors du problme de conflit d'allocation des ressources, il y a
  le problme de l'erreur en communiquant la nature des ressources au
  pilote de priphrique. Par exemple, supposons que vous ayez entr IRQ
  4 dans un fichier de configuration alors que le priphrique utilise,
  en ralit, l'IRQ 5.  C'est un autre type d'erreur dans l'allocation
  des ressources du bus.

  L'allocation des ressources du bus, si elle est correctement ralise,
  tablit des canaux de communication entre les priphriques physiques
  et leurs pilotes. Par exemple, si une certaine gamme d'adresses d'E/S
  (ressource) est alloue  la fois  un pilote de priphrique et  un
  matriel, alors on a tabli un canal de communication  sens unique
  entre eux. Le pilote peut envoyer des commandes et des informations au
  priphrique. C'est, en ralit, un peu plus qu'un canal  sens unique
  puisque le pilote peut obtenir des informations du priphrique en
  consultant ses registres. Mais le priphrique ne peut pas prendre
  l'initiative d'une communication de cette faon. L'allocation d'une
  IRQ est ncessaire pour crer un canal de communication bi-
  directionnel, o  la fois le pilote et le priphrique peuvent
  prendre l'initiative d'une communication.


  22..99..  LLee PPnnPP  ddtteeccttee lleess pprriipphhrriiqquueess ccoonnnneeccttss aauuxx ppoorrttss ssrriiee

  Les priphriques externes qui se connectent au port srie par un
  cble (comme les modems externes) peuvent galement tre appels _P_l_u_g_-
  _a_n_d_-_P_l_a_y Puisque seul le port srie lui-mme ncessite des ressources
  (une IRQ et une adresse d'E/S), il n'y a pas de ressources  allouer 
  un priphrique qui se connecte  un tel port. Donc, le _P_n_P n'a pas
  vraiment de raison d'tre pour ces priphriques. Cela, mme s'il y a
  des spcifications _P_n_P pour de tels priphriques srie.

  Un systme d'exploitation _P_n_P les dtectera et saura lire leur numro
  de modle etc. Il sera donc alors capable de trouver un pilote de
  priphrique adapt et vous n'aurez pas  dire  un programme
  d'application que vous utilisez disons, /dev/ttyS1. Mais puisque vous
  devriez tre capable d'indiquer manuellement  votre ordinateur (par
  l'intermdiaire d'un fichier de configuration etc.) sur quel port
  srie votre priphrique est connect (et ventuellement le modle
  dont il s'agit) vous n'avez pas rellement besoin de cette
  fonctionnalit "port srie" du _P_n_P.
  33..  LLaa ssoolluuttiioonn PPlluugg--aanndd--PPllaayy  ((PPnnPP))

  33..11..  IInnttrroodduuccttiioonn aauu PPnnPP

  Le terme _P_l_u_g_-_a_n_d_-_P_l_a_y (PnP) (Installez et Utilisez) a plusieurs sens.
  Au sens large c'est uniquement une auto-configuration o l'on installe
  simplement un priphrique et que celui-ci se configure par lui-mme.
  Au sens o je l'entends dans cet HOWTO, la configuration ne concerne
  que la configuration de la ressource PnP et la communication de
  l'information au pilote de priphrique. Dans un sens plus troit
  c'est simplement le paramtrage des ressources des priphriques.
  Cela peut aussi concerner les spcifications qui, (entre autres
  choses) indiquent comment les donnes PnP de la ressource doivent tre
  lues ou crites dans les priphriques (souvent des cartes) sur le bus
  ISA. Les spcifications du standard PCI (et non PnP) sont de mme
  nature pour le bus PCI.

  Le _P_l_u_g_-_a_n_d___P_l_a_y _(_P_n_P_) met en relation les priphriques et leurs
  pilotes et spcifie leurs "canaux" de communication. Sur le bus ISA,
  avant le _P_l_u_g_-_a_n_d_-_P_l_a_y, les ressources taient configures sur le
  matriel par des cavaliers et les pilotes de priphriques taient
  assigns aux ressources par des fichiers de configuration (ou quelque
  chose du mme style) ou par des tests des priphriques  des adresses
  o ils taient supposs se trouver.  Le bus PCI a t compatible PnP
  ds le dbut et il a t trivial d'implmenter le PnP pour ce bus.
  Mais comme les spcifications du bus PCI n'utilisent pas le terme PnP
  on ne sait pas si l'on doit dire que le bus PCI est PnP (mais il
  supporte le matriel que l'on appelle aujourd'hui PnP).


  33..22..  CCoommmmeenntt cceellaa ffoonnccttiioonnnnee--tt--iill ?? ((eexxpplliiccaattiioonn ssiimmpplliiffiiee))

  Voici une explication trs simple de la faon dont fonctionne le _P_n_P.
  Le programme de configuration _P_n_P (ventuellement un programme du
  BIOS) recherche tous les priphriques _P_n_P et demande  chacun les
  ressources du bus dont il a besoin. Ensuite, il regarde les ressources
  du bus (IRQs, etc.) qu'il doit attribuer. Bien sr, s'il y a des
  ressources du bus rserves par des priphriques (anciens) non _P_n_P
  (dont il a connaissance), il ne les attribue pas. Puis il utilise un
  certain critre (non prcis dans les spcifications _P_n_P) pour
  attribuer les ressources de faon  ce qu'elles n'entrent pas en
  conflit et que tous les priphriques obtiennent ce dont ils ont
  besoin.  Il indique alors  chaque priphrique physique quelles
  ressources du bus lui ont t affectes et chacun se configure alors
  pour n'utiliser que les seules ressources du bus qui lui ont t
  affectes.

  Par exemple, supposons qu'une carte carte ait besoin d'une
  interruption (d'un numro d'interruption) et de 1 MB de mmoire
  partage. Le programme _P_n_P lit cette requte dans la carte. Il
  attribue alors le numro d'interruption 5 (IRQ 5) et un mga-octet
  d'espace mmoire  partir de l'adresse 0xe9000000. Ce n'est pas
  toujours aussi simple car la carte peut utiliser uniquement certains
  numros d'interruption (seulement pour ISA) ou n'accepter qu'un
  certain domaine d'adressage. Les dtails sont diffrents pour les bus
  ISA et PCI, les choses tant plus complexes pour le bus ISA

  Le logiciels _P_n_P peut utiliser quelques raccourcis. L'un d'entre eux
  consiste  garder une trace de la manire dont il a assign les
  ressources du bus lors de la dernire configuration (lors de la
  dernire utilisation de l'ordinateur) et la rutiliser. Windows9x et
  les BIOS PNP le font mais ce n'est pas le cas du Linux standard.
  Windows9x enregistre ces informations dans ses "Registres" sur le
  disque dur et un BIOS PnP le fait dans la mmoire non volatile de
  votre PC (connu sou le nom d' ESCD; voir ``La Base de donnes ESCD du
  BIOS'').
  Sous Linux, c'est le rgne du "chaque priphrique pour lui-mme" et
  il n'existe aucun registre centralis des affectations de ressources.
  Certains pilotes de priphriques enregistrent la dernire
  configuration qu'ils ont utilis et la rutilisent  la prochaine
  remise en route de l'ordinateur. Implicitement, ils considrent que le
  reste du matriel n'aura pas besoin d'utiliser ses ressources du bus.

  Si les priphriques se souvenaient de leur configuration prcdente,
  il n'y aurait aucun matriel pour les reconfigurer au prochain
  dmarrage, mais ils semblent oublier leur configuration lorsque l'on
  stoppe l'alimentation. Certains priphriques ont une configuration
  par dfaut (mais pas ncessairement la dernire utilise). Le
  programme de configuration _P_n_P doit tre excut  chaque mise sous
  tension du PC. De mme, si l'on ajoute un nouveau priphrique, celui-
  ci a besoin d'tre configur.  L'allocation de ressources du bus  ce
  nouveau priphrique peut ncessiter d'en enlever  un priphrique
  existant et de donner  celui-ci des ressources du bus diffrentes
  qu'il pourra utiliser  la place.


  33..33..  DDmmaarrrraaggee dduu PPCC

  Lors de la mise sous tension initiale du PC le circuit BIOS excute
  son programme pour dmarrer l'ordinateur (la premire tape consistant
   tester le matriel). Si le systme d'exploitation est stock sur le
  disque dur (ce qui constitue le cas normal), le BIOS doit trouver le
  disque dur. Si le disque dur est _P_n_P, alors le BIOS doit utiliser une
  mthode PnP pour le trouver. Donc, pour permettre  l'utilisateur de
  configurer manuellement la mmoire CMOS du BIOS et de ragir aux
  messages d'erreur apparaissant au dmarrage de l'ordinateur, un cran
  (une carte vido) et un clavier sont galement ncessaires.  Donc, le
  BIOS doit configurer, selon la procdure PnP, ces priphriques lui-
  mme.

  Une fois que le BIOS a identifi le disque dur, la carte vido et le
  clavier il est prt  entamer le processus de dmarrage (chargement du
  systme d'exploitation du disque dur vers la mmoire centrale). Si
  vous avez indiqu  votre BIOS que vous aviez un systme
  d'exploitation _P_n_P (SE PnP ou PnP OS), il devrait commencer  dmarrer
  le PC de la manire indique ci-dessus et laisser le soin de terminer
  la configuration _P_n_P au systme d'exploitation. Autrement, un BIOS-PnP
  essaiera de raliser le reste de la configuration _P_n_P des
  priphriques avant le chargement du systme d'exploitation (mais ne
  chargera pas leurs pilotes).


  33..44..  LLeess bbuuss

  Le bus ISA est le vieux bus du vieil IBM PC alors que le bus PCI est
  un bus plus rcent et plus rapide de Intel. Le bus PCI a t conu
  pour ce que l'on appelle aujourd'hui le _P_n_P. Il est facile (si l'on
  compare au bus ISA) de voir comment les ressources du bus ont t
  assignes aux priphriques.  Pour voir comment cela s'est pass
  consulter le "fichier" /proc/pci (/proc/bus/pnp/devices pour les
  noyaux 2.2+), les messages de dmarrage sur votre cran (utilisez
  shift-PageUp pour revenir en arrire), ou utilisez les utilitaires PCI
  (pour les noyaux 2.2+).

  Pour ce qui concerne le bus ISA, il y a un vrai problme pour
  implmenter le _P_n_P car personne n'y pensait lors de la conception de
  ce bus et il n'y a pratiquement pas d'adresse d'E/S disponible pour
  communiquer les informations de configuration aux priphriques
  physiques. Il en rsulte que la manire dont le _P_n_P a t implant sur
  le bus ISA est trs complique. Un livre entier a t rdig  ce
  sujet. Voir ``Le livre du PnP''. Entre autres choses, le programme _P_n_P
  doit attribuer  chaque priphrique _P_n_P un "identificateur"
  provisoire de faon  pouvoir l'adresser pour la configuration _P_n_P.
  L'assignation de ces "identificateurs" provisoires est appele
  "isolation". Voir ``Isolation'' pour de plus amples dtails.

  Finalement, le bus ISA finira par disparatre. Ce jour l, le _P_n_P
  deviendra plus simple puisqu'il sera facile de voir comment le BIOS a
  configur le matriel. Il restera cependant ncessaire de mettre en
  correspondance les priphriques et leurs pilotes ainsi que de
  configurer les priphriques ajouts alors que le PC est en
  fonctionnement. Ces besoins seraient satisfaits si Linux tait un
  systme d'exploitation _P_n_P.


  33..55..  LLiinnuuxx ddooiitt mmiieeuuxx pprreennddrree eenn ccoommppttee llee PPnnPP

  Le _P_n_P (pour le bus ISA) a t invent par Compaq, Intel et Phoenix.
  Microsoft a t un des leaders de sa promotion. Linux aurait t
  meilleur si le _P_n_P n'avait jamais t "invent". Finalement, le bus
  ISA aura disparu et le bus PCI  la mode _P_n_P prvaudra de sorte que
  nous aurons alors un _P_n_P facile  implanter. Mais, que l'on veuille ou
  pas, la plupart des nouveaux matriels ISA aujourd'hui sont _P_n_P et
  Linux ne peut pas faire autrement que de grer efficacement le _P_n_P.
  Cependant le Linux standard (celui du dbut 1999) rend la gestion du
  _P_n_P complique (spcialement pour le bus ISA) alors que le but du _P_n_P
  tait de rendre les choses faciles.

  D'une certaine faon, Linux est un peu _P_n_P pour le bus PCI.  Quand le
  PC dmarre vous pouvez noter, en lisant les messages sur la console,
  que certains pilotes de priphriques Linux trouvent leurs
  priphriques (et les ressources du bus que le BIOS leur a attribu).
  Mais il y a des situations o un systme d'exploitation _P_n_P pourrait
  prendre les choses en compte de manire plus satisfaisante :

  1. En cas de pnurie de ressources du bus;

  2. S'il y a plus d'un pilote pour un priphrique physique;

  3. Si un pilote de priphrique activ ne peut pas trouver le
     priphrique physique;

  4. Installation  chaud d'un priphrique.

     Les utilisateurs de Linux ne devraient pas avoir  plonger dans les
     dtails du _P_n_P pour configurer leurs priphriques _P_n_P ISA comme
     ils doivent le faire. Une solution pourrait consister  avoir une
     version standardise du noyau qui supporterait le _P_l_u_g_-_a_n_d_-_P_l_a_y sur
     les bus ISA, PCI et autres. Un correctif pour le noyau a t crit,
     bien que la plupart des pilotes ne le grent pas. Il ne fait pas
     partie du Linux standard.  Voir ``Correctif noyau''.


  44..  CCoonnffiigguurraattiioonn dd''uunn BBIIOOSS PPnnPP

   la mise sous tension de l'ordinateur, le BIOS s'excute avant que le
  systme d'exploitation ne soit charg. Les nouveaux BIOS sont PnP et
  configurent quelques-uns ou la totalit des priphriques PnP. Il
  n'est pas possible de dsactiver la plupart des BIOS PnP, donc il faut
  faire avec. Voici quelques-uns des choix possibles dans le menu BIOS
  (quelquefois appel CMOS) :

    ``Avez-vous un systme d'exploitation PnP ?''

    ``Comment doivent tre contrles les ressources du bus ?''

    ``Rinitialiser la configuration ?''

  44..11..  AAvveezz--vvoouuss uunn ssyyssttmmee dd''eexxppllooiittaattiioonn PPnnPP ??

  Si vous rpondez oui, alors le BIOS PnP commencera  configurer le
  disque dur, la carte vido et le clavier pour permettre le dmarrage
  du systme.  Mais il laissera le soin de terminer la configuration au
  systme d'exploitation. Il peut faire une ``isolation'' sur le bus ISA
  en laissant les priphriques dsactivs, mais prts  tre configurs
  par le systme d'exploitation. Pour Linux, vous devrez probablement
  indiquer que votre systme d'exploitation n'est pas _P_n_P. Si vous ne le
  faites pas, le BIOS risque de laisser vos priphriques ISA, qu'il n'a
  pas configurs,en tat dsactiv ?? Et les priphriques PCI peuvent
  galement ne pas tre configurs ?

  Si vous rpondez non, alors le BIOS fera la configuration lui-mme. Il
  utilisera la configuration prcdente, sauvegarde dans la mmoire non
  volatile (ESCD),  moins que vous n'ayez ajout de nouveaux
  priphriques PnP.  Voir ``La base de donnes ESCD du BIOS'' Si votre
  dernire session d'utilisation de l'ordinateur a t faite sous Linux,
  il n'y aura pas de modification de configuration.  Voir ``Le BIOS
  configure le PnP''.  Mais si cette dernire session a t faite sous
  Windows 9x (qui est PnP), alors Windows peut avoir modifi l'ESCD.
  Normalement, il ne le fera que si vous "forcez" une configuration ou
  si vous installez un priphrique ancien.  Voir ``Utilisation de
  Windows pour paramtrer l'ESCD''.  Si vous utilisez le(s) programme(s)
  utilitaire(s) isapnp ou PCI pour raliser la configuration, ils
  s'excuteront aprs le BIOS et modifieront les choses de la faon que
  vous leur aurez indiqu.


  44..11..11..  CCoohhaabbiittaattiioonn aavveecc WWiinnddoowwss99xx

  Si vous faites tourner Windows sur le mme PC, comment rpondre  la
  question du BIOS : Avez-vous un Systme d'Exploitation (SE) _P_n_P ?
  Normalement (et avec confiance) vous devriez dire non pour Linux
  standard et oui pour Windows9x. Mais il est particulirement pnible
  d'avoir  paramtrer le menu CMOS manuellement  chaque fois que vous
  changez de SE.  Une solution consiste  paramtrer la CMOS pour un SE
  non _P_n_P, mme si vous dmarrez sous Windows. On peut esprer que
  Windows sera capable de prendre en compte cette situation o tout le
  matriel a t entirement configur par le BIOS. De plus, on peut
  penser que mme si Windows ne s'aperoit pas que le matriel a dj
  t configur, il fera la configuration lui-mme et que tout ira bien.
  Mais il semble que cela ne se passe pas ainsi. Windows ne semble
  seulement capable d'indiquer aux pilotes de priphriques que ce qui
  est enregistr dans les registres Windows.  Mais, la configuration
  matrielle relle (effectue par le BIOS) est celle qui est
  enregistre dans l'ESCD et elle peut tre diffrente de celle des
  registres => donc ennuis.

  Une solution pour essayer d'avoir les mmes infos dans les registres
  et dans l'ESCD consiste  installer (ou rinstaller) Windows aprs que
  le BIOS ait t configur pour un "SE non _P_n_P".  Cela devrait
  permettre de prsenter  Windows un systme configur par le BIOS. Si
  cette configuration se fait sans conflits, avec un peu de chance,
  Windows s'en contentera et la sauvegardera dans ses registres. Si cela
  fonctionne pour vous (et c'est la dernire version de cet HOWTO),
  faites-le moi savoir car je n'ai eu qu'une seule indication me disant
  que cela marchait.

  Une autre mthode consiste  "enlever" les priphriques qui causent
  des problmes  Windows en cliquant sur "enlever" dans le gestionnaire
  de priphriques. Ensuite, redmarrez le PC avec "SE non _P_n_P"
  (paramtr dans la CMOS au moment du redmarrage. Windows
  rinstallera alors les priphriques, en utilisant, on l'espre, le
  paramtrage des ressources du bus tel que configur par le BIOS.
  Pensez que Windows peut vous demander d'insrer le CD d'installation
  de Windows dans le lecteur car, quelquefois, il ne trouve pas les
  fichiers de pilotes (et autres) mme s'ils sont dj prsents. Pour le
  vrifier, j'ai "enlev" la carte NIC (carte interface rseau) qui
  avait un pilote compatible Novell. Au redmarrage, Windows l'a
  rinstalle pour un rseau Microsoft au lieu de Novell. Ce qui
  signifie que le client Novell a d tre rinstall. Indiquez moi vos
  problmes lors de l'utilisation de cette mthode (uniquement pour la
  dernire version de cet HOWTO).


  44..22..  CCoommmmeenntt ddooiivveenntt ttrree ccoonnttrrlleess lleess rreessssoouurrcceess dduu bbuuss ??

  cela peut simplement signifier de dcider comment allouer les
  ressources du bus pour les IRQ et le DMA.  Sur "auto", le bios se
  chargera de l'allocation. Sur manuel, vous rserverez manuellement
  certaines IRQ  utiliser pour des cartes anciennes (cartes non-pnp).
  Maintenant le BIOS peut, ou non, reconnatre vos vieilles cartes. Le
  BIOS ne reconnatra vos cartes anciennes que si vous faites tourner
  ICU (ou quelque chose comme cela) sous Windows pour les faire
  reconnatre par le BIOS. S'il les reconnat, alors essayez l'option
  "auto". S'il ne les reconnat pas, alors rservez manuellement les IRQ
  ncessaires pour les cartes ISA anciennes et laissez BIOS PnP allouer
  le reste.


  44..33..  RRiinniittiiaalliisseerr llaa ccoonnffiigguurraattiioonn ??

  Cette opration effacera de la base de donnes ESCD du BIOS la manire
  dont les priphriques PnP doivent tre configurs ainsi que la liste
  de configuration des priphriques anciens (non-PnP). Ne jamais faire
  cela  moins d'tre convaincu que cette base de donnes est errone et
  doit tre refaite. Il a t dit quelque part que vous ne devriez faire
  cela que dans le cas o votre ordinateur refuserait de dmarrer. Si le
  BIOS perd les donnes sur les priphriques anciens, alors vous devrez
  faire tourner  nouveau ICA sous Windows pour retrouver ces donnes.


  55..  CCoommmmeenntt aaggiirr aavveecc lleess ccaarrtteess PPnnPP

  55..11..  IInnttrroodduuccttiioonn

  Aujourd'hui, la plupart des nouvelles cartes internes sont _P_l_u_g_-_a_n_d_-
  _P_l_a_y _(_P_n_P_). Bien qu'il existe quelques logiciels sous Linux pour grer
  le _P_n_P ils ne sont pas toujours d'utilisation facile.  Il y a 6
  mthodes diffrentes, dont la liste suit, pour s'occuper du _P_n_P (mais
  certaines peuvent ne pas tre utilisables dans notre situation).
  Celle(s)  utiliser dpend(ent) de nos objectifs. Ce qui semble tre
  le plus efficace dans l'immdiat peut se rvler ne pas tre le plus
  facile et le meilleur dans le long terme. Une mthode qui parat
  simple consiste  ne rien faire et  laisser le BIOS-PnP effectuer la
  configuration, mais vous devrez faire quelques investigations pour
  dcouvrir ce qu'a fait le BIOS. Il faudrait que quelqu'un qui a tester
  toutes les mthodes en fasse une comparaison et l'crive. Vous pouvez
  avoir  utiliser plus d'une mthode pour arriver  vos fins.


    ``Dsactiver le PnP''  par cavaliers (mais ce n'est pas possible
     pour de nombreuses cartes) ou par un logiciel spcial

    ``Le BIOS configure le PnP'' (Pour le bus PCI, vous avez seulement
     besoin d'un BIOS PCI, autrement, il vous faut BIOS PnP)

    ``Isapnp'' c'est un programme que vous pouvez toujours utiliser
     pour configurer les priphriques PnP sur le bus ISA uniquement


    ``Utilitaires PCI'' pour effectuer la configuration du bus PCI

    ``Configuration par Windows'' puis vous lancez Linux  partir de
     Windows/DOS.  utiliser en dernier recours

    ``Patch Kernel'' pour transformer Linux en un systme
     d'exploitation PnP.

    ``Configuration par le pilote de  priphrique'', mais peu le font.

  Chacune des solutions ci-dessus configurera les ressources du bus dans
  le matriel. Seule les deux dernires solutions devraient informer le
  pilote du priphrique de ce qui a t fait. Mais seule la dernire le
  fait srement (puisque c'est le pilote lui-mme qui le fait). La faon
  dont le pilote se trouve inform dpend de lui et vous pouvez avoir 
  faire quelque chose pour le renseigner. Voir  ``Indiquer la
  configuration au pilote''


  55..22..  DDssaaccttiivveerr llee PPnnPP  ??

  De nombreux priphriques sont uniquement PnP, sans option pour le
  dsactiver. Mais, pour certains, vous pouvez dsactiver le _P_n_P avec
  des cavaliers ou en utilisant un programme sous Windows qui est fourni
  avec le priphrique (configuration sans cavaliers). Cela vite la
  tche souvent complique de configuration _P_n_P. N'oubliez d'indiquer au
  BIOS que ces ressources du bus sont rserves. Il y a aussi plusieurs
  raisons pour lesquelles vous pouvez ne pas vouloir dsactiver le _P_n_P :


  1. Si vous avez MS Windows sur la mme machine, vous voulez permettre
     au PnP sous MS Windows de configurer les priphriques de faon
     diffrente que sous Linux.

  2. Le champ des possibilits de choix des numros d'IRQ (ou des
     adresses de ports) etc. peut tre particulirement restreint si
     l'on n'utilise pas le PnP.

  3. Vous avez un pilote de priphrique sous Linux qui utilise les
     mthodes _P_n_P pour chercher le priphrique qu'il contrle.

  4. Si vous avez  changer la configuration dans le futur, cela peut
     tre plus facile en utilisant le _P_n_P (pas de cavaliers  dplacer
     ou de programme Dos/Windows  faire tourner).

  5. Vous pouvez avoir (ou aurez) d'autres priphriques _P_n_P qui auront
     besoin d'tre configurs et vous voulez donc le prvoir (ou
     l'tudier) de toute faon.

     Une fois qu'ils sont configurs comme des priphriques non-PnP,
     ils ne peuvent plus tre configurs par un logiciel PnP ou par le
     BIOS ( moins que vous ne dplaciez les cavaliers et/ou n'utilisiez
      nouveau le logiciel de configuration Dos/Windows).


  55..33..  LLee BBIIOOSS ccoonnffiigguurree llee PPnnPP

  55..33..11..  IInnttrroodduuccttiioonn  ll''uuttiilliissaattiioonn dduu BBIIOOSS ppoouurr ccoonnffiigguurreerr llee PPnnPP

  Si vous avez un BIOS PnP, il peut configurer le matriel. Cela
  signifie que votre BIOS lit les besoins en ressources de tous les
  priphriques et les configure (leur alloue les ressources du bus).
  C'est un substitut de SE _P_n_P  l'exception prs que le BIOS ne fait
  pas le lien entre les priphriques et leurs pilotes et qu'il
  n'indique pas aux pilotes comment il a fait la configuration. Il
  devrait normalement utiliser la configuration qu'il a stock en
  mmoire non volatile (ESCD). S'il trouve un nouveau priphrique ou en
  prsence d'un conflit, le BIOS devrait effectuer les modifications
  ncessaires dans la configuration et ne pas utiliser exactement ce
  qu'il y avait dans l'ESCD.

  Votre BIOS doit supporter une telle configuration mais il y a eu des
  cas o il ne l'a pas fait correctement ou l'a fait de manire
  incomplte.  Un avantage de l'utilisation du BIOS rside dans sa
  simplicit puisque, dans la plupart des cas, il n'y a rien 
  paramtrer (sauf  indiquer dans le menu CMOS du BIOS que le SE n'est
  pas PnP). Alors que quelques pilotes de priphriques peuvent tre
  capables de dtecter automatiquement ce que le BIOS a fait, dans
  certains cas, vous devrez le faire (ce qui n'est pas toujours facile).
  Voir  ``Quelle est ma configuration actuelle ?'' Un autre avantage
  possible vient de ce que le BIOS fait son boulot avant que Linux ne
  dmarre et donc que toutes les ressources du bus sont prtes  tre
  utilises (et trouves) par les pilotes de priphriques qui dmarrent
  plus tard.

  Selon MS le fait qu'un BIOS PNP soit capable de configurer au sens PnP
  les priphriques (sans l'aide de MS Windows) est optionnel (pas
  obligatoire).  Mais il semble que la plupart de ceux crs aprs 1996
  ?? ou aux environs en sont capables. Nous devrions leur envoyer des
  lettres de remerciements s'ils le font correctement. Ils configurent 
  la fois les bus ISA et PCI, mais on a dit que quelques vieux BIOS ne
  le faisaient que pour le PCI. Pour essayer d'avoir plus d'informations
  concernant votre BIOS, regardez sur le Web. Merci de ne pas me poser
  de questions sur ce sujet car je n'ai aucunes donnes.  Les dtails
  que vous aimeriez connatre concernant votre BIOS peuvent tre
  difficiles  trouver (ou pas disponibles). Quelques BIOS ont des
  fonctionnalits _P_n_P minimales et essaient de se dcharger de la partie
  difficile de la tche de configuration sur des utilitaires Windows. Si
  cela arrive, soit vous devrez trouver une autre mthode (comme les
  outils isapnp) soit vous devrez essayer de paramtrer la base de
  donnes ESCD si le BIOS en possde une. Consulter le paragraphe
  suivant.


  55..33..22..  LLaa bbaassee ddee ddoonnnneess EESSCCDD dduu BBIIOOSS

  Le BIOS entretient une base de donnes non volatile contenant la
  configuration _P_n_P qu'il essaiera d'utiliser. On l'appelle ESCD
  (Extended System Configuration Data). Encore une fois, l'existence de
  l'ESCD est optionnelle mais la plupart des BIOS-PnP la possde. L'ESCD
  non seulement stocke la configuration des ressources des priphriques
  _P_n_P mais aussi stocke les informations de configuration des
  priphriques non-PnP (et les repre comme tant non-PnP) pour viter
  les conflits. Les donnes ESCD sont habituellement sauvegardes dans
  un circuit qui conserve ces donnes quand on arrte l'alimentation,
  mais quelquefois elles sont stockes sur un disque dur ??

  L'objectif de l'ESCD est de garder la dernire configuration utilise,
  mais si vous utilisez un programme tel que isapnp sous Linux ou des
  utilitaires PCI (qui ne mettent pas  jour l'ESCD) alors, l'ESCD n'en
  n'aura aucune connaissance et ne sauvegardera pas cette configuration
  dans l'ESCD. Un bon SE _P_n_P doit mettre  jour l'ESCD de faon  ce que
  vous puissiez l'utiliser plus tard avec un SE non-PnP (comme Linux
  standard).  Windows peut le faire dans certaines circonstances.  Voir
  ``Utilisation des Windows pour paramtrer l'ESCD''.

  Pour utiliser ce qui a t paramtr dans l'ESCD assurez-vous de
  choisir "SE non-PnP" quivalent dans la CMOS du BIOS. Ensuite, chaque
  fois que le BIOS dmarre (avant le chargement du SE Linux) il doit
  configurer les choses de cette faon. Si le BIOS dtecte une nouvelle
  carte _P_n_P qui n'est pas dans l'ESCD, il doit alors allouer des
  ressources du bus  cette carte et mettre l'ESCD  jour. Il peut mme
  avoir  modifier les ressources du bus dj assignes  des cartes _P_n_P
  existantes et modifier l'ESCD en consquence.

  Si chaque priphrique a enregistr sa dernire configuration, il ne
  devrait pas tre ncessaire de les reconfigurer  chaque redmarrage
  de votre PC. Mais cela ne fonctionne pas comme cela. Donc toutes les
  donnes ESCD doivent tre correctes si vous utilisez le BIOS pour le
  _P_n_P.  Il y a quelques BIOS qui n'ont pas d'ESCD mais possdent une
  sorte de mmoire non volatile pour stocker les informations concernant
  les ressources du bus qui ont t rserves par les cartes non-PnP. De
  nombreux BIOS possdent les deux.


  55..33..33..  UUttiilliissaattiioonn ddee WWiinnddoowwss ppoouurr ppaarraammttrreerr ll''EESSCCDD

  Si le BIOS ne paramtre pas l'ESCD de la faon que vous le voulez (ou
  de la faon dont il faudrait), il serait intressant d'avoir un
  utilitaire Linux qui le fasse. Au dbut 1999, il n'y en avait pas. Il
  faut donc essayer d'utiliser Windows pour le faire (si vous l'avez sur
  le mme PC).

  Il y a trois manires d'utiliser Windows pour essayer de
  paramtrer/modifier l'ESCD. L'une consiste  utiliser l'utilitaire ICU
  conu pour DOS ou Windows 3.x. Cela devrait aussi fonctionner
  correctement pour Windows 9x/2k ??  Une autre mthode consiste 
  initialiser les priphriques manuellement ("force") sous Windows
  9x/2k de sorte que Windows mette cette information dans l'ESCD
  lorsqu'on stoppe Windows normalement.  La troisime mthode est
  destine aux priphriques anciens qui ne sont pas _p_l_u_g_-_a_n_d_-_p_l_a_y.  Si
  Windows les reconnat et sait quelles ressources du bus ils utilisent,
  alors Windows devrait mettre cette info dans l'ESCD.

  Si les priphriques _P_n_P sont configurs automatiquement par Windows
  sans que l'utilisateur ne le "force"  changer les paramtres, alors
  ceux-ci ne seront probablement inscrit dans l'ESCD. Naturellement
  Windows peut dcider de lui-mme de les configurer en utilisant des
  paramtres identiques  ceux qui sont dans l'ESCD mais ce n'est qu'une
  concidence.

  Les systmes d'exploitation Windows 9x sont _P_n_P et configurent, au
  sens _P_n_P les priphriques. Ils entretiennent leur propre base de
  donnes _P_n_P au plus profond des Registres (stocks dans des fichiers
  binaires Windows). Il y a galement tout un tas de renseignements
  concernant la configuration dans les registres, en plus des ressources
  du bus pour le _P_n_P.  Il y a  la fois la configuration courante des
  ressources _P_n_P en mmoire et une autre (peut-tre  peu prs la mme)
  stocke sur le disque dur. Pour la consulter (celle qui est en mmoire
   ?)indirectement dans Windows98 ou pour y forcer des modifications
  vous utilisez le gestionnaire de priphriques.

  Dans Windows98, il y a 2 manires d'invoquer le gestionnaire de
  priphriques :

  1. Poste de travail --> Panneau de configuration --> Systme -->
     Gestionnaire de priphriques.

  2. (cliquer sur le bouton droit de la souris) Poste de travail -->
     Proprits --> Gestionnaire de priphriques.

     Puis dans le gestionnaire de priphriques vous slectionnez un
     priphrique (quelquefois en plusieurs tapes s'il y plusieurs
     priphriques de la mme classe). Puis cliquez sur Proprits puis
     sur Ressources. Pour essayer de modifier la configuration de la
     ressource manuellement, dslectionnez "utiliser les paramtres
     automatiques" puis cliquez sur "Modification des paramtres".
     Maintenant essayer de modifier les paramtres, mais il se peut que
     cela ne soit pas possible. Si vous le pouvez, vous avez "forc" une
     modification. Un message doit vous informer de ce qui a t forc.
     Si vous voulez conserver le paramtrage existant de Windows mais
     que vous vouliez le "forcer", alors, vous devrez forcer une
     modification quelconque puis forcer  nouveau les paramtres
     originaux.

  Pour voir ce qui a t "forc" sous Windows98 regardez dans la liste
  du "matriel forc" : Dmarrer --> Programmes --> Accessoires -->
  Outils systme -- Information systme --> Ressources matrielles -->
  Matriel forc.  Quand vous "forcez une modification des ressources du
  bus sous Windows, il doit mettre votre modification dans l'ESCD (
  condition que vous quittiez Windows normalement).

  > De la fentre "Information systme" vous pouvez galement contrler
  comment les IRQ et les ports d'E/S ont t allous sous Windows.

  Mme si Windows ne signale pas de conflit de ressources du bus, il
  peut en exister sous Linux. Cela vient du fait que Windows peut
  assigner les ressources du bus de manire diffrente de l'ESCD. Dans
  les rares cas o tous les priphriques sous Windows sont soit des
  priphriques anciens soit des priphriques "forcs", il faut que les
  configurations Windows et ESCD soient identiques.


  55..33..44..  AAjjoouutt dd''uunn nnoouuvveeaauu pprriipphhrriiqquuee ((ssoouuss LLiinnuuxx oouu ssoouuss WWiinnddoowwss))

  Si vous ajoutez un nouveau priphrique _P_n_P et que vous ayez paramtr
  votre BIOS pour un "SE non PnP", alors le BIOS devrait le configurer
  automatiquement et en enregistrer la configuration dans l'ESCD. S'il
  s'agit d'un priphrique _n_o_n _P_n_P ancien (ou d'un priphrique
  configurable par cavaliers, etc...), vous n'avez alors que peu
  d'options pour le prendre en compte.

  Vous devez tre capable d'indiquer directement au BIOS (par
  l'intermdiaire des menus de configuration de la CMOS) que certaines
  ressources du bus qu'il utilise sont rserves et ne doivent pas tre
  alloues par le _P_n_P. Cette information n'est pas sauvegarde dans
  l'ESCD.  Mais, en cas de conflit, il peut y avoir une option du menu
  BIOS permettant de rendre prpondrant ou non, sur le contenu de
  l'ESCD, les choix faits au niveau de la CMOS. Une autre mthode
  consiste  faire tourner ICU sous DOS/Windows. Encore une autre
  consiste  installer manuellement le priphrique sous Windows 9x/2k
  et de s'assurer que cette configuration a t "force" (voir le
  paragraphe prcdent). Si elle a t "force" Windows devrait avoir
  mis  jour l'ESCD lors de l'arrt du PC.


  55..44..  IIssaappnnpp

  Une bonne partie de la documentation concernant isapnp est difficile 
  comprendre si l'on ne connat pas les bases du _P_n_P. Cet HOWTO devrait
  aider  la comprendre ainsi que les FAQ (Questions frquemment poses)
  qui l'accompagne.  isapnp ne concerne que les priphriques PnP sur le
  bus ISA (non PCI).  En lanant le programme Linux "isapnp" au
  dmarrage, on configure ces priphriques avec les valeurs indiques
  dans /etc/isapnp.conf. Il est possible de crer ce fichier de
  configuration automatiquement mais vous devrez l'diter manuellement
  pour faire des choix entre diffrentes options.  Avec isapnp, un
  pilote de priphrique, faisant partie du noyau, peut tre lanc
  prmaturment, avant que isapnp ait paramtr l'adresse, etc.  dans le
  matriel. Ce qui entrane que le pilote de priphrique ne sera pas
  capable de trouver le priphrique correspondant. Le pilote utilise la
  bonne adresse alors que celle-ci n'a pas encore t paramtre dans le
  matriel.

  Si votre distribution Linux installe automatiquement isapnptools,
  isapnp peut dj tre lanc au dmarrage. Dans ce cas, tout ce que
  vous avez besoin de faire est d'diter /etc/isapnp.conf selon "man
  isapnp.conf".  Notez que cela revient  configurer manuellement PnP
  puisque vous avez  prendre les dcisions sur la manire de configurer
   mesure que vous ditez le fichier de configuration.  Vous pouvez
  utiliser le programme  "pnpdump" pour vous aider  crer le fichier de
  configuration. Si vous utilisez "isapnp" tel quel et que vous ayez un
  BIOS _P_n_P, vous devrez probablement indiquer au BIOS (quand vous le
  paramtrerez) que vous n'avez pas de SE _P_n_P puisque vous voudrez
  toujours que que le BIOS configure les priphriques PCI. Alors que le
  BIOS peut galement configurer les priphriques ISA, isapnp le
  refera.


  55..55..  UUttiilliittaaiirreess PPCCII

  Le nouveau paquetage Utilitaires PCI (= pciutils, improprement appel
  "pcitools"), devrait vous permettre de configurer manuellement, _ _l_a
  _P_n_P, le bus PCI.  "lspci" donne la liste des ressources bus, alors que
  "setpci" paramtre les allocations de ressources dans le matriel.


  55..66..  CCoorrrriiggeerr llee nnooyyaauu ppoouurr rreennddrree LLiinnuuxx ccoommppaattiibbllee PPnnPP

  David Howells a cr une telle mise  jour pour le faire. C'est le
  "Gestionnaire de configuration/ressource du noyau Linux" ("Linux
  Kernel Configuration/Resource Manager") quelquefois appel
  "Gestionnaire de configuration matrielle". Cette adaptation peut ne
  pas correspondre au noyau le plus rcent. Le noyau rsultant est
  rput stable mais cependant des bogues ont t signals.  Une
  documentation est incluse comme serial.txt, pour montrer comment faire
  pour un port srie. Elle fournit des "fichiers" dans l'arborescence
  /proc pour que vous puissiez voir ce qui se passe et peut enregistrer
  des commandes dans l'un de ces fichiers pour une configuration
  personnalise.  Un problme vient de ce que de nombreux pilotes de
  priphriques ne le prennent pas en compte et qu'il vous faut encore
  utiliser les fichiers de configuration traditionnels etc. pour
  effectuer la configuration.  Consultez  <http://www.astarte.free-
  online.co.uk>



  55..77..  CCoonnffiigguurraattiioonn ppaarr WWiinnddoowwss

  Si vous avez Windows9x (ou 2k) sur le mme PC, dmarrer alors
  simplement Windows et laissez-le configurer le _P_n_P.  Puis lancez alors
  Linux  partir de Windows (ou du DOS). On a signal que Windows
  effaait les IRQ des registres des priphriques PCI. Dans ce cas,
  Linux signale qu'il a trouv une IRQ  zro. Dans ce cas, vous ne
  pouvez pas utiliser cette mthode.


  55..88..  CCoonnffiigguurraattiioonn ppaarr lleess ppiillootteess ddee pprriipphhrriiqquueess

  Quelques pilotes de priphriques utilisent les mthodes _P_n_P pour
  paramtrer les ressources du bus au point de vue matriel et seulement
  pour les priphriques qu'ils contrlent. Dans ce cas, puisque le
  pilote a effectu la configuration, il connat videmment la
  configuration et il n'y a aucun besoin de lui fournir ces
  informations.

  Le problme ici porte sur deux points. Il est difficile de mettre dans
  le pilote tout ce qui est ncessaire et le pilote peut accaparer des
  ressources du bus qui seraient ncessaires pour d'autres
  priphriques. Cela serait plus facile pour l'utilisateur, mais un
  noyau Linux _P_n_P serait une meilleure solution.  Voir ``Linux doit
  mieux prendre en compte le <em>PnP</em>''



  55..99..  LLooggiicciieellss eett ddooccuummeennttss PPnnPP


    Page d'acceuil Isapnptools
     <http://www.roestock.demon.co.uk/isapnptools/>

    Mise  jour pour rendre le noyau Linux <em>PnP</em>
     <http://www.astarte.free-online.co.uk>

    Projet de pilote <em>PnP</em>
     <http://www.io.com/~cdb/mirrors/lpsg/pnp-linux.html>

    Spcifications <em>PnP</em> de Microsoft
     <http://www.microsoft.com/hwdev/respec/pnpspecs.htm>

    Le livre : PCI System Architecture, 3rd ed. by Tom Shanley +,
     MindShare 1995. Traite des fonctionnalits style PnP pour le bus
     PCI bus.

    Le livre : Architecture systme _P_l_u_g _a_n_d _P_l_a_y, de Tom Shanley, Mind
     Share 1995. Dtaille le _P_n_P sur le bus ISA.  Uniquement un survol
     concis du _P_n_P sur le bus PCI.



  66..  CCoommmmuunniiccaattiioonn ddee llaa ccoonnffiigguurraattiioonn aauu ppiilloottee

  66..11..  IInnttrroodduuccttiioonn

  La manire exacte dont cela s'effectue dpend du pilote. Certains
  pilotes disposent de plus d'une mthode pour dtecter la configuration
  du priphrique physique.  l'extrme, on trouve le cas o il faut
  paramtrer "en dur" les ressources du bus dans le noyau et recompiler
  celui-ci.  l'autre extrme, le pilote fait tout automatiquement et
  vous n'avez rien  faire. Il peut mme paramtrer les ressources du
  bus dans le matriel en utilisant les mthodes _P_n_P.

  Entre les deux, on trouve les cas o il faut faire tourner un
  programme pour faire passer les infos au pilote ou mettre ces infos
  dans un fichier. Dans certains cas, le pilote peut tester le
  priphriques  des adresses ou il pense trouver le priphrique. Il
  peut alors essayer de tester diffrentes IRQ pour voir laquelle
  fonctionne (IRQ = Interrupt ReQuest / ReQute d'Interruption). Ce
  qu'il peut faire automatiquement ou non. Dans d'autres cas, le pilote
  utilise des mthodes _P_n_P pour trouver le priphrique et la faon dont
  les ressources du bus ont t affectes, mais ne pas les paramtrer
  lui-mme. Il peut aussi regarder certains fichiers du rpertoire
  /proc.

  On peut avoir besoin d'indiquer les ressources du bus comme paramtre
  au noyau pour un module chargeable. Voir
  /usr/lib/modules_help/descr.gz pour avoir une liste des paramtres
  possibles. Le modules  charger est indiqu dans /etc/modules avec ses
  paramtres. Dans certains autres cas les ressources du bus peuvent
  tre indiques au noyau par des paramtres.  Ceux-ci sont mis dans le
  fichier lilo.conf sous la forme append="...".  Dans ce cas le
  programme lilo doit tre excut pour enregistrer ces donnes dans le
  code de dmarrage du noyau.

  Alors qu'il y a une grande diversit dans la manire dont les pilotes
  peuvent trouver les ressources du bus, le but final est le mme. Il y
  a tellement de priphriques diffrents et de pilotes de priphriques
  pour les grer que vous pouvez avoir besoin de consulter la
  documentation de votre pilote particulier pour trouver comment celui-
  ci gre les ressources du bus et ce que vous avez besoin de faire pour
  vous assurer qu'il trouve les infos dont il a besoin. Quelques brves
  indications sur un petit nombre de pilotes de priphriques sont
  donnes dans les paragraphes suivants.


  66..22..  PPiilloottee dduu ppoorrtt ssrriiee :: sseettsseerriiaall

  Pour le pilote de port srie standard (et non pas pour les cartes
  multi-ports) vous utilisez setserial pour en configurer le pilote. Ce
  programme est souvent lanc  partir d'un fichier de dmarrage. Dans
  les versions les plus rcentes, on trouve un fichier  /etc/serial.conf
  que vous pouvez "diter" en utilisant simplement la commande setserial
  de la manire habituelle et ce que vous paramtrez en utilisant
  setserial est sauvegard dans le fichier serial.conf. Le fichier
  serial.conf devrait tre consult lors de l'excution de la commande
  setserial lance par un fichier de dmarrage. Votre distribution peut
  le faire ou ne pas le faire pour vous.

  Il y a deux manires diffrentes d'utiliser setserial selon les
  options que vous choisissez. Une mthode consiste  indiquer la
  configuration manuellement au pilote. L'autre mthode consiste 
  tester une adresse donne et  voir s'il y a un port srie  cette
  adresse. On peut aussi tester cette adresses et essayer de dtecter si
  une interruption est utilise pour ce port. Le pilote excute quelque
  chose comme setserial au dmarrage, mais ne teste pas les
  interruptions, il affecte simplement l'interruption "standard" ce qui
  peut ne pas correspondre  la ralit. Il teste uniquement l'existence
  d'un port. Consulter le Serial-HOWTO pour avoir des dtails
  complmentaires.


  66..33..  PPiillootteess ddee ccaarrtteess ssoonn

  66..33..11..  OOSSSS--LLiittee

  Vous devez passer IO, IRQ, et DMA en tant que paramtres  un module
  ou les compiler dans le noyau. Mais quelques cartes PCI seront
  dtectes automatiquement (par exemple en prenant les infos dans
  /proc/pci ou quelque chose d'quivalent).  RedHat fournit un programme
  "sndconfig" qui dtecte les cartes ISA PnP et paramtre
  automatiquement les modules pour les charger avec les ressources de
  bus trouves.


  66..33..22..  OOSSSS ((OOppeenn SSoouunndd SSyysstteemm)) eett AALLSSAA

  Ils dtecteront les cartes par les mthodes _P_n_P puis choisiront le
  pilote appropri et le chargeront. Ils paramtreront galement les
  ressources du bus sur une carte ISA-PnP. Vous pouvez avoir 
  intervenir manuellement pour rsoudre les problmes de conflits. Pour
  le pilote ALSA, la prise en charge de l'ISA-PnP est optionnelle et
  vous pouvez utiliser isapnp si vous le voulez.


  77..  QQuueellllee eesstt mmaa ccoonnffiigguurraattiioonn aaccttuueellllee??

  Ici "configuration" concerne l'attribution des ressources _P_n_P du bus
  (adresses, IRQ, et DMA). C'est une question  deux volets pour chaque
  priphrique, et chacun d'eux doit avoir le mme rponse.

  1. Quelle est la configuration du logiciel du pilote de priphrique ?
     Autrement dit : comment le pilote pense-t-il que le matriel est
     configur ?

  2. Quelle est la configuration (s'il y a lieu) du  matriel
     priphrique ?

  Naturellement la configuration matrielle du priphrique et celle de
  son pilote doivent tre les mmes (et normalement, c'est le cas).
  Mais, si les choses ne se passent pas bien, c'est qu'il y a peut-tre
  une diffrence. Cela signifie que le pilote a des donnes incorrectes
  concernant la configuration relle du matriel, et dysfonctionnement.
  Si le logiciel que vous utilisez ne vous indique pas correctement ce
  qui ne va pas (ou n'effectue pas la configuration correcte
  automatiquement), il vous faudra chercher la configuration matrielle
  des priphriques et celle des pilotes correspondants. Alors que les
  pilotes de priphriques de Linux devraient "tout nous dire", il y a
  des cas o il n'est pas facile de dterminer comment le matriel a t
  configur.

  Un autre problme vient de ce que les messages  l'cran indiquant la
  configuration ne sont pas toujours clairs quant  la nature de la
  configuration qu'ils concernent : le pilote de priphrique, le
  priphrique lui-mme ou les deux. Si le pilote de priphrique s'est
  vu attribu une configuration et qu'ils teste le matriel pour
  vrifier qu'il est configur de la mme manire, alors la
  configuration indique par le pilote devrait tre  la fois celle du
  pilote et du matriel.

  Mais certains pilotes ne se comportent pas comme cela et peuvent
  accepter une configuration qui ne puisse pas se vrifier. Par exemple,
  "setserial" acceptera une configuration qui ne se vrifie pas (mme si
  vous demandez un test des ressources du bus). Dans ce cas "setserial"
  peut uniquement vous indiquer la configuration du pilote et pas celle
  du matriel.

  Quelques infos concernant la configuration peuvent tre obtenues en
  lisant les messages du BIOS et de Linux qui apparaissent  l'cran au
  dmarrage initial de l'ordinateur. Souvent, ces messages dfilent trop
  rapidement pour pouvoir tre lus, mais lorsque leur dfilement
  s'arrte, tapez plusieurs fois sur la touche "Majuscule + dfilement
  arrire" (Shift-PageUp) pour les visualiser. Pour visualiser la suite,
  taper sur la touche "Majuscule + dfilement avant" (Shift-PageDow). La
  commande "dmesg" n'importe quand n'affichera que les messages du noyau
  Linux et les messages les plus importants peuvent manquer (y compris
  ceux du BIOS).  Les messages de Linux peuvent quelquefois n'indiquer
  que la vue de la configuration par les pilotes de priphrique, et ces
  informations peuvent parfois provenir d'un fichier de configuration
  incorrect.

  Les messages du BIOS affichent la configuration relle du matriel 
  cet instant donn, mais un SE _P_n_P, isapnp ou les utilitaires PCI
  peuvent la modifier ultrieurement. Les messages du BIOS sont affichs
  avant ceux de Linux. Comme alternative au rappel des messages par les
  touches "majuscule + dfilement arrire", essayez de geler l'affichage
  en tapant sur la touche "Pause". Taper sur n'importe quelle touche
  pour continuer. Mais, une fois que les messages de Linux commencent 
  apparatre, c'est trop tard pour utiliser la touche "Pause"
  puisqu'alors, les messages de Linux ne sont pas gels.


  77..11..  CCoommmmeenntt mmeess ppiillootteess ddee pprriipphhrriiqquueess ssoonntt--iillss ccoonnffiigguurrss ??

  Il y a des programmes que l'on peut lancer de la ligne de commande
  (tel que "setserial" pour les ports srie) pour le dterminer.
  L'arborescence du rpertoire /proc est utile.  /proc/ioports indique
  les adresses d'E/S utilises par les pilotes (ou essaye si c'est
  faux). Ils peuvent ne pas tre configurs de cette faon dans le
  matriel.

  /proc/interrupts n'indique que les interruptions utilises
  actuellement et beaucoup de celles qui ont t alloues aux pilotes ne
  sont pas affiches car elles ne sont pas actuellement utilises. Par
  exemple, mme s'il y a une disquette dans l'unit et qu'elle est prte
   tre utilise, l'interruption la concernant ne sera pas affiche, 
  moins qu'elle ne soit effectivement en cours d'utilisation. De plus,
  une interruption indique ici  ne signifie pas qu'elle existe dans le
  matriel. Un indice du fait qu'elle n'existe pas dans le matriel
  consiste  vrifier que le nombre d'interruptions gnres est 0. Et
  encore, mme si l'on voit que quelques interruptions ont t gnres,
  cela peut signifier que cette interruption n'existe pas pour ce
  priphrique mais par un autre priphrique qui n'est pas en cours
  d'utilisation mais qui a pu gnrer une interruption ou deux.  Dans le
  noyau 2.2 l'arborescence /proc a t modifie.


  77..22..  CCoommmmeenntt mmeess pprriipphhrriiqquueess ssoonntt--iillss ccoonnffiigguurrss ??

  C'est facile de trouver quelles ressources du bus ont t attribues 
  des priphriques sur un bus PCI : on utilise soit la commande "lspci"
  ou, pour les noyaux <: 2.2: voir /proc/pci; pour les noyaux 2.2+:
  /proc/bus/pci/devices. Pour le bus ISA, on peut essayer de faire
  tourner pnpdump --dumpregs, mais ce n'est pas une mthode sre. Les
  rsultats peuvent tre difficile  dcoder. Ne pas confondre les
  adresses de port de lecture que pnpdump "essaye" (et o il trouve
  quelque chose) avec les adresses d'E/S du priphrique trouv. Ce ne
  sont pas les mmes.

  Les messages en provenance du BIOS, lors du dmarrage, indique la
  configuration matrielle au moment du dmarrage. Si vous vous basez
  sur le BIOS pour faire votre configuration, ils faut qu'elle soit
  encore valable. Les messages de Linux peuvent provenir des pilotes qui
  ont fait des essais pour vrifier la prsence du matriel (et
  ventuellement des essais sur les IRQ et le DMA).  Naturellement, si
  le priphrique fonctionne correctement, alors il doit tre configur
  comme son pilote.



  88..  AAppppeennddiiccee

  88..11..  AAddrreesssseess

  Il y a trois types d'adresses : les adresses mmoire centrale, les
  adresses d'E/S et les adresses de configuration. Pour le bus PCI, les
  adresses de configuration constituent un espace d'adressage spar,
  exactement comme le sont les adresses d'E/S. Sauf dans le cas des
  adresses de configuration ISA, qu'une adresse sur le bus d'adresses
  (ou sur le bus partag adresses-donnes dans le cas du PCI) soit ou
  non une adresse mmoire, une adresse d'E/S ou une adresse de
  configuration dpend uniquement des tensions sur d'autres fils
  (pistes) du bus.


  88..11..11..  AAddrreesssseess ddee ccoonnffiigguurraattiioonn ssuurr llee bbuuss IISSAA ((PPoorrtt ddee lleeccttuurree
  eettcc..))

  En ce qui concerne le bus ISA, il n'y a pas, techniquement, d'espace
  d'adressage de configuration, mais il existe, pour le CPU, une mthode
  spciale d'accs aux registres de configuration sur les cartes PnP.
  Trois adresses d'E/S sont rserves  cet usage. Ces 3 adresses ne
  sont pas diffrentes pour chaque carte, mais sont partages par toutes
  les cartes.

  Les trois adresses sont appeles port de lecture, port d'criture et
  port d'adresse. Ces ports ont la taille d'un octet. Chaque carte PnP
  possde un certain nombre de registres car ces trois adresses seules
  ne sont pas suffisantes pour une simple carte. Pour communiquer avec
  une carte, le numro de la carte (handle) est envoy  toutes les
  cartes sur le port d'criture. Une seule carte reconnat son numro et
  se met  l'coute.  Alors l'adresse du registre concern est envoye
  sur le port adresse (de toutes les cartes, mais une seule est 
  l'coute). Ensuite, on fait une criture sur le port d'criture ou une
  lecture sur le port de lecture.

  Le port d'criture est toujours  l'adresse A79 et le port d'adresse
  est toujours 279. Le port de lecture n'est pas dtermin et est
  initialis par le logiciel de configuration  une adresse qui est
  suppose ne pas tre en conflit avec une autre carte ISA. S'il y a
  conflit, il modifiera l'adresse.  Pour toutes les cartes PnP, cette
  adresses est "programme". Donc, si vous utilisez disons, isapnp, pour
  initialiser ou tester des donnes de configuration, vous aurez besoin
  de connatre l'adresse du port de lecture.


  88..11..22..  CChhaammppss dd''aaddrreesssseess

  Le terme "adresse" est quelquefois utilis dans ce document pour
  parler d'une srie d'adresses contigus. Comme les adresses sont
  donnes en octets, une simple adresses contient uniquement un octet
  mais les adresses E/S (et mmoire centrale) ont besoin de plus que
  cela. Donc un espace de, disons, 8 octets est souvent utilis pour les
  adresses d'E/S alors que le nombre d'adresses en mmoire centrale
  alloues  un priphrique est beaucoup plus grand. Pour un port srie
  (priphrique d'E/S), il suffit de donner l'adresse de dpart du
  priphrique (par exemple 3F8) puisqu'il est bien connu que le champ
  d'adresses de ce type de priphrique est seulement de 8 octets.
  Cette adresse de dpart est connue sous le nom "d'adresse de base".


  88..11..33..  EEssppaaccee dd''aaddrreesssseess

  En ce qui concerne l'ISA, pour accder  la fois aux "espaces"
  d'adresses E/S et mmoire (centrale) on utilise le mme bus d'adresses
  (les fils utiliss pour les adresses sont partags). Comment le
  priphrique reconnat-il si une adresse qui apparat sur le bus
  d'adresses est une adresse mmoire ou une adresse E/S ?  Eh bien, il y
  a quatre lignes spcialises du bus qui vhiculent cette information
  et un peu plus. Si l'un de ces quatre fils est aliment, cela indique
  que le CPU veut lire une adresse E/S, et la mmoire centrale ne tient
  pas compte de l'adresse prsente sur les fils d'adresses du bus. Les
  trois autres fils sont utiliss  des fins identiques. En rsum : il
  existe des lignes de lecture et d'criture pour les adresses mmoire
  centrale et pour celles d'E/S (4 fils en tout).

  Pour le bus PCI, l'ide de base est identique et on utilise galement
  4 fils, mais c'est ralis de faon lgrement diffrente. Au lieu
  d'avoir uniquement l'un des quatre fils aliment, on code un nombre
  binaire sur ces fils (16 possibilits diffrentes). On peut donc
  vhiculer plus d'informations. Quatre de ces 16 valeurs sont utilises
  pour les espaces mmoire et E/S comme dans le paragraphe ci-dessus. En
  plus, on trouve l'espace des adresses de configuration qui utilise
  deux valeurs supplmentaires. Les dix possibilits restantes sont
  rserves pour d'autres utilisations.






  88..11..44..  VVrriiffiiccaattiioonn ddeess cchhaammppss dd''aaddrreesssseess ((TTeesstt ddeess ccoonnfflliittss
  dd''aaddrreesssseess EE//SS IISSAA))

  Pour le bus ISA, il existe un systme implant sur chaque carte PnP
  pour vrifier que d'autres cartes n'utilisent pas la mme adresse.  Si
  deux cartes ou plus utilisent les mmes adresses d'E/S, aucune des
  cartes ne fonctionnera correctement. Un bon logiciel _P_n_P devrait
  affecter les ressources du bus pour viter de tels conflits, mais,
  mme dans ce cas, une carte ancienne pourrait se cacher quelque part
  avec la mme adresse.

  Le test consiste, pour la carte,  donner, sur le bus, comme numros
  de test ses propres registres d'E/S. Le logiciel _P_n_P les lit et
  vrifie qu'il lit les mmes numros. Si tel n'est pas le cas, quelque
  chose ne va pas (comme, par exemple, une autre carte  la mme
  adresse). Il rpte alors le test avec un autre numro de test.
  Puisqu'en ralit il teste le champ des adresses d'E/S assign  cette
  carte, on l'appelle " test des champs d'adresses". On devrait plutt
  l'appeler "test des conflits d'adresses".  S'il y a un conflit
  d'adresses, on obtient un message d'erreur qu'il faut rsoudre par ses
  propres moyens.


  88..11..55..  CCoommmmuunniiccaattiioonn ddiirreeccttee vviiaa llaa mmmmooiirree..

  Traditionnellement, la plupart des priphriques d'E/S utilisaient les
  E/S mmoire pour communiquer avec le CPU. Par exemple, le port srie
  fonctionne de cette faon. Le pilote de priphrique, qui tourne sur
  le CPU lit et crit les donnes de/vers l'espace des adresses d'E/S et
  la mmoire centrale.  Une mthode plus rapide consisterait  faire
  mettre les donnes directement en mmoire centrale par le
  priphrique. Une manire de le raliser est d'utiliser l'accs direct
  mmoire (``Canaux DMA'').  Une autre mthode consiste  affecter un
  espace de la mmoire centrale au priphrique. Comme cela, le
  priphrique lit et crit directement en mmoire centrale sans avoir 
  se proccuper de l'accs direct mmoire (DMA).  De tels priphriques
  possdent normalement des adresses d'E/S et des adresses mmoire.


  88..22..  LLeess iinntteerrrruuppttiioonnss -- DDeessccrriippttiioonn ddttaaiillllee..

  Le systme d'interruption vhicule un paquet d'informations, mais
  seulement de faon indirecte. Le signal d'interruption (une tension
  sur un fil) indique simplement  un circuit appel contrleur
  d'interruptions qu'un certain priphrique a besoin que l'on s'occupe
  de lui. Le contrleur d'interruption le signale alors au CPU. Le CPU
  va chercher le pilote de ce priphrique et en excute une partie que
  l'on dsigne sous le nom de "routine de service de l'interruption" (ou
  "routine de gestion de l'interruption").  Cette "routine" essaie de
  voir ce qui s'est pass et se charge de traiter la question comme, par
  exemple, de transfrer des octets du (ou vers le) priphrique. Ce
  programme (cette routine) peut facilement analyser ce qui s'est pass
  puisqu'il connat les adresses des registres ( condition que les
  numros d'interruption (IRQ) et que les adresses d'E/S aient t
  correctement renseignes). Ces registres contiennent les informations
  concernant l'tat du priphrique. Le logiciel lit le contenu de ces
  registres et, en examinant ce contenu, voit ce qui s'est pass et
  entreprend l'action approprie.

  Donc, chaque pilote de priphrique a besoin de savoir quel est le
  numro d'interruption (IRQ) qui le concerne. Sur le bus PCI (et pour
  les ports srie sur un bus ISA depuis la version du noyau 2.2) il est
  possible que deux priphriques ou plus se partagent le mme IRQ
  (numro d'interruption).  Cela est rendu possible en faisant excuter
  par le CPU toutes les routines de service d'interruption de tous les
  priphriques qui utilisent cette interruption. La premire chose que
  ralise une telle routine de service consiste  tester si
  l'interruption concerne son priphrique. Si tel n'est pas le cas
  (fausse alarme), elle se termine et le traitement continue avec la
  routine de service suivante etc.



  88..33..  IInntteerrrruuppttiioonnss PPCCII

  Les interruptions PCI sont diffrentes, mais comme elles correspondent
  normalement aux IRQ, elles se comportent  peu prs de la mme faon.
  Le fait que les interruptions PCI puissent tre partages constitue
  une diffrence majeure. Par exemple l'IRQ5 peut tre partage entre
  deux priphriques PCI. Cette possibilit de partage est automatique :
  il n'est pas ncessaire de disposer d'un matriel ou d'un logiciel
  spcial.  On a entendu parler de situations o un tel partage ne
  fonctionne pas, mais la cause rside certainement dans le logiciel du
  pilote de priphrique.  Tous les pilotes de priphrique PCI sont
  supposs fonctionner avec partage des interruptions. Il faut cependant
  noter que le partage d'une mme interruption entre un bus ISA et PCI
  n'est pas possible. Mais un partage illgal d'interruption
  fonctionnera  condition que les priphriques en conflit ne soient
  pas utiliss en mme temps. "En mme temps" signifie ici qu'un
  programme en cours d'excution "ouvre" le priphrique dans le
  programme C.

  Vous pouvez avoir besoin de connatre quelques-uns des dtails du
  systme d'interruption PCI de faon  pouvoir paramtrer la mmoire
  CMOS du BIOS ou pour positionner les cavaliers sur de vieilles cartes
  PCI. Le bus PCI possde quatre lignes d'interruptions de INTA#  INTD#
  (A, B, C et D).  Pour un systme  7 connecteurs, d'aprs les
  spcifications, on aurait la possibilit de disposer de 7 x 4 = 28
  lignes d'interruptions diffrentes.  Mais ces spcifications ne
  permettent qu'un nombre infrieur de lignes d'interruption. Ce n'est
  pas trop contraignant puisque l'on peut partager les interruptions.
  Beaucoup de bus PCI ne paraissent disposer que de 4 lignes
  d'interruption. Appelons ces lignes (fils ou pistes) W, X, Y et Z.
  Supposons que l'on dsigne l'interruption B de l'emplacement numro 3
  comme tant l'interruption 3B. Alors, on peut utiliser le fil W pour
  partager les interruptions 1A, 2B, 3C, 4D, 5A, 6B, 7C. On le ralise
  physiquement en connectant le fil W aux fils 1A, 2B etc... De mme, le
  fil X pourrait tre connect aux fils 1B, 2C, 3D, 4A, 5B, 6C, 7D. Au
  dmarrage, le BIOS fait correspondre X, W, Y, Z aux interruptions.
  Ensuite il crit dans un registre physique de chaque priphrique
  quelle interruption lui a t affecte de sorte que le priphrique
  (et tout ce qui interroge le priphrique) sache quelle IRQ il
  utilise.

  Les fils X, W, Y et Z mentionns ci-dessus sont dsigns dans les
  spcifications PCI par les noms INTA#, INTB#, INTC# et INTD#. Cette
  dnomination officielle PCI porte  confusion puisque, maintenant,
  INTA# a deux significations selon que l'on parle du connecteur ou du
  bus PCI.  Par exemple, si 3C correspond  X alors on dira que l'INTC#
  du connecteur 3 est relie  l'INTA# (X) du bus PCI. C'est une
  notation confuse.

  Il y a galement une autre obligation. Un connecteur PCI doit utiliser
  les premires lettres d'interruption en premier. Donc, s'il n'y a
  qu'un connecteur  utiliser une interruption, ce doit tre L'INTA#.
  S'il utilise 2 interruptions ce doivent tre INTA# et INTB# etc.
  Jusqu' 8 priphriques peuvent tre connects  une carte  un
  emplacement donn, mais ils ne peuvent disposer que de 4 interruptions
  PCI. Cela ne pose pas de problme puisque les interruptions peuvent
  tre partages et donc, chacun des 8 priphriques (s'ils sont
  prsents) pourra disposer d'une interruption. La lettre d'interruption
  PCI d'un priphrique est souvent fixe et cble dans le priphrique.
  Le BIOS affecte les IRQ(demandes d'interruptions) de faon  viter
  les conflits avec les IRQ qu'il connat sur le bus ISA. Quelquefois,
  dans le menu CMOS, on peut affecter des IRQ aux cartes PCI (mais ce
  n'est pas aussi facile  faire que ce qui a t expliqu ci-dessus).
  Il existe une situation dans laquelle Windows met  zro tous les
  numros d'interruption dans les cartes PCI aprs que l'affectation des
  numros d'interruption a t effectu. Alors, quelqu'un qui utilise
  Windows et qui lance Linux  partir de Windows verra Linux ne trouver
  que des IRQ incorrectement paramtres  zro.

  Vous pourriez penser que l'utilisation par le PCI des IRQ (bus ISA)
  peut tre lent etc. Pas vraiment. Le(s) circuit(s) contrleur(s)
  d'interruptions ISA possde(nt) un fil d'interruption directement
  reli au CPU afin que celui-ci puisse ragir immdiatement. Alors que
  les signaux sur les bus d'adresse et de donnes ISA doivent cheminer 
  travers le bus PCI pour atteindre le CPU, les signaux d'interruption
  IRQ lui parviennent pratiquement directement.



  88..44..  IIssoollaattiioonn


  C'est uniquement valable pour le bus ISA. L'isolation est une mthode
  complexe d'assignation d'un identificateur temporaire (id number =
  numro d'identification ou Card Select Number (CSN) = numro de
  slection de carte)  chaque priphrique _P_n_P sur le bus. Puisqu'il
  existe des moyens plus efficaces (mais plus complexes) pour le faire,
  certains pourront affirmer que c'est une mthode simpliste. On
  n'utilise qu'une seule adresse d'criture pour toutes les critures
  sur tous les priphriques _P_n_P connects. Cette adresse est utilise
  pour envoyer (assigner) un identificateur unique  chaque priphrique
  _P_n_P. L'attribution de cet identificateur impose qu'un seul
  priphrique soit  l'coute lorsque cet identificateur est envoy
  (crit)  cette adresse commune. Tous les priphriques _P_n_P ont un
  numro de srie unique qu'ils utilisent dans le processus d'isolation.
  La ralisation de l'isolation ressemble  un jeu. Elle est ralise en
  utilisant l'quivalent d'un bus  un seul fil reliant tous les
  priphriques _P_n_P et du programme d'isolation.

  Lors de la premire manche de ce "jeu", tous les priphriques _P_n_P
  sont  l'coute sur ce fil et envoient simultanment une squence de
  bits sur le fil. Les valeurs permises sont soit des 1 (tension
  positive) soit des "0 ouverts" sans tension (circuit ouvert ou
  troisime tat). Chaque priphrique _P_n_P commence  envoyer
  squentiellement son numro de srie, bit par bit, en commenant par
  le bit de poids fort, sur le fil.  Si l'un des priphriques envoie un
  1 sur le fil, un 1 sera reu par tous les autres. Si tous les
  priphriques envoient un "0 ouvert", on n'entendra rien sur le fil.
  L'objectif est d'liminer ( la fin de cette premire manche) tout le
  monde sauf le priphrique ayant le numro de srie le plus lev. Par
  "liminer", on entend cesser d'couter plus avant l'adresse d'criture
  que tous les priphriques encore dans la course continuent d'couter.
  On appelle galement cela "se retirer". (Il faut noter que tous les
  numros de srie sont de mme longueur).

  En premier lieu, ne prenons en considration que le bit de poids le
  plus lev du numro de srie mis sur le fil par tous les
  priphriques n'ayant pas encore d'identificateur. Si l'un des
  priphriques _P_n_P envoie un 0 (0 ouvert) mais reoit un 1, cela
  signifie qu'un autre priphrique _P_n_P possde un numro de srie
  suprieur au sien. Donc, il se retire provisoirement du jeu et
  n'coute plus ce qui se passe sur la ligne jusqu' la fin de cette
  manche (quand un identificateur est attribu au gagnant : celui qui a
  le numro de srie le plus lev).  Alors, les priphriques encore de
  la partie possdent tous le bit de poids fort (un 1), donc, nous
  pouvons supprimer ce bit et prendre en compte uniquement le "numro de
  srie tronqu" rsultant pour continuer  participer  cette manche.
  Retournez au dbut de ce paragraphe et rptez le processus jusqu' ce
  que le numro de srie complet ait t trait pour chacun des
  priphriques (voir ci-dessous comment est trait le cas o il n'y a
  que des 0).

  Il est donc clair que le numro de srie le plus lev ne sera pas
  limin de la partie. Mais qu'en est-il si les chiffres de tte (du
  numro de srie ventuellement tronqu) sont tous des 0 ?. Dans ce cas
  un "0 ouvert" est envoy sur la ligne et tous les participants restent
  en lice. S'ils ont tous des zros en tte, alors les 0 sont limins
  exactement comme les 1 au paragraphe ci-dessus. La partie continue et
  les chiffres suivants (du numro de srie) sont envoys.

   la fin de la manche (lorsque le bit de poids faible du numro de
  srie du concurrent restant a t mis), seul le priphrique _P_n_P
  ayant le numro de srie le plus lev est prsent. On lui donne alors
  un identificateur et il quitte la partie dfinitivement. Ensuite, tous
  les limins de la dernire manche (ceux qui n'ont pas encore obtenu
  d'identificateur) reviennent dans le jeu et une nouvelle manche
  commence avec un concurrent de moins. Finalement, tous les
  priphriques _P_n_P se verront attribuer un identificateur. Il est
  facile de prouver que cet algorithme fonctionne.

  Une fois que tous les identificateurs ont t attribus,ils sont
  utiliss pour s'adresser  chacun des priphriques _P_n_P pour les
  configurer et lire leur configuration. On notera que ces
  identificateurs ne sont utiliss que pour la configuration _P_n_P et ne
  sont pas utiliss pour les communications normales avec le
  priphrique _P_n_P. Au dmarrage de l'ordinateur, tous les
  identificateurs sont perdus et, donc, un BIOS PnP refait normalement
  ce processus d'isolation  chaque fois que vous remettez votre PC en
  service.


  FIN DU Plug-and-Play-HOWTO





























