Afin de compiler un noyau (kernel) Linux en toute conscience et comprendre pourquoi il doit être « comme-ci ou comme-ça », nous allons étudier quelques principes de bases de l'architecture des cartes mères compatibles PC. Nous allons définir des termes techniques souvent entendus, mais parfois sans en comprendre le sens (le discours commercial fait des ravages, en mettant plus en avant l'image et le « prestige », plutôt que la compréhension et le sens des choses), et par l'occasion, lever quelques confusions faites régulièrement l'association trop directement faites entre les fonctionnalités les plus intriquées.
Dans cette page ...
Raccourci éventuel
Les principaux termes pour parler des cartes mères PC
Les bus en général
Les bus ISA/IESA , PCI, AGP et PCMCIA
Les bus PCI
Les autres bus : AGP, PCMCIA
La gestion de l'energie : APM et ACPI
L'USB, le Plug'n Play et le Hot-Plug
Les contrôleurs de disque : IDE/IEDE et SCSI (et ATAPI)
La suite ...
Raccourci éventuel
Ces pages au sujet des aspects matériels pourront être omis en première lecture, et si vous le souhaiter, vous pouvez passer directement à la suite concernant les aspects systèmes et logiciels d'une installation à base de noyau Linux : Le processus permanent Init
Les principaux termes pour parler des cartes mères PC
Voici un aperçu des termes que nous allons discuter ici :
- ISA
- EISA
- PCI
- AGP
- USB
- PnP (Plug and Play)
- Hot-Plug (connection à chaud)
- PCMCIA
- APM
- ACPI
- IDE
- EIDE
- SCSI
Les bus en général
Le bus de la carte mère (à ne pas confondre avec le bus du processeur, même si leurs rôles sont comparables), permet au composants et au périphériques de communiquer avec le processeur, et parfois même de communiquer directement entre eux ou avec la mémoire, sans passer par le processeur (ce qui accélère les opérations qui ne passent plus par un intermédiaire).
Les bus ISA/IESA , PCI, AGP et PCMCIA
Les bus ISA sont assez anciens, puisqu'ils sont apparus en 1981 avec les tout premiers PC d'IBM. Quelques années plus tard, en 1988 environ, sont arrivés les bus EISA, qui étaient des extentions plus rapides des bus ISA. On désigne également par « carte ISA », les cartes de périphériques pouvant êtres connectées à un bus ISA (par extention de sens, un peu comme on parle du bureau pour désigner la pièce où est rangé le meuble qu'on appel un bureau). Les bus IESA acceptaient les cartes conçues pour les bus ISA, et pour cette raison qu'ils étaient compatibles, on parlait le plus souvent de bus ISA, pour parler indistinctement du bus ISA ou EISA.
On entend souvent dire ça-et-là que les bus ISA ont totalement disparu. Cette affirmation est totalement incompréhensible tant elle est fausse (par ignorance). Les bus ISA existent toujours, et on les trouve même encore sur les machines de bureau récentes. De 1981 à 2007, ces bus ISA auront vécu donc une longue histoire (ce qui est eceptionel dans le monde de l'informatique).
Vu leur importances, ces deux bus devront êtres supportés par notre noyau Linux. Et on maintiendra ce support même pour les machine les plus récentes ne disposant plus de bus ISA, car pour ces machines à grande capacité de mémoire, les quelques Kilo octets consomés par ce support, ne sont que poussières.
Les bus PCI
Les bus PCI, qui apparurent avec les processeurs Pentium, sont différents des bus ISA. Bien sûr ils ont été conçus pour êtres plus rapides, mais ils ont des fonctionalités différentes également. Le bus PCI permet aux périphériques de communiquer directement entre-eux, ou de communiquer directement avec la mémoire. Il faut tout de même noter à ce sujet, qu'une certaine communication directe avec la mémoire étaient déjà possible avant, même sur les machines à bus ISA, par l'intermédiaire de ce que l'on appel le DMA (Direct Memory Acces - Acces Direct à la Mémoire). Mais nous n'entrerons pas dans ce détail. Notez seulement que même avec le PCI, l'accès direct à la mémoire repose toujours le DMA, et comme souvent donc, c'est une exemple d'évolution technologique reposant sur la technologie précédente. Cependant, cette possibilité offerte par le bus PCI, de faire communiquer les composants directement entres-eux étaient, elle, totalement nouvelle.
C'est également avec le PCI qu'est apparu cette fonctionalité nommée « Plug and Play », ou encore « PnP » (que nous définirons plus loin dans cette page). Du moins, pour être juste, c'est à cette époque que le PnP a été démocratisé, car la fonctionalité PnP peut fonctionner également avec les périphériques connectés à un bus ISA, et sans qu'aucun bus PCI ne soit présent. Nous y reviendrons plus loin.
Comme pour le DMA, qui existait déjà avec le bus ISA, le PnP existait donc également avec le bus ISA. Et comme la communication directe entre périphériques fût par contre une inovation du PCI en propre, la fonctionalité Hot-Plug (voir plus loin), a été spécifiquement introduite avec le PCI, bien qu'il existe une forme de lien entre le PnP et le Hot-Plug.
Le bus PCI est spécifique de certaines machines, et n'existe donc pas sur les plus anciennes. Pour cette raison, on créera des noyau Linux avec support PCI et d'autres sans support PCI. Mais par contre, les noyaux avec support du PCI, devront également supporter l'ISA. Nous aurons donc : ISA ou PCI + ISA.
Les autres bus : AGP, PCMCIA
Les autres bus, tels que AGP et PCMCIA, sont pour l'instant à part. Le processeur ne communique pas directement avec eux, car il n'y est pas lié. En conscéquence, ils ne sont pas gouvernés par le processeur, et bien qu'ils fassent partie de la carte mère, ils ne concernent pas le système d'exploitation ou le logiciel (système d'exploitation et logiciels qui evoluent dans le processeur). Pour cette raison, bien que le noyau Linux puisse fonctionner sur des systèmes équipés de bus AGP et PCMCIA, il n'a pas besoin de support pour ces bus, car ces bus sont connectés à un bus PCI, et c'est avec le bus PCI que le processeur communique.
Le bus AGP est ainsi connecté au bus PCI et à la carte graphique (il fait un pont entre les deux), et le bus PCMCIA, qui existe généralement sur les ordinateurs portables, mais pas seulement, est connecté aux extentions comme les lecteurs de carte mémoire (commes les cartes mémoire des appareils photos numériques) d'un coté, et au bus PCI de l'autre coté. Les bus AGP est PCMCIA sont donc dédiés à des périphériques particulier : crate graphique pour l'AGP et extentions ou carte mémoire, pour le PCMCIA. D'ailleurs, le bus PCI se trouvait lui-même dans cette situation à ses propres débuts : il était reservé aux cartes graphiques, et servait de pont entre le bus ISA et la carte graphique. Il se peut donc qu'un jour le bus AGP ou PCMCIA finissent eux aussi par servir de bus principale (bus central), et le jour où ceci se produira, il y aura nécéssité pour le noyau Linux de les supporter direcrement. En effet, le jour où les bus AGP et PCMCIA comuniqueront directement avec le processeur, alors le noyau Linux devra savoir les prendre en charge (car n'oublions pas que ce que fait le processeurs, c'est ce que lui commande le noyau et les applications). Mais il est fort probable que le bus PCI ait encore de beaux jours devant lui, et que comme le bus ISA, il ne disparraisse pas de si-tôt.
La gestion de l'energie : APM et ACPI
On parle de BIOS (le BIOS est petit programme essentiellement utilisé à l'allumage de l'ordinnateur) AMP ou ACPI, pour parler d'un BIOS qui est capable de mettre plus ou moins en veille certains composants de la machine, lorsque celle-ci est sous-utilisée. L'effet le plus visible de cette fonction est la mise en veille des disques durs et l'extinction automatique de l'écran (à ne pas confondre avec l'écran de veille), tout ceci à-fin d'économiser l'ernergie consomée, pour des questions environnementales, et également pour augmenter la durée de fonctionnement des ordinnateurs portables.
Chaque composant et périphérique de la machine a ses propres manières d'économiser l'energie et de se mettre en veille. Et plus la machine est complexe (par le diversité de ces composants), plus la gestion de l'économie de l'energie ochestré par le BIOS ou le système d'exploitation sera complexe. Il existe deux standards actuellement (d'autres viendront peut-être à l'avenir) en ce domaine : l'APM et l'ACPI. L'APM, apparu dans les années 1990, est le plus ancien de ces deux standards, et il est donc le mieux supporté, le mieux connu et donc encore également le plus stable. Le noyau Linux supporte bien l'APM, mais moins bien l'ACPI. L'ACPI doit même être évité avec le noyau Linux, car il a été chez quelques personnes, la cause d'accidents matériels graves, allant même jusqu'à la destruction de certains composants de la machine, la rendant inutilisable. Notre noyau Linux ne devra donc supporter que l'APM et pas l'ACPI.
De plus, et bien que l'APM ne soit apparu que dans les année 1990, on maintiendra ce support même pour les noyaux destinés à des machines plus anciennes, car la prise en charge de l'APM ne consome que peu d'espace mémoire. A savoir également que même les anciennes machines sont souvent équipées d'un écran pouvant se mettre en mode veille (veille de l'écran, et non pas écran de veille).
L'USB, le Plug'n Play et le Hot-Plug
Ces trois fonctionnalités, tout à fait différentes, sont volontrairement mises ensemble dans ce chapitre, pour la raison qu'elles sont liées, et même tellement liées, qu'elles en sont souvent confondues ou trop directement liées, à tort. Nous allons d'abord les décrire séparement, puis souligner les raisons pour lesquels ces éléments sont souvent confondus, ce qui nous permettra de souligner leurs relations et de mettre en évidence les manières de ne pas les confondre.
L'USB est une connection universelle, qui a remplacé depuis 2000 environ, un ensemble de connecteurs diversifiés (port série et port parallèle ou PS/2 surtout) et lents. L'USB remplace différents types de connecteurs par un seul, et se montre nettement plus rapide.
Le Plug and Play, qui signifie « Brancher et faire marcher », est un protocol de configuration automatique des périphériques. Depuis le Plug and Play, plus besoin de mettre les mains dans la machine pour configurer les périphériques (seulement pour les mettre en place), et encore moins besoin de jouer avec des interrupteurs (les cavaliers) mal documentés et aux effets souvent imprévisibles. Tout comme pour le protocol d'économie de l'energie, le Plug and Play est mis en pratique par le BIOS, au démarrage de la machine, ou plus tard, par le système d'exploitation.
Le Hot-Plug, qui signifie « Brancher à chaud », signifie que l'on peut connecter des périphériques sur la machine, même lorsque celle-ci est allumée. C'est cette capacité qui est mise en oeuvre, quand par exemple vous connectez un appareil photo numérique à une machine sous Windows, et que Windows vous ouvre automatiquement le dossier d'image de l'appareil photo. La plupart des périphériques Hot-Plug sont externes, mais certains peuvent même êtres internes (comme les cartes PCMCIA par exemple), allant jusqu'à la possibilité d'ajouter de la mémoire pendant que la machine est en fonctionnement (mais cette dernière possibilité est tout de même reservée aux serveurs web et à certains types de machines professionelles).
Pourquoi ces trois termes sont-ils souvent confondus ? Parce qu'ils sont étroitement liés dans la pratique. Ainsi, la possibilité de connecter un périphérique à chaud pendant que la machine est en fonctionnement (Hot-Plug), nécéssite que ce périphérique puisse être configuré automatiquement, sans quoi son usage ne serait pas pratique (c'est que l'on appel « amméliorer l'expérience de l'utilisateur »). Ensuite, la possibilité de connecter et déconnecter un périphérique librement, nécéssite pour être confortable, que ce branchement se fasse sur un type de connecteur simple, universel, et dont les protocols conviennent à une grande diversité de périphérique. C'est le rôle de l'USB. Et effectivement, les périphérique Hot-Plug et Plug and Play, sont souvent désignés, par abus de langage, sous le terme de « périphérique USB ».
De l'appréciation de ces différences, résultent certaines remarques : l'une ou l'autre de ces trois fonctions peut exister sur une machine qui ne dispose pas nécéssairement de ces trois fonctions en même temps. Par exemple, et bien que ces fonctions soient apparues principalement en même temps que l'arrivé du PCI (que nous avons vus précédement), certaines de ces fonctions existent sur des machines ne disposant pas de bus PCI. C'est le cas de l'USB, pour lequel trop de personnes ignorent qu'il existat et existe toujours, sur des machines organisées autour d'un bus ISA. On parle dans ce cas précis, de ISA Plug and Play. Le noyau Linux reconnais les périphériques Plug and Play sur les bus ISA. En fait, cela se comprend aisement : le Plug and Play est d'abord une affaire de protocol, et concerne donc principalement les périphériques d'un coté, et les programmes qui les gère de l'autre coté (le BIOS et le noyau du système d'exploitation). Ce protocole qui définie essentiellement des messages échangés (et une sémantique spéciale), peut aisement être transmis sur n'importe quel type de bus, et peut donc être passer par un bus ISA.
Le Hot-Plug, qui a plus d'implication technique et physique, nécéssite lui un bus particulier : le PCI. Le bus ISA ne peut pas supporter la connection à chaud, car il n'a pas été conçu à cette fin. Le noyau Linux, supporte le Hot-Plug aussi bien qu'il le fait pour le Plug and Play.
L'USB ne concerne lui pas, ni le bus, ni le BIOS (le BIOS ne gère pas l'USB, il en est seulement client). On pourra donc à-priori, tout comme pour le Plug and Play, trouver de l'USB sur n'importe quel type de machine organisée autour de n'importe quel type de bus. Et effectivement, il existe des adaptateurs USB, tout comme il existe des adapteur de connecteur de cable audio ou des adaptateurs de cable de télévision. Les adapteurs USB fonctionnent sur le même principe : un connecteur double. Il existe par exemple des adapteur USB pour les ports séries, pour les ports parallèle, ou encore des carte de prises USB qui se connectent sur un port PCI. Comme pour le Plug and Play, il faudra donc pouvoir supporter l'USB sur tous les types de machine.
Concernant le support de notre noyau pour ces fonctionnalités : nous configureront le support de l'USB et du Plug and Play pour tous les types de machines. Le Hot-Plug lui nécéssite le PCI, et ne sera configuré que pour les noyaux destinés à fonctionner sur des machines diposant de bus PCI. On pourrait imaginer une implémentation du Hot-Plug même sur un bus ISA, mais cette implémentation devrait reposer sur le logiciel, par une scrutation fréquente des périphériques pour les tester, un peu comme le fait Windows pour le lecteur de CDROM. Mais Linux ne fonctionne pas comme Windows, et ne scrute par exemple pas la présence d'un disque dans le lecteure de CDROM. Il n'y a pas sous Linux de notion de Hot-Plug par scrutation.
Les contrôleurs de disque : IDE/IEDE et SCSI (et ATAPI)
Finissons par une question qui n'est pas la moindre, qui appelera peu de commentaires, mais tout de même une relation innatendue avec les bus ISA.
IDE et EIDE (une version étendue de IDE), sont une norme pour les contrôleurs de disque dur et autres périphériques de stoquage, comme les lecteurs de CD et CD-ROM et certains des derniers lecteurs de disquettes. On peut comprendre un contrôleur comme étant une interface, et plus précisement une interface de commandes (un peu comme un panneau de commande, mais sur lequel agissent les logiciels, un panneau de commandes sans boutons). Le SCSI est lui aussi une interface pour les contrôleurs de disques et autres. Il est plus rapide que l'IDE, mais coute (ou coutait) également nettement plus chèr, et était donc reservé à quelques machines professionelles. Sa présence sur une machine grand publique est tellement rare que notre configuration du noyau Linux, destinée au grand publique, ne l'intégrera pas. Plus courant est l'ATAPI, qui utilise une interface IDE, mais avec un protocol similaire à celui de l'interface SCSI. L'ATAPI trouve un usage fréquent avec les lecteures de CD IDE, ou encore avec les lecteurs ZIP sur port parallèle (oui, on peut simuler toute sorte d'interface sur le port parallèle, mais c'est évidement nettement plus lent).
On trouvait les disques IDE et EIDE sur les machines architecturées autour d'un bus ISA/EISA. Mais les disques IDE sont également présents sur les machines équipées de bus PCI. Ces machines voient généralement leurs disques IDE êtres connectés sur un bus ISA. Pour cette raison, nous configurerons le noyau pour le support ISA, même dans sa configuration destinée aux machines équipées de bus PCI, et ce, même si les bus ISA sur ces machines, semblent être utilisées comme des ponts, et non pas comme bus centrale (le support sera par soucis de fiabilité, car nous ignorons si dans cette configuration le noyau peut oui ou non accéder au bus ISA).
La suite ...
La suite : Les options du noyau Linux
