Le HOWTO Plug-and-Play pour Linux : Comment agir avec les cartes PnP
5. Comment agir avec les cartes PnP
5.1 Introduction
Aujourd'hui, la plupart des nouvelles cartes internes sont
Plug-and-Play (PnP). Bien qu'il existe quelques logiciels sous
Linux pour gérer le PnP ils ne sont pas toujours d'utilisation facile.
Il y a 6 méthodes différentes, dont la liste suit, pour s'occuper du
PnP (mais certaines peuvent ne pas être utilisables dans notre
situation). Celle(s) à utiliser dépend(ent) de nos objectifs. Ce qui semble
être le plus efficace dans l'immédiat peut se révéler ne pas être le plus
facile et le meilleur dans le long terme. Une méthode qui paraît simple
consiste à ne rien faire et à laisser le BIOS-PnP effectuer la configuration,
mais vous devrez faire quelques investigations pour découvrir ce qu'a fait
le BIOS. Il faudrait que quelqu'un qui a tester toutes les méthodes en
fasse une comparaison et l'écrive. Vous pouvez avoir à utiliser plus d'une
méthode pour arriver à vos fins.
Chacune des solutions ci-dessus configurera les ressources du bus dans
le matériel. Seule les deux dernières solutions devraient informer le pilote
du périphérique de ce qui a été fait. Mais seule la dernière le fait sûrement
(puisque c'est le pilote lui-même qui le fait). La façon dont le pilote
se trouve informé dépend de lui et vous pouvez avoir à faire quelque chose
pour le renseigner. Voir
Indiquer la configuration au pilote
5.2 Désactiver le PnP ?
De nombreux périphériques sont uniquement PnP, sans option pour le
désactiver. Mais, pour certains, vous pouvez désactiver le PnP
avec des cavaliers ou en utilisant un programme sous Windows qui est
fourni avec le périphérique (configuration sans cavaliers). Cela évite
la tâche souvent compliquée de configuration PnP. N'oubliez
d'indiquer au BIOS que ces ressources du bus sont réservées. Il y a
aussi plusieurs raisons pour lesquelles vous pouvez ne pas vouloir désactiver
le PnP :
- Si vous avez MS Windows sur la même machine, vous voulez permettre
au PnP sous MS Windows de configurer les périphériques de façon différente
que sous Linux.
- Le champ des possibilités de choix des numéros d'IRQ (ou des adresses
de ports) etc. peut être particulièrement restreint si l'on n'utilise pas
le PnP.
- Vous avez un pilote de périphérique sous Linux qui utilise les méthodes
PnP pour chercher le périphérique qu'il contrôle.
- Si vous avez à changer la configuration dans le futur, cela peut être
plus facile en utilisant le PnP (pas de cavaliers à déplacer ou
de programme Dos/Windows à faire tourner).
- Vous pouvez avoir (ou aurez) d'autres périphériques PnP qui
auront besoin d'être configurés et vous voulez donc le prévoir (ou l'étudier)
de toute façon.
Une fois qu'ils sont configurés comme des périphériques non-PnP, ils ne peuvent
plus être configurés par un logiciel PnP ou par le BIOS (à moins que
vous ne déplaciez les cavaliers et/ou n'utilisiez à nouveau le logiciel de
configuration Dos/Windows).
5.3 Le BIOS configure le PnP
Introduction à l'utilisation du BIOS pour configurer le PnP
Si vous avez un BIOS PnP, il peut configurer le matériel. Cela
signifie que votre BIOS lit les besoins en ressources de tous les
périphériques et les configure (leur alloue les ressources du bus).
C'est un substitut de SE PnP à l'exception près que le BIOS
ne fait pas le lien entre les périphériques 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 mémoire non
volatile (ESCD). S'il trouve un nouveau périphérique ou en présence
d'un conflit, le BIOS devrait effectuer les modifications nécessaires
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 manière incomplète.
Un avantage de l'utilisation du BIOS réside dans sa simplicité puisque,
dans la plupart des cas, il n'y a rien à paramétrer (sauf à indiquer dans
le menu CMOS du BIOS que le SE n'est pas PnP). Alors que quelques
pilotes de périphériques peuvent être capables de détecter 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 démarre et donc que
toutes les ressources du bus sont prêtes à être utilisées (et trouvées)
par les pilotes de périphériques qui démarrent plus tard.
Selon MS le fait qu'un BIOS PNP soit capable de configurer au sens PnP les
périphériques (sans l'aide de MS Windows) est optionnel (pas obligatoire).
Mais il semble que la plupart de ceux créés après 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 données.
Les détails que vous aimeriez connaître concernant votre BIOS peuvent
être difficiles à trouver (ou pas disponibles). Quelques BIOS ont des
fonctionnalités PnP minimales et essaient de se décharger de la
partie difficile de la tâche de configuration sur des utilitaires
Windows. Si cela arrive, soit vous devrez trouver une autre méthode
(comme les outils isapnp) soit vous devrez essayer de paramétrer la base
de données ESCD si le BIOS en possède une. Consulter le paragraphe suivant.
La base de données ESCD du BIOS
Le BIOS entretient une base de données non volatile contenant la
configuration PnP 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 possède. L'ESCD non
seulement stocke la configuration des ressources des périphériques
PnP mais aussi stocke les informations de configuration des
périphériques non-PnP (et les repère comme étant non-PnP) pour éviter
les conflits. Les données ESCD sont habituellement sauvegardées dans un
circuit qui conserve ces données quand on arrête l'alimentation, mais
quelquefois elles sont stockées sur un disque dur ??
L'objectif de l'ESCD est de garder la dernière configuration utilisée,
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 PnP
doit mettre à jour l'ESCD de façon à 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 paramètrer l'ESCD.
Pour utiliser ce qui a été paramétré dans l'ESCD assurez-vous de
choisir "SE non-PnP" équivalent dans la CMOS du BIOS. Ensuite, chaque fois que le
BIOS démarre (avant le chargement du SE Linux) il doit configurer les choses
de cette façon. Si le BIOS détecte une nouvelle carte PnP qui
n'est pas dans l'ESCD, il doit alors allouer des ressources du bus à cette
carte et mettre l'ESCD à jour. Il peut même avoir à modifier les ressources
du bus déjà assignées à des cartes PnP existantes et modifier
l'ESCD en conséquence.
Si chaque périphérique a enregistré sa dernière configuration, il ne
devrait pas être nécessaire de les reconfigurer à chaque redémarrage de
votre PC. Mais cela ne fonctionne pas comme cela. Donc toutes les données
ESCD doivent être correctes si vous utilisez le BIOS pour le PnP.
Il y a quelques BIOS qui n'ont pas d'ESCD mais possèdent une sorte de
mémoire non volatile pour stocker les informations concernant les
ressources du bus qui ont été réservées par les cartes non-PnP. De
nombreux BIOS possèdent les deux.
Utilisation de Windows pour paramétrer l'ESCD
Si le BIOS ne paramètre pas l'ESCD de la façon que vous le voulez
(ou de la façon dont il faudrait), il serait intéressant d'avoir un utilitaire
Linux qui le fasse. Au début 1999, il n'y en avait pas. Il faut donc
essayer d'utiliser Windows pour le faire (si vous l'avez sur le même PC).
Il y a trois manières d'utiliser Windows pour essayer de paramétrer/modifier
l'ESCD. L'une consiste à utiliser l'utilitaire ICU conçu pour DOS ou
Windows 3.x. Cela devrait aussi fonctionner correctement pour Windows
9x/2k ?? Une autre méthode consiste à initialiser les périphériques
manuellement ("forcée") sous Windows 9x/2k de sorte que Windows mette
cette information dans l'ESCD lorsqu'on stoppe Windows normalement.
La troisième méthode est destinée aux périphériques anciens qui ne sont
pas plug-and-play. Si Windows les reconnaît et sait quelles
ressources du bus ils utilisent, alors Windows devrait mettre cette info
dans l'ESCD.
Si les périphériques PnP sont configurés automatiquement par
Windows sans que l'utilisateur ne le "force" à changer les paramètres, alors
ceux-ci ne seront probablement inscrit dans l'ESCD. Naturellement Windows
peut décider de lui-même de les configurer en utilisant des paramètres
identiques à ceux qui sont dans l'ESCD mais ce n'est qu'une coïncidence.
Les systèmes d'exploitation Windows 9x sont PnP et configurent, au
sens PnP les périphériques. Ils entretiennent leur propre base
de données PnP au plus profond des Registres (stockés 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 PnP.
Il y a à la fois la configuration courante des ressources PnP en
mémoire et une autre (peut-être à peu près la même) stockée sur le disque
dur. Pour la consulter (celle qui est en mémoire ?)indirectement dans
Windows98 ou pour y forcer des modifications vous utilisez le gestionnaire
de périphériques.
Dans Windows98, il y a 2 manières d'invoquer le gestionnaire de
périphériques :
- Poste de travail --> Panneau de configuration --> Système -->
Gestionnaire de périphériques.
- (cliquer sur le bouton droit de la souris) Poste de travail -->
Propriétés --> Gestionnaire de périphériques.
Puis dans le gestionnaire de périphériques vous sélectionnez un périphérique
(quelquefois en plusieurs étapes s'il y plusieurs périphériques de la
même classe). Puis cliquez sur Propriétés puis sur Ressources. Pour
essayer de modifier la configuration de la ressource manuellement,
désélectionnez "utiliser les paramètres automatiques" puis cliquez sur
"Modification des paramètres". Maintenant essayer de modifier les
paramètres, 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 paramètrage existant
de Windows mais que vous vouliez le "forcer", alors, vous devrez forcer
une modification quelconque puis forcer à nouveau les paramètres originaux.
Pour voir ce qui a été "forcé" sous Windows98 regardez dans la liste du
"matériel forcé" :
Démarrer --> Programmes --> Accessoires --> Outils système -- Information
système --> Ressources matérielles --> Matériel 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 fenêtre "Information système" vous pouvez également contrôler
comment les IRQ et les ports d'E/S ont été alloués sous Windows.
Même 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 manière différente de l'ESCD. Dans les rares cas où
tous les périphériques sous Windows sont soit des périphériques anciens
soit des périphériques "forcés", il faut que les configurations Windows
et ESCD soient identiques.
Ajout d'un nouveau périphérique (sous Linux ou sous Windows)
Si vous ajoutez un nouveau périphérique PnP et que vous ayez
paramétré 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 périphérique non PnP ancien (ou d'un
périphérique 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'intermédiaire
des menus de configuration de la CMOS) que certaines ressources du bus
qu'il utilise sont réservées et ne doivent pas être allouées par le
PnP. Cette information n'est pas sauvegardée dans l'ESCD.
Mais, en cas de conflit, il peut y avoir une option du menu BIOS permettant
de rendre prépondérant ou non, sur le contenu de l'ESCD, les choix faits
au niveau de la CMOS. Une autre méthode consiste à faire tourner ICU sous
DOS/Windows. Encore une autre consiste à installer manuellement le
périphérique sous Windows 9x/2k et de s'assurer que cette configuration
a été "forcée" (voir le paragraphe précédent). Si elle a été "forcée"
Windows devrait avoir mis à jour l'ESCD lors de l'arrêt du PC.
5.4 Isapnp
Une bonne partie de la documentation concernant isapnp est difficile à
comprendre si l'on ne
connaît pas les bases du PnP. Cet HOWTO devrait aider à la comprendre
ainsi que les FAQ (Questions fréquemment posées) qui l'accompagne.
isapnp ne concerne que les périphériques PnP sur le bus ISA (non PCI).
En lançant le programme Linux "isapnp" au démarrage, on configure ces
périphériques avec les valeurs indiquées dans /etc/isapnp.conf. Il est
possible de créer ce fichier de configuration automatiquement mais vous
devrez l'éditer manuellement pour faire des choix entre différentes options.
Avec isapnp, un pilote de périphérique, faisant partie du noyau, peut
être lancé prématurément, avant que isapnp ait paramétré l'adresse, etc.
dans le matériel. Ce qui entraîne que le pilote de périphérique ne sera
pas capable de trouver le périphérique correspondant. Le pilote utilise
la bonne adresse alors que celle-ci n'a pas encore été paramétrée dans
le matériel.
Si votre distribution Linux installe
automatiquement isapnptools, isapnp peut déjà être lancé au démarrage. 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 décisions sur la manière
de configurer à mesure que vous éditez le fichier de configuration.
Vous pouvez utiliser le programme "pnpdump" pour vous aider à créer
le fichier de configuration. Si vous utilisez "isapnp" tel quel et que
vous ayez un BIOS PnP, vous devrez probablement indiquer au
BIOS (quand vous le paramétrerez) que vous n'avez pas de SE PnP
puisque vous voudrez toujours que que le BIOS configure les
périphériques PCI. Alors que le BIOS peut également configurer les
périphériques ISA, isapnp le refera.
5.5 Utilitaires PCI
Le nouveau paquetage Utilitaires PCI (= pciutils, improprement
appelé "pcitools"), devrait vous permettre de configurer manuellement,
à la PnP, le bus PCI.
"lspci" donne la liste des ressources bus, alors que "setpci" paramètre
les allocations de ressources dans le matériel.
5.6 Corriger le noyau pour rendre Linux compatible PnP
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 matérielle". Cette adaptation peut ne pas correspondre
au noyau le plus récent. Le noyau résultant est réputé stable mais cependant
des bogues ont été signalés. Une documentation est incluse comme
serial.txt, pour montrer comment faire pour un port série. 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 personnalisée.
Un problème vient de ce que de nombreux pilotes de périphériques 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.7 Configuration par Windows
Si vous avez Windows9x (ou 2k) sur le même PC, démarrer alors simplement
Windows et laissez-le configurer le PnP. Puis lancez alors Linux
à partir de Windows (ou du DOS). On a signalé que Windows effaçait les
IRQ des registres des périphériques PCI. Dans ce cas, Linux signale qu'il
a trouvé une IRQ à zéro. Dans ce cas, vous ne pouvez pas utiliser cette
méthode.
5.8 Configuration par les pilotes de périphériques
Quelques pilotes de périphériques utilisent les méthodes PnP
pour paramétrer les ressources du bus au point de vue matériel et seulement
pour les périphériques qu'ils contrôlent. Dans ce cas, puisque le
pilote a effectué la configuration, il connaît évidemment la configuration
et il n'y a aucun besoin de lui fournir ces informations.
Le problème ici porte sur deux points. Il est difficile de mettre dans le
pilote tout ce qui est nécessaire et le pilote peut accaparer des ressources
du bus qui seraient nécessaires pour d'autres périphériques. Cela serait
plus facile pour l'utilisateur, mais un noyau Linux PnP serait
une meilleure solution. Voir
Linux doit mieux prendre en compte le <em>PnP</em>
5.9 Logiciels et documents PnP
[22 février 2002, JDNet]
|