De nos jours, pratiquement toutes les nouvelles cartes internes sont Plug-and-Play. Du coup, la configuration des ressources bus devraient être dans la plupart des cas entièrement automatique. Si un périphérique ne fonctionne pas, vérifiez s'il a été détecté, par exemple en redémarrant. Si le pilote de périphérique ne peut pas configurer les ressources, alors probablement une ou plus des méthodes du 2.6 le feront :
la section intitulée « Configuration du pilote de périphérique, réservation des ressources » ;
la section intitulée « /sys : interface de configuration pour l'utilisateur » le noyau 2.6+ (pas encore pour le PCI et quelques autres sévères limitations) ;
la section intitulée « Configuration du BIOS » (pour le bus PCI, vous avez seulement besoin d'un BIOS PCI, sinon vous avez besoin d'un BIOS PnP) ;
la section intitulée « ISA seulement : Désactiver PnP ? » par des cavaliers ou avec un logiciel DOS/Windows (mais la plupart des cartes ne le font pas) ;
la section intitulée « Bus ISA : Isapnp (outil faisant partie d'isapnptools) » est un programme que vous pouvez toujours utiliser pour configurer les périphériques PnP du bus ISA (seulement),
la section intitulée « Les utilitaires PCI » permet de configurer le bus PCI mais le pilote de périphérique devrait le gérer ;
la section intitulée « Configuration de Windows » et alors vous démarrez Linux à partir de Windows/DOS. A utiliser en dernier recours.
N'importe lequel configurera les ressources bus au niveau matériel mais seul le premier (voire le second) indiquera au pilote ce qui a été fait. La façon dont le pilote est informé dépend du pilote. Vous pouvez avoir besoin de faire quelque chose pour l'informer. Voir la section intitulée « Indiquer au pilote la configuration ?? ».
Les pilotes de périphériques (avec l'aide de fonctions du noyau) peuvent être écrits pour utiliser des méthodes PnP pour configurer les ressources bus du matériel mais seulement pour le périphérique qu'ils contrôlent. Mais beaucoup de pilotes de périphériques acceptent directement ce que le BIOS ou Linux a configuré et utilise le code fourni par le noyau pour découvrir comme ce périphérique a été configuré. Comme le pilote a vérifié la configuration et la certainement reconfiguré, il connaît de façon évidente la configuration et il n'y a aucun besoin de lui donner cette information. C'est dont la façon la plus simple de le faire car vous n'avez rien à faire si le pilote fait tout.
Si vous avez un matériel datant d'avant l'ISA PnP, le logiciel PnP Linux pourrait ne pas le savoir et pourrait ne pas connaître les ressources bus qu'il réclame. Donc, il pourrait allouer de façon erronée des ressources dont cet ancien matériel a besoin à un autre périphérique. Le résultat est un conflit de ressources mais il existe un moyen de l'éviter. Vous pouvez réserver les ressources dont cette ancienne carte ISA a besoin en configurant le BIOS au démarrage (habituellement), au module isa-pnp ou au noyau (si le support de PnP est intégré dans le noyau). Par exemple, pour réserver l'IRQ 5, donnez cet argument au module isa-pnp (ou au noyau) : isapnp_reserve_irq=5. Voir le Guide pratique sur l'invite de démarrage (BootPrompt-HOWTO). Au lieu de ..._irq, il existe aussi _io, _dma et _mem.
Pour les périphériques PCI, la plupart des pilotes configureront PnP. Malheureusement, un pilote peut récupérer des ressources bus nécessaires à d'autres périphériques (mais non alloués à eux par le noyau). Donc, un noyau Linux PnP plus perfectionné serait meilleur là où le noyau fait l'allocation pour toutes les demandes envoyées. Voir la section intitulée « Comment Linux gère-t-il le PnP ».
Depuis le noyau 2.6, il existe une nouvelle façon pour que l'utilisateur configure les ressources grâce au répertoire /sys. Mais, jusqu'à août 2004, il ne peut pas être utilisé pour une configuration dans la plupart des cas. Voir la section intitulée « Le répertoire /sys ».
Si vous avez un BIOS PnP, il peut configurer le matériel. Si le pilote ne peut pas le faire, le BIOS le peut probablement. Ceci veut dire que votre BIOS lit les besoins en ressources de tous les périphériques et les configure (en leur allouant les ressources bus). C'est un substitut pour l'OS PnP sauf que le BIOS ne peut faire correspondre les pilotes avec leur périphériques et ne peut pas non plus indiquer aux pilotes la façon dont il a configuré les périphériques. Il devrait normalement utiliser la configuration enregistrée dans sa mémoire non volatile (ESCD). S'il trouve un nouveau périphérique ou s'il existe un conflit, le BIOS devra effectuer les changements nécessaires et pourrait ne pas utiliser la même configuration que celle de l'ESCD. Dans ce cas, il devra mettre à jour l'ESCD pour refléter la situation.
Votre BIOS doit gérer une telle configuration, mais il existe des cas où il ne le fait pas correctement ou pas complètement. Le BIOS a aussi besoin de savoir via le menu CMOS si le système d'exploitation est PnP. Alors que la plupart des pilotes de périphériques seront capables de détecter automatiquement ce que le BIOS a fait, dans certains cas, vous aurez besoin de le déterminer (ce qui n'est pas toujours facile). Voir la section intitulée « Comment puis-je trouver les périphériques et comment sont-ils configurés ? ». Un avantage possible à laisser le BIOS faire cette configuration est qu'il fait son boulot avant de lancer Linux, donc c'est fait très tôt dans le processus de démarrage.
La plupart des BIOS créés après 1996 ?? peuvent configurer les ressources des bus PCI et ISA. Mais, il a été dit que certains anciens BIOS peuvent uniquement s'occuper du PCI. Pour essayer d'en savoir plus sur votre BIOS, cherchez sur le web. Merci de ne pas me demander car je n'ai pas toutes les données là-dessus. Les détails du BIOS que vous souhaitez connaître peuvent être difficiles à trouver. Certains BIOS pourraient avoir des capacités PnP minimales et attendre que le système d'exploitation fasse la configuration PnP. Si cela arrive, vous devrez soit trouver une autre méthode soit essayer d'enregistrer les informations dans la base de données ESCD si le BIOS en a une. Voir la prochaine section.
Le BIOS maintient une base de données non volatile contenant la configuration PnP qu'il essaiera d'utiliser (si vous aviez indiqué qu'il ne s'agit pas d'un système d'exploitation PnP). Elle s'appelle l'ESCD (acronyme pour Extended System Configuration Data, soit Données pour une Configuration Étendue du Système). Encore une fois, l'ESCD est optionnel mais la plupart des BIOS PnP en disposent. L'ESCD enregistre non seulement la configuration des ressources pour les périphériques PnP mais aussi celle des périphériques non PnP (et les indique en tant que tels) pour éviter les conflits. Les données de l'ESCD sont habituellement enregistrées sur un composant et restent intactes lorsque la machine est arrêtée, mais c'est parfois stocké sur un disque dur ??
L'ESCD a pour but de conserver la dernière configuration utilisée. Mais comme Linux peut modifier la configuration des périphériques (en incluant l'utilisateur avec les outils PCI ou isapnp), l'ESCD ne sera pas au courant de cette modification et ne sauvegardera pas cette configuration. Un bon système d'exploitation PnP devrait mettre à jour l'ESCD, pour que les informations qui y sont stockées puissent être utilisées par un système d'exploitation non PnP (comme un Linux standard). MS Windows 9x ne le fait que dans certains précis. Voir la section intitulée « Utiliser Windows pour configurer l'ESCD ». À partir du noyau 2.6, Linux est capable de modifier l'ESCD mais cela n'est pas encore utilisé (août 2004).
Pour utiliser ce qui a été enregistré dans l'ESCD, assurez-vous d'avoir bien spécifié que l'OS n'est pas PnP dans le CMOS du BIOS. Par la suite, à chaque fois que le BIOS démarre (avant que l'OS Linux ne soit chargé), il devrait tout configurer de cette façon. Si le BIOS détecte une nouvelle carte PnP non indiquée dans l'ESCD, alors il allouera des ressources bus à la carte et mettra à jour l'ESCD. Il pourrait même changer les ressources bus assignées aux cartes PnP existantes et modifier l'ESCD de manière concordante.
Un programme vous permet de visualiser le contenu de l'ESCD. Il affiche les IRQ, les adresses d'entrées/sorties, et cætera mais les noms de périphériques manquent (seulement les numéros d'identifiant des périphériques EISA). Il est disponible sur l'index de /home/gunther.mayer/lsescd.
Si chaque périphérique sauvegardait sa dernière configuration au niveau du matériel, la configuration matérielle ne serait pas nécessaire à chaque démarrage du PC. Mais cela ne fonctionne pas ainsi. Donc, toutes les données de l'ESCD ont besoin d'être actualisées si vous utilisez le BIOS pour PnP. Il existe des BIOS ne disposant pas d'ESCD mais ayant une mémoire non volatile pour stocker des informations concernant l'attribution des ressources bus aux cartes non PnP. Beaucoup de BIOS disposent des deux.
Éventuellement, Linux pourrait initialiser l'ESCD. Depuis Linux 2.6, une fonction du nouveau code pourrait le faire si le noyau a été compilé avec PNPBIOS. Mais elle reste pour l'instant inutilisée.
Si le BIOS ne configure pas l'ESCD de la façon souhaitée (ou de la bonne façon), alors il serait bien de disposer d'un utilitaire Linux pour le faire. Donc, vous pourriez vouloir utiliser Windows (si vous l'avez sur le même PC) pour faire cela.
Il existe trois façons d'utiliser Windows pour tenter de modifier l'ESCD. La première est d'utiliser l'utilitaire ICU pour DOS ou Windows 3.x. Il devrait aussi fonctionner pour Windows 9x/2k ?? Une autre façon est de configurer les périphériques manuellement (« en forçant ») sous Windows 9x/2k de façon à ce que Windows enregistre les informations dans l'ESCD lorsque Windows est arrêté normalement. La troisième façon est possible uniquement pour les périphériques non PnP. Si Windows connaît quelque chose sur eux, notamment quelles ressources bus ils utilisent, alors Windows enregistrera cette information dans l'ESCD.
Si les périphériques PnP sont configurés automatiquement par Windows sans que l'utilisateur ait besoin de forcer cette reconnaissance, alors ces paramétrages ne se trouveront probablement pas dans l'ESCD. Bien sûr, Windows pourrait bien décider de lui-même de configurer ce qui est enregistré dans l'ESCD, ce qui pourrait aboutir au même par coïncidence.
Windows 9x est un système d'exploitation PnP et configure automatiquement via PnP les périphériques. Il maintient leur propre base de données PnP dans la base de registre (fichiers binaires de Windows). Beaucoup d'autres données de configuration résident dans la base de registre en plus des ressources bus PnP. Il y a à la fois une configuration des ressources PnP actuelles et une autre (peut-être la même) enregistrée sur le disque dur. Pour voir ça avec Windows 98, ou pour forcer l'enregistrement des modifications, utilisez le gestionnaire des périphériques.
Dans Windows 98, il existe deux façons d'arriver au gestionnaire des périphériques :
1. Poste de travail --> Panneau de configuration --> Système --> Gestionnaire de périphériques
2. (clic droit) Poste de travail --> Propriétés --> Gestionnaire de périphériques.
Pour voir ce qui a été forcé sous Windows 98, regardez la liste des matériels « forcés » : Démarrer --> Programme --> Accessoires --> Outils système --> Information système --> Ressources matérielles --> Matériel forcé. Lorsque vous « forcez » un changement des ressources bus dans Windows, il devrait enregistrer votre modification dans l'ESCD (à condition que vous ayez quitté Windows normalement). À partir de la fenêtre « Informations système », vous pouvez aussi voir comment les IRQ et les ports d'entrées/sorties ont été alloués par Windows.
Même si Windows ne montre aucun conflit des ressources bus, il peut exister un conflit sous Linux. Ceci est dû au fait que Windows peut affecter des ressources bus différentes de celles de l'ESCD. Dans le cas rare où les périphériques sous Windows sont soit non PnP soit « forcés », alors la configuration Windows et celle de l'ESCD devraient être les mêmes.
Si vous ajoutez un nouveau périphérique PnP et avez configuré le BIOS à « pas un système d'exploitation PnP », alors le BIOS devrait automatiquement le configurer et enregistrer la configuration dans l'ESCD. S'il ne s'agit pas d'un périphérique non PnP (ou un utilisant les cavaliers), alors il existe quelques options pour le gérer.
Vous pouvez indiquer directement au BIOS (via le menu de configuration CMOS) que certaines ressources bus qu'il utilise sont réservées et ne peuvent pas être allouées avec PnP. Ceci ne met pas cette information dans l'ESCD. Il existe un menu de sélection du BIOS permettant d'indiquer si les choix CMOS supplantent ceux de l'ESCD en cas de conflit. Une autre méthode revient à lancer ICU sous DOS/Windows. Encore une autre permet de l'installer manuellement sous Windows 9x/2k puis de s'assurer que cette configuration est « forcée » (voir la section précédente). Si elle l'est, Windows devrait mettre à jour l'ESCD à l'arrêt du PC.
Les périphériques PCI sont PnP à la base donc cela ne peut pas être désactivé. Mais quelques périphériques ISA ont des options pour désactiver PnP par l'intermédiaire de cavaliers ou en lançant un programme Windows fourni avec le périphérique (configuration logicielle). Si le pilote du périphérique ne peut pas le configurer, ceci évitera la tâche probablement compliquée de la configuration PnP. N'oubliez pas de dire au BIOS que ces ressources bus sont réservées. Mais comme le support de Linux pour le PnP a été amélioré, vous ne voulez généralement pas désactiver PnP. Voici quelques arguments pour lesquels vous ne voudrez pas désactiver PnP :
Si vous avez Windows sur la même machine, alors vous pouvez permettre à PnP de configurer les périphériques différemment entre Windows et Linux.
L'ensemble des choix pour les numéros d'IRQ (ou ports d'adresse) peut être assez limité sauf si vous utilisez PnP.
Vous pourriez avoir un pilote de périphérique Linux utilisant des méthodes PnP pour rechercher le périphérique qu'il contrôle.
Si vous avez besoin de modifier la configuration plus tard, il serait plus facile de faire ceci avec PnP (sans utiliser de cavaliers ou d'avoir à lancer un programme Dos/Windows).
Une fois vos périphériques configurés sans PnP, ils ne peuvent plus être configurés par un logiciel PnP ou par un BIOS PnP (jusqu'à ce que vous changiez les cavaliers ou utilisiez le logiciel de configuration Dos/Windows).
Le programme isapnp est utilisé uniquement pour les
périphériques PnP du bus ISA (donc non
PCI). Il était vraiment nécessaire avant les noyaux 2.4.
Avec le noyau 2.4, qui a apporté des fonctionnalités permettant aux pilotes de
gérer le PnP sur le bus ISA, le programme
isapnp devient moins important. De plus, le
BIOS pourrait
configurer ISA PnP de manière
satisfaisante. Mais, le module isa-pnp (ou
l'équivalent intégré au noyau) est déjà très satisfaisant car de nombreux
pilotes de périphériques ISA l'appellent pour configurer les
ressources du bus.
Avant le noyau 2.6, cela résultait en un « fichier »
/proc/isapnp
pouvant être utilisé pour configurer
manuellement (voir isapnp.txt dans la documentation du noyau).
Dans certains cas, les distributions Linux ont été configurées pour
lancer isapnp automatiquement au démarrage. Il est
toujours utilisé en 2004 mais il n'est pas réellement nécessaire si les
pilotes de périphériques fonctionnent bien. Si vous avez besoin de le
configurer vous-même, la grande partie de la documentation d'isapnp est
difficile à comprendre sauf si vous possédez des notions de base de
PnP. Ce guide pratique devrait vous aider à le
comprendre, ainsi que la FAQ qui accompagne isapnp.
Lancer le programme isapnp au démarrage vous
permettra de configurer ces périphériques suivant les valeurs spécifiées
dans /etc/isapnp.conf
. Il est possible de créer ce
fichier de configuration automatiquement mais vous devrez alors l'éditer
manuellement pour choisir entre les différentes options. Puis pour que
le pilote connaisse ces ressources, vous avez souvent besoin de les
spécifier en tant que paramètres pour les modules appropriés (pilotes).
Ceci se fait avec des fichiers de configuration, généralement dans le
répertoire /etc
. Cherchez-y des
fichiers nommés mod*
, et cætera. Si le pilote est intégré
au noyau, alors ils pourraient parfois être donnés comme paramètre du
noyau. Voir le guide pratique
des options de démarrage.
Avec isapnp, il existait un risque qu'un pilote de périphérique, intégré au noyau, soit lancé trop tôt, avant qu'isapnp n'ait pu configurer les adresses, et cætera au niveau matériel. En conséquence, le pilote de périphérique ne serait plus capable de trouver le périphérique. Le pilote essaie la bonne adresse mais cette adresse n'est pas configurée au niveau matériel. Cela est-il toujours un problème ??
Si votre distribution Linux a automatiquement installé
isapnptools, isapnp est
probablement lancé au démarrage. Dans ce cas, il ne vous reste qu'à éditer
/etc/isapnp.conf
suivant man
isapnp.conf
. Notez que cela revient à configurer manuellement
PnP car vous prendrez les décisions sur la façon de configurer
lors de l'édition du fichier de configuration.
Si le fichier de configuration est mauvais ou n'existe pas, vous pouvez utiliser le programme pnpdump pour vous aider à créer le fichier de configuration. Il crée pour vous un fichier de configuration mais vous devrez l'éditer avec intelligence avant de l'utiliser. Il contient quelques commentaires pour vous aider. Alors que le BIOS pourrait aussi avoir configuré les périphériques ISA (si vous lui avez dit que vous ne disposez pas de système d'exploitation PnP), isapnp le refera.
La terminologie utilisée dans le fichier
/etc/isapnp.conf
peut sembler étrange au début. Par
exemple, pour une adresse d'entrée/sortie 0x3e8, vous pourriez voir « (IO 0
(BASE 0x3e8)) » à la place. « IO 0 » veut dire qu'il s'agit de
la première plage
d'adresses que ce périphérique utilise. Une autre façon d'exprimer ceci
serait :
« IO[0] = 0x3e8 » mais isapnp ne le fait pas de
cette façon.
« IO 1 » voudrait dire qu'il s'agit de la deuxième plage d'adresse
utilisée par
ce périphérique, et cætera. « INT 0 » a une signification similaire
mais
pour les IRQ (interruptions). Une carte simple peut
contenir plusieurs périphériques physiques mais l'explication ci-dessus
était seulement pour un des périphériques.
Le paquetage des utilitaires PCI (pciutils, quelque fois appelé « pcitools ») vous permet de configurer manuellement via PnP le bus PCI (avec difficulté). lspci ou scanpci liste les ressources bus alors que setpci enregistre les allocations des ressources (sauf les IRQ) dans les périphériques physiques. Il semble que setpci soit principalement utilisé dans des scripts et en fait, vous aurez besoin de comprendre le détail des registres de configuration du PCI pour pouvoir l'utiliser. Ce thème n'est pas expliqué ici, et pas plus dans la page de manuel de setpci.
Les gens l'ont utilisé pour configurer les périphériques PCI dont le pilote a échoué dans cette action. Un exemple est disponible dans le guide pratique sur les modems et le guide pratique sur les ports séries dans la sous-section « PCI : Activer un port désactivé ». Néanmoins, activer un périphérique n'est d'aucune utilité si vous n'avez pas de pilote fonctionnel pour ce périphérique.
Cette méthode utilise MS Windows pour configurer et devrait être utilisée seulement si tout le reste échoue. Si vous avez Windows 9x (ou 2k) sur le même PC, alors lancez simplement Windows et laissez-le configurer PnP. Puis lancez Linux à partir de Windows (ou DOS) en utilisant, par exemple, loadlin.exe. Il peut y avoir un problème avec les IRQ pour les périphériques PCI. Quand Windows s'arrête (sans messages) pour laisser la place à Linux, il pourrait écraser l'IRQ (en y mettant 0) qui est stocké dans un des registres de configuration du périphérique PCI. Linux se plaindra de trouver une IRQ 0.
Ce qu'on vient d'aborder arrive lorsque vous lancez Linux en utilisant un raccourci (fichier PIF). Mais un moyen de contourner ce problème est connu si vous utilisez toujours le raccourci PIF. Un raccourci est en quelque sorte l'équivalent du lien symbolique sous Linux, mais il est en fait plus que ça car il est paramétrable. Pour lancer Linux, à partir de DOS, vous créez un fichier batch (script) qui lance Linux. (Le programme qui lance Linux est dans le paquet appelé loadlin.) Ensuite, créez un raccourci PIF vers ce fichier batch et allez dans la fenêtre des propriétés du raccourci. Sélectionnez « Avancé », puis vérifiez que le « mode MS-DOS » est bien coché.
Maintenant, voici une astuce empêchant de mettre à zéro les
IRQ PCI. Cochez « Spécifier une
nouvelle
configuration MS-DOS ». Ensuite, soit vous acceptez la configuration par
défaut
qui vous est proposée soit vous cliquez sur « Configuration » pour la
modifier.
Maintenant, lorsque vous lancerez Linux en cliquant sur le raccourci, des
nouveaux fichiers de configurations (config.sys
et
autoexec.bat
) seront créés pour votre nouvelle
configuration.
Les anciens fichiers sont enregistrés comme
Config.wos
et Autoexec.wos
. Une fois
que vous avez terminé d'utiliser Linux et que vous avez arrêté votre PC, vous
aurez encore besoin de ces fichiers pour pouvoir lancer DIS la prochaine fois
que vous démarrerez votre PC. Vous devez vous assurer que les noms redeviennent
*.sys
et *.bat
. Lorsque vous quittez
Windows/DOS pour aller sous Linux, Windows s'attend que, une fois que vous avez
fini avec Linux, vous retourniez à Windows pour que celui-ci puisse restaurer
ces fichiers avec leur noms originaux. Mais ceci n'arrivera pas car lorsque
vous quitterez Linux, vous éteindrez votre PC et ne retournerez pas sous
Windows. Donc, comment renommer ces fichiers ? C'est facile, placez ces
commandes dans votre fichier batch de lancement de Linux pour qu'il renomme les
fichiers. Mettez ces commandes de renommage dans votre fichier batch juste
avant la ligne qui charge Linux.
De la même façon, il a été rapporté que vous devez cliquer sur l'onglet « Général » (de la fenêtre « Propriétés » de votre raccourci) et cochez « Lecture seule ». Sinon, Windows pourrait remettre à zéro les « Paramétrages avancées » en « Utilisez la configuration MS-DOS courante » et les IRQ PCI se retrouveraient à zéro. Comme Windows efface les IRQ lorsque vous utilisez la configuration MS-DOS courante mais il n'efface pas une nouvelle configuration (qui peut configurer tout de manière identique à l'ancienne configuration). Windows ne semble pas très cohérent.
Proposition pour un gestionnaire de configuration pour Linux 1999 (n'a jamais fait partie du noyau) ;
Livre : PCI System Architecture, quatrième édition par Tom Shanley +, MindShare 1999. Couvre les fonctionnalités PnP du bus PCI ;
Livre : Plug and Play System Architecture, par Tom Shanley, Mind Share 1999. Détails sur PnP pour le bus ISA. Une vue de PnP avec le bus PCI ;
Livre : Programming Plug and Play, par James Kelsey, Sams 1995. Détails sur la programmation pour communiquer avec un BIOS PnP. Couvre les bus ISA, PCI et PCMCIA.