# Hardwareparameter

Jedes Stück Hardware, das wir installieren benötigt bestimmte Parameter, damit das Betriebssystem darauf zugreifen kann. Diese Parameter sind auf die verschiedensten Art und Weisen einstellbar, sowohl aus der Sicht des Betriebssystem, als auch aus der Sicht der Hardware selbst. Moderne Erweiterungskarten, die den PCI-Bus nutzen, kümmern sich selbst um die Einstellungen dieser Parameter, ältere Erweiterungskarten für den ISA-Bus müssen von Hand konfiguriert werden.

Damit unter Linux Hardwareerweiterungen korrekt installiert werden können, ist es notwendig etwas Basiswissen über die grundlegende Funktion solcher Karten zu besitzen. Diese Grundlageninformation soll hier auf die Schnelle vermittelt werden. Im Rahmen dieser Darstellung ist es natürlich nicht möglich, einen umfassenden Kurs über die verschiedenen Mechanismen der Erweiterungskarten abzuhalten, es soll versucht werden, sich auf die wesentlichen Grundlagen zu beschränken. Diese Darstellung bezieht sich auf die Architektur von IBM-kompatiblen Rechnern, die heute den sogenannten Industriestandard bestimmen. Andere Architekturen unterscheiden sich in Kleinigkeiten von den hier dargestellten Mechanismen.

### Funktionsweise von Mainboards

Das Herz jedes Computers ist der Prozessor. Er verarbeitet die Befehle, die er aus Programmen erhält. Programme sind in diesem Zusammenhang natürlich nicht nur Anwenderprogramme, sondern auch das Betriebssystem und die von ihm verwendeten Gerätetreiber sowie das BIOS - die Sammlung grundlegender Ein- und Ausgaberoutinen (Basic Input Output System). Der Prozessor muß also in der Lage sein, sowohl die jeweiligen Befehle zu verstehen, als auch auf bestimmte Hardware zuzugreifen. Für beide dieser Handlungen greift er auf sogenannte Bus-Systeme zurück. Dabei handelt es sich zunächst einmal einfach um elektrische Verbindungen zwischen dem Prozessor und anderen Teilen des Computers.

Der wichtigste Teil des Computers - neben dem Prozessor - ist der Arbeitsspeicher. Er besteht aus einer großen Menge von Speicherbausteinen, die Daten während des laufenden Betriebs aufnehmen und speichern können. Der Zugriff auf diesen Arbeitsspeicher läuft wiederum über ein Bussystem. Damit der Prozessor genau bestimmen kann, auf welchen Teil des Speichers er zugreifen will, benötigt er ein Adressierungsschema. Jede Speicherzelle hat also eine Adresse. Will der Prozessor jetzt etwas in eine bestimmte Speicherzelle schreiben oder aus ihr lesen, so muß er zunächst einmal die Adresse dieser Speicherzelle auf den Adressbus schreiben. Dadurch öffnet sich ein Kanal auf dem Datenbus, vom Prozessor zu der angegebenen Speicherzelle. Erst jetzt können Daten auf diesem Weg übertragen werden.

### Hardwareadressen

Aus der Sicht des Prozessors sind auch Zugriffe auf alle mögliche Hardware nur Speicherzugriffe. Das bedeutet, daß auch die andere Hardware des Computers entsprechende Adressen besitzen muß. Will der Prozessor etwa ein Byte auf die serielle Schnittstelle schreiben, so ist das aus seiner Sicht kein Unterschied zu einem Schreibvorgang in den Speicher. Also benötigt er die genaue Adresse der seriellen Schnittstelle. Er kann diese Adresse auf den Adressbus legen, dadurch öffnet sich ein Kanal des Datenbusses vom Prozessor zu dem Baustein, der die serielle Schnittstelle steuert. Der Prozessor schreibt das Byte jetzt auf den Datenbus, auf der anderen Seite empfängt das entsprechende Bauteil jetzt das Byte und übernimmt die tatsächliche Ausgabe auf die Schnittstelle.

Jedes Stück Hardware, auf das der Prozessor zugreifen soll, muß also eine Adresse haben. Man spricht in diesem Zusammenhang von der IO-Adresse (IO - Input/Output - Ein/Ausgabe). Ein anderer Begriff für diese Adresse ist ioport.

Diese Hardware-Adresse ist sozusagen der Schlüssel für die Kommunikationsmöglichkeit zwischen Prozessor und Hardware. Es ist zwingend erforderlich, daß der Prozessor die richtige Adresse einer Hardware kennt, die er benutzen soll. Bei zusätzlich zu installierender Hardware (Erweiterungskarten) ist die Adresse meist einstellbar, so daß es zu keinerlei Doppelbelegung einzelner Adressen kommen kann. Denn das würde zwangsläufig zu Fehlfunktionen führen. Eine wichtige Aufgabe bei der Installation neuer Hardware ist es also, dafür zu sorgen, daß neue Hardware eine eindeutige Adresse zugewiesen bekommt, und der Prozessor diese Adresse kennt.

### Das Interrupt-System

In einem Computersystem arbeitet der (oder die) Prozessor(en) jetzt also einzelne Programmanweisungen ab, die aus dem Speicher gelesen werden und die dann Ein- und Ausgaben auf Adressen vornehmen können. Es ist jetzt aber notwendig, daß die Abarbeitung dieser Programmanweisungen zu bestimmten Gelegenheiten unterbrochen werden müssen. In diesem Zusammenhang sprechen wir von Interrupts (Unterbrechungen). Ein Interrupt ist eine Unterbrechung des normalen Programmablaufs, um eine andere Aufgabe auszuführen. Sowohl das BIOS, als auch das Betriebssystem stellen jeweils viele hundert solcher Unterbrechungen zur Verfügung. Alle dieser Interrupts sind in einer sogenannten Interrupt-Tabelle zusammengefasst.

Wenn jetzt eine bestimmte Hardware eine Eingabe an den Computer schicken will, so muß sie den Prozessor benachrichtigen, daß auf ihrer io-Adresse neue Daten liegen, die zu lesen sind. Drückt der Anwender eines Computers beispielsweise eine Taste auf der Tastatur, so liegt der Wert dieser Taste jetzt an der IO-Adresse der Tastatur an. Nur leider weiß der Prozessor das noch nicht, hat also keinerlei Veranlassung, ein Byte von dieser Adresse zu lesen.

Aus diesem Grund muß jedes Gerät, das Eingaben an den Computer zulässt die Möglichkeit haben, eine Unterbrechungsanforderung (Interrupt-Request) an den Prozessor zu schicken. Wenn der Prozessor eine solche Anforderung erhält, unterbricht er seine Arbeit und führt den zu dieser Anforderung passenden Interrupt aus. Das heißt, er führt ein kleines Programm aus, und kehrt dann zum normalen Programmablauf zurück.

Eine zwingende Voraussetzung ist es dabei aber, daß der Prozessor wiederum genau weiß, welche Interrupt-Anforderung von welchem Gerät kommt. Nur so kann er das passende Interrupt-Programm starten, das auch zu der entsprechenden Hardware gehört.

Wenn also Hardware installiert werden soll, die nicht nur Ausgaben, sondern auch Eingaben an den Computer ermöglicht, dann muß dieser Hardware ein sogenannter Interrupt Request Channel oder kurz IRQ zugewiesen werden. Wie schon bei der IO-Adresse muß der Prozessor jetzt wieder genau wissen, welcher IRQ von welcher Hardware kommt.

Einige IRQs sind bereits standardmäßig von Systemhardware belegt, andere stehen für Erweiterungen zur Verfügung. Die folgende Tabelle zeigt die gängigste Belegung eines Standard-AT Systems:

IRQ | belegt durch
--- | ---
0 | Timerbaustein
1 | Tastatur
2 | Kaskadierende Verbindung mit zweitem IRQ-Controller (dort 9)
3 | zweite und vierte serielle Schnittstelle
4 | erste und dritte serielle Schnittstelle
5 | Frei (früher zweite parallele Schnittstelle)
6 | Diskettenlaufwerk
7 | Frei (früher erste parallele Schnittstelle)
8 | RealTimeClock
9 | Frei
10 | Frei
11 | Frei
12 | Frei (meist PS/2-Maus)
13 | Frei
14 | Erster IDE-Controller
15 | Zweiter IDE-Controller

Wenn zwei Geräte auf ein- und demselben IRQ liegen, so ist die Gefahr eines Konfliktes sehr groß. COM2 und COM4 liegen z.B. standardmäßig auf dem IRQ 3. Sollten Sie also versuchen, mit einem Modem an COM4 und einer Maus an COM2 gleichzeitig zu arbeiten, kann das nicht richtig funktionieren. Moderne Rechner sind - zumindestens in einigen Fällen etwa bei PCI-Erweiterungskarten - in der Lage sich IRQs zwischen mehreren Erweiterungen zu teilen (IRQ-sharing).

### Das DMA-System

Unter dem Begriff DMA versteht man den direkten Speicherzugriff (Direct Memory Access) von Hardware auf den Arbeitsspeicher, ohne den Umweg über den Prozessor. Hardware, die schnellen und häufigen Zugriff auf den Arbeitsspeicher benötigt, kann über die Verwendung von DMA den Prozessor merklich entlasten.

Um dieses Feature zu ermöglichen sind sogenannte DMA-Kanäle vorgesehen, von denen der Rechner wiederum nicht besonders viele anbietet. Ein Standard-PC bietet acht DMA-Kanäle an, von denen einer stets belegt ist (DMA4).

Auch hier haben wir aber wiederum die Notwendigkeit, daß die Hardware wissen muß, welchen DMA-Kanal sie benutzen darf, und der Prozessor auch weiß, welche Hardware welchen Kanal benutzt. Genauso wie bei IRQs ist es essentiell, daß jeder DMA-Kanal nur von einer Hardwareinstanz benutzt wird, damit es nicht zu schweren Konflikten kommt.

### Einstellmöglichkeiten der Hardwareparameter

Die drei genannten Hardwareparameter IO-Adresse, IRQ und eventuell DMA-Kanal müssen für jede neu zu installierende Hardware eingestellt werden. Wichtig ist dabei, daß grundsätzlich jede Hardware eine IO-Adresse benötigt, Hardware, die Eingaben zulässt, dazu einen IRQ braucht und Hardware, die über direkten Speicherzugriff verfügt, zusätzlich noch einen DMA-Kanal benötigt.

Die Frage der Einstellung ist hier eine bilaterale Frage, denn die genannten Parameter müssen sowohl hardwareseitig eingestellt werden, als auch softwareseitig. Nur wenn diese beiden Einstellungen übereinstimmen, ist es möglich mit der Hardware zu arbeiten.

Die hardwareseitige Einstellung wird auf unterschiedliche Art und Weise vorgenommen, je nach verwendeter Erweiterungskartengeneration. Im Folgenden sollen kurz die üblichen Verfahren erläutert werden:

Feste Hardware auf dem Mainboard
  Fest auf dem Mainboard integrierte Hardware wie z.B. serielle Schnittstellen bekommen ihre Einstellungen über das BIOS-Setup Programm. Dort kann eingestellt werden, welche Adressen und welche IRQs diese Schnittstellen benutzen. In der Regel sind hier zwei oder drei feste Einstellungsmöglichkeiten vorgegeben.
Sehr alte ISA-Erweiterungskarten
  Auf sehr alten Karten müssen sämtliche Einstellungen hardwaremäßig vorgenommen werden. Das heißt auf diesen Karten müssen die Adressen mit Jumpern oder Dip-Schaltern eingestellt werden. In der Regel ist das nur mit einem passenden Handbuch möglich, es sei denn die Karten besitzen einen Siebdruck-Aufdruck, der die jeweiligen Einstellungen erklärt.
Etwas modernere ISA-Erweiterungskarten
  Etwas modernere Karten besitzen kleine Festspeicher (EEPROMS, Flash-EPROMS) die softwaremäßig eingestellt werden können. Dazu benötigt man ein spezielles kleines Programm, das der Hersteller solcher Karten mitliefert. Meist ist dieses Programm auf einer Diskette beigelegt und muß unter DOS gestartet werden. Es sind dann alle Einstellungen (IO-Adressen, IRQs und DMA-Kanäle) softwaremäßig einstellbar.

Die genannten drei Methoden bedingen grundsätzlich, daß auch das Betriebssystem bzw. damit der Prozessor erfährt, welche Einstellungen getroffen wurden. Wie oben schon gesagt, nur wenn beide Seiten (Hard- und Software) die gleiche Information haben, kann die Ansteuerung der Hardware funktionieren.

Modernere Systeme versuchen den Einbau von Erweiterungskarten dahingehend zu vereinfachen, daß die Karte und das Betriebssystem sich gegenseitig einigen, welche Parameter sie benutzen. Damit sollen auch Nicht-Spezialisten in die Lage versetzt werden, neue Hardware einzubauen. In diesem Zusammenhang ist häufig das Schlagwort "Plug And Play" zu hören, als etwa "einstecken und loslegen".

ISA Plug And Play Karten
  Diese Karten haben genügend "Eigenintelligenz", um sich mit dem System die notwendigen Parameter auszutauschen, wenn das verwendete Betriebssystem Plug And Play-fähig ist. Im Abschnitt 1.101.5 werden wir uns damit auseinandersetzen, wie diese Art von Karten unter Linux zum Laufen gebracht werden können.
PCI Erweiterungskarten
  PCI-Karten sind die modernen Erweiterungskarten, die in den letzten Jahren die ISA-Karten völlig vom Markt gedrängt haben. Der PCI-Bus ist ein intelligenter Bus, der bestimmte Mindestanforderungen an seine Erweiterungskarten stellt. PCI-Karten können grundsätzlich ihre Parameter mit dem Betriebssystem aushandeln, so daß hier keine manuellen Einstellungen mehr notwendig sind.

### Speicherbereiche

Manche Erweiterungskarten besitzen einen eigenen Speicher auf der Karte, entweder einen wirklichen Arbeitsspeicher, wie etwa der Bildschirmspeicher auf der Graphikkarte oder einen EPROM mit eigenem BIOS, wie z.B. Graphikkarten und SCSI-Hostadapter. Auch diese Speicherbereiche haben eine Anfangsadresse, die dem System bekannt sein muß, damit es auf den entsprechenden Speicher zugreifen kann. Man spricht in diesem Zusammenhang von Memory-Base oder kurz MemBase (die Basisadresse des Kartenspeichers).