Page suivante - Page précédente - Table des matières

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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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).
  5. 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 :

  1. Poste de travail --> Panneau de configuration --> Système --> Gestionnaire de périphériques.
  2. (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


Page suivante - Page précédente - Table des matières