Andere PC-Busse

PCI und ISA sind die am häufigsten verwendeten Peripherie-Geräte in der PC-Welt, aber es sind nicht die einzigen. Dieser Abschnitt faßt die Merkmale der anderen Busse zusammen, die es auf dem PC-Markt gibt.

MCA

Die Micro Channel Architecture (MCA) ist ein IBM-Standard, der in PS/2-Rechnern und einigen Laptops verwendet wird. Das Hauptproblem bei MCA ist die fehlende Dokumentation, was bis vor kurzem zu einer fehlenden MCA-Unterstützung in Linux geführt hat.

Auf der Hardware-Ebene kann Micro Channel mehr als ISA. Es unterstützt Multimaster-DMA, 32 Bit-Adreß- und -Datenleitungen, gemeinsam genutzte Interrupt-Leitungen und die geographische Adressierung für den Zugriff auf Konfigurationsregister auf den Karten. Solche Register werden Programmable Option Select (POS) genannt, haben aber nicht alle Features von PCI-Registern. Die Linux-Unterstützung für Micro Channel enthält Funktionen, die an Module exportiert werden.

Ein Gerätetreiber kann den Integerwert MCA_bus auslesen, um festzustellen, ob er auf einem Rechner mit Micro Channel läuft. MCA_bus hat nur dann einen von Null verschiedenen Wert, wenn der Kernel auf einem MCA-Rechner läuft. Wenn das Symbol ein Präprozessor-Makro ist, dann ist auch das Makro MCA_bus__is_a_macro definiert, und wenn MCA_bus__is_a_macro undefiniert ist, dann ist MCA_bus eine Integer-Variable, die an modularisierten Code exportiert wird. Sowohl MCA_bus als auch MCA_bus__is_a_macro sind in <asm/processor.h> definiert.

EISA

Der Extended ISA-Bus (EISA) ist eine 32-Bit-Erweiterung von ISA mit einem kompatiblen Verbindungsstecker; ISA-Karten können in einen EISA-Steckplatz gesteckt werden. Die zusätzlichen Drähte werden unter den ISA-Kontakten durchgeleitet.

Wie PCI und MCA ist auch der EISA-Bus für Jumper-lose Geräte entworfen worden. Er hat dieselben Features wie MCA: 32-Bit-Adreß- und -Datenleitungen, Multimaster-DMA und gemeinsam genutzte Interrupt-Leitungen. EISA-Geräte werden von der Software konfiguriert, benötigen aber keine besondere Unterstützung durch das Betriebssystem. Im Linux-Kernel gibt es bereits EISA-Treiber für Ethernet-Karten und SCSI-Controller.

Ein EISA-Treiber überprüft den Wert von EISA_bus, um zu erfahren, ob der Rechner einen EISA-Bus hat. Wie bei MCA_bus ist auch EISA_bus entweder ein Makro oder eine Variable, je nachdem, ob EISA_bus__is_a_macro definiert ist oder nicht. Beide Symbole sind in <asm/processor.h> definiert.

Für die Treiber gibt es keine spezielle EISA-Unterstützung im Kernel, und der Programmierer muß sich selbst um die ISA-Erweiterungen kümmern. Die Treiber verwenden standardisierte EISA-I/O-Operationen, um auf die EISA-Register zuzugreifen. Sie können die Treiber, die es schon im Kernel gibt, als Beispiel-Code verwenden.

VLB

Eine weitere Erweiterung von ISA ist der VESA Local Bus, der die ISA-Steckverbindung durch einen dritten, längs dahinter angeordneten Slot erweitert. Dieser zusätzliche Slot kann auch allein von VLB-Geräten verwendet werden, weil alle wichtigen Signale von der ISA-Schnittstelle auch hierher geführt werden. Damit können Geräte gebaut werden, die in einen VLB-Steckplatz gesteckt werden, ohne den ISA-Steckplatz zu benutzen. Solche Geräte sind allerdings sehr selten, weil die meisten Geräte an die Rückwand heranreichen müssen, damit ihre externen Anschlüsse zugänglich sind.

Der VESA-Bus hat sehr viel eingeschränktere Fähigkeiten als EISA, MCA und PCI und verschwindet vom Markt. Es gibt keine spezielle Kernel-Unterstützung für VLB. Sowohl der Lance-Ethernet-Treiber als auch der IDE-Festplattentreiber in Linux 2.0 können mit den VLB-Versionen der jeweiligen Geräte umgehen.