Page suivantePage précédenteTable des matières

3. La solution Plug-and-Play (PnP)

3.1 Introduction au PnP

Le terme Plug-and-Play (PnP) (Installez et Utilisez) a plusieurs sens. Au sens large c'est uniquement une auto-configuration où l'on installe simplement un périphérique et que celui-ci se configure par lui-même. 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 périphérique. Dans un sens plus étroit c'est simplement le paramètrage des ressources des périphériques. Cela peut aussi concerner les spécifications qui, (entre autres choses) indiquent comment les données PnP de la ressource doivent être lues ou écrites dans les périphériques (souvent des cartes) sur le bus ISA. Les spécifications du standard PCI (et non PnP) sont de même nature pour le bus PCI.

Le Plug-and_Play (PnP) met en relation les périphériques et leurs pilotes et spécifie leurs "canaux" de communication. Sur le bus ISA, avant le Plug-and-Play, les ressources étaient configurées sur le matériel par des cavaliers et les pilotes de périphériques étaient assignés aux ressources par des fichiers de configuration (ou quelque chose du même style) ou par des tests des périphériques à des adresses où ils étaient supposés se trouver. Le bus PCI a été compatible PnP dès le début et il a été trivial d'implémenter le PnP pour ce bus. Mais comme les spécifications 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 matériel que l'on appelle aujourd'hui PnP).

3.2 Comment cela fonctionne-t-il ? (explication simplifiée)

Voici une explication très simple de la façon dont fonctionne le PnP. Le programme de configuration PnP (éventuellement un programme du BIOS) recherche tous les périphériques PnP 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 sûr, s'il y a des ressources du bus réservées par des périphériques (anciens) non PnP (dont il a connaissance), il ne les attribue pas. Puis il utilise un certain critère (non précisé dans les spécifications PnP) pour attribuer les ressources de façon à ce qu'elles n'entrent pas en conflit et que tous les périphériques obtiennent ce dont ils ont besoin. Il indique alors à chaque périphérique physique quelles ressources du bus lui ont été affectées et chacun se configure alors pour n'utiliser que les seules ressources du bus qui lui ont été affectées.

Par exemple, supposons qu'une carte carte ait besoin d'une interruption (d'un numéro d'interruption) et de 1 MB de mémoire partagée. Le programme PnP lit cette requête dans la carte. Il attribue alors le numéro d'interruption 5 (IRQ 5) et un méga-octet d'espace mémoire à partir de l'adresse 0xe9000000. Ce n'est pas toujours aussi simple car la carte peut utiliser uniquement certains numéros d'interruption (seulement pour ISA) ou n'accepter qu'un certain domaine d'adressage. Les détails sont différents pour les bus ISA et PCI, les choses étant plus complexes pour le bus ISA

Le logiciels PnP peut utiliser quelques raccourcis. L'un d'entre eux consiste à garder une trace de la manière dont il a assigné les ressources du bus lors de la dernière configuration (lors de la dernière utilisation de l'ordinateur) et la réutiliser. 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 mémoire non volatile de votre PC (connu sou le nom d' ESCD; voir La Base de données ESCD du BIOS).

Sous Linux, c'est le règne du "chaque périphérique pour lui-même" et il n'existe aucun registre centralisé des affectations de ressources. Certains pilotes de périphériques enregistrent la dernière configuration qu'ils ont utilisé et la réutilisent à la prochaine remise en route de l'ordinateur. Implicitement, ils considèrent que le reste du matériel n'aura pas besoin d'utiliser ses ressources du bus.

Si les périphériques se souvenaient de leur configuration précédente, il n'y aurait aucun matériel pour les reconfigurer au prochain démarrage, mais ils semblent oublier leur configuration lorsque l'on stoppe l'alimentation. Certains périphériques ont une configuration par défaut (mais pas nécessairement la dernière utilisée). Le programme de configuration PnP doit être exécuté à chaque mise sous tension du PC. De même, si l'on ajoute un nouveau périphérique, celui-ci a besoin d'être configuré. L'allocation de ressources du bus à ce nouveau périphérique peut nécessiter d'en enlever à un périphérique existant et de donner à celui-ci des ressources du bus différentes qu'il pourra utiliser à la place.

3.3 Démarrage du PC

Lors de la mise sous tension initiale du PC le circuit BIOS exécute son programme pour démarrer l'ordinateur (la première étape consistant à tester le matériel). Si le système 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 PnP, alors le BIOS doit utiliser une méthode PnP pour le trouver. Donc, pour permettre à l'utilisateur de configurer manuellement la mémoire CMOS du BIOS et de réagir aux messages d'erreur apparaissant au démarrage de l'ordinateur, un écran (une carte vidéo) et un clavier sont également nécessaires. Donc, le BIOS doit configurer, selon la procédure PnP, ces périphériques lui-même.

Une fois que le BIOS a identifié le disque dur, la carte vidéo et le clavier il est prêt à entamer le processus de démarrage (chargement du système d'exploitation du disque dur vers la mémoire centrale). Si vous avez indiqué à votre BIOS que vous aviez un système d'exploitation PnP (SE PnP ou PnP OS), il devrait commencer à démarrer le PC de la manière indiquée ci-dessus et laisser le soin de terminer la configuration PnP au système d'exploitation. Autrement, un BIOS-PnP essaiera de réaliser le reste de la configuration PnP des périphériques avant le chargement du système d'exploitation (mais ne chargera pas leurs pilotes).

3.4 Les bus

Le bus ISA est le vieux bus du vieil IBM PC alors que le bus PCI est un bus plus récent et plus rapide de Intel. Le bus PCI a été conçu pour ce que l'on appelle aujourd'hui le PnP. Il est facile (si l'on compare au bus ISA) de voir comment les ressources du bus ont été assignées aux périphériques. Pour voir comment cela s'est passé consulter le "fichier" /proc/pci (/proc/bus/pnp/devices pour les noyaux 2.2+), les messages de démarrage sur votre écran (utilisez shift-PageUp pour revenir en arrière), ou utilisez les utilitaires PCI (pour les noyaux 2.2+).

Pour ce qui concerne le bus ISA, il y a un vrai problème pour implémenter le PnP 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 périphériques physiques. Il en résulte que la manière dont le PnP a été implanté sur le bus ISA est très compliquée. Un livre entier a été rédigé à ce sujet. Voir Le livre du PnP. Entre autres choses, le programme PnP doit attribuer à chaque périphérique PnP un "identificateur" provisoire de façon à pouvoir l'adresser pour la configuration PnP. L'assignation de ces "identificateurs" provisoires est appelée "isolation". Voir Isolation pour de plus amples détails.

Finalement, le bus ISA finira par disparaître. Ce jour là, le PnP deviendra plus simple puisqu'il sera facile de voir comment le BIOS a configuré le matériel. Il restera cependant nécessaire de mettre en correspondance les périphériques et leurs pilotes ainsi que de configurer les périphériques ajoutés alors que le PC est en fonctionnement. Ces besoins seraient satisfaits si Linux était un système d'exploitation PnP.

3.5 Linux doit mieux prendre en compte le PnP

Le PnP (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 PnP n'avait jamais été "inventé". Finalement, le bus ISA aura disparu et le bus PCI à la mode PnP prévaudra de sorte que nous aurons alors un PnP facile à implanter. Mais, que l'on veuille ou pas, la plupart des nouveaux matériels ISA aujourd'hui sont PnP et Linux ne peut pas faire autrement que de gérer efficacement le PnP. Cependant le Linux standard (celui du début 1999) rend la gestion du PnP compliquée (spécialement pour le bus ISA) alors que le but du PnP était de rendre les choses faciles.

D'une certaine façon, Linux est un peu PnP pour le bus PCI. Quand le PC démarre vous pouvez noter, en lisant les messages sur la console, que certains pilotes de périphériques Linux trouvent leurs périphériques (et les ressources du bus que le BIOS leur a attribué). Mais il y a des situations où un système d'exploitation PnP pourrait prendre les choses en compte de manière plus satisfaisante :

  1. En cas de pénurie de ressources du bus;
  2. S'il y a plus d'un pilote pour un périphérique physique;
  3. Si un pilote de périphérique activé ne peut pas trouver le périphérique physique;
  4. Installation à chaud d'un périphérique.
Les utilisateurs de Linux ne devraient pas avoir à plonger dans les détails du PnP pour configurer leurs périphériques PnP ISA comme ils doivent le faire. Une solution pourrait consister à avoir une version standardisée du noyau qui supporterait le Plug-and-Play sur les bus ISA, PCI et autres. Un correctif pour le noyau a été écrit, bien que la plupart des pilotes ne le gèrent pas. Il ne fait pas partie du Linux standard. Voir Correctif noyau.


Page suivantePage précédenteTable des matières