Inhaltsverzeichnis
Beschreibung: Prüfungskandidaten sollten in der Lage sein, verschiedene Karten für die unterschiedlichen Erweiterungssteckplätze zu konfigurieren. Sie sollten die Unterschiede zwischen ISA- und PCI-Karten in Hinsicht auf Konfigurationsfragen kennen. Dieses Lernziel beinhaltet das korrekte Setzen von Interrupts, DMAs und I/O-Ports der Karten, speziell um Konflikte zwischen Geräten zu vermeiden. Ebenfalls enthalten ist die Verwendung von isapnp, wenn es sich um eine ISA PnP-Karte handelt.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen
- /proc/dma
- /proc/interrupts
- /proc/ioports
- /proc/pci
- pnpdump(8)
- isapnp(8)
- lspci(8)
Alles, was für dieses Thema wichtig ist, wurde schon in den Abschnitten
besprochen. Hier also nur noch eine kurze Zusammenfassung:
Unterschied zwischen ISA und PCI
Die Unterschiede zwischen ISA-Karten und PCI Karten wurden im Groben bereits unter Hardwareparameter besprochen. Wichtig ist hier insbesondere, daß PCI ein System ist, das die bei ISA eher wackelige Funktionalität des Plug-and-Play wirklich standardisiert übernommen hat. Das heißt, es existieren weltweite Standards, wie sich eine PCI-Karte gegenüber dem System ausweist. Jeder Hersteller von PCI-Karten ist zentral registriert (ähnlich wie bei der Vergabe der Hardware-Adressen bei Netzwerkkarten) und hat eine eindeutige ID. Jedes Gerät, das der Hersteller produziert, bekommt wiederum eine eindeutige ID, die bei der Bestimmung der Funktionalität hilft. Zudem hat jede PCI-Karte die entsprechenden Informationen (IDs und ausgeschriebene Beschreibung) auf einem kleinen ROM-Speicherstein gespeichert und kann sich so gegenüber einem System ausweisen. Linux speichert die Informationen über diese IDs in der Datei /usr/share/misc/pci.ids.
Im Gegensatz zu ISA-Karten ist also bei PCI Karten niemals die manuelle Vergabe von Hardware-Parametern (IO-Ports, IRQs, DMA-Kanäle) notwendig. Linux unterstützt die PCI-Technik vollständig.
Die ISA Karten benötigen unter Linux grundsätzlich immer diese Parameter, egal, ob sie alte Karten mit manueller Einstellung sind, oder Plug and Play Karten. Bei den letzteren wird das Programm isapnp benutzt, um die Einstellungen festzulegen, beim Laden der Module müssen die Einstellungen aber trotzdem vorgenommen werden.
Um von Vorneherein Mißverständnisse auszuschließen, hier noch eine kurze Beschreibung des AGP-Busses für Graphikkarten. Der AGP-Bus ist – technisch gesehen – ein eigenständiger PCI-Bus mit einer anderen Bauform der Steckverbinder. Dieser Bus hat nur einen Steckplatz und der ist für die Graphikkarte gedacht. Der Grund für diese Technik liegt in dem besonders großen Datentransfer-Volumen von Graphikkarten. Um einen ungebremsten Transfer zwischen Computer und Monitor sicherzustellen, wurde für diese Aufgabe ein eigenständiger Bus entwickelt, bei dem sich die Graphikkarte die Leistung des Bussystems nicht mit anderen Karten teilen muß.
PCI-Bussysteme werden intern ähnlich adressiert wie SCSI-Systeme. Auch hier gibt es eine dreigeteilte Adressierung in der Form
Busnummer:Steckplatznummer.Funktionsnummer
Die Busnummer für den normalen PCI-Bus ist 00, die für den AGP-Bus ist 01. Die beiden Bussysteme werden also tatsächlich als unterschiedliche Systeme behandelt. Die Funktionsnummer steht für das jeweilige Gerät, das die entsprechende Funktionalität zur Verfügung stellt.
Das Programm lspci
Damit Linux in die Lage versetzt wird, den PCI-Bus zu scannen, existiert das Programm lspci. lspci ist ein Hilfsmittel, um Informationen über alle PCI-Bussysteme des Systems und alle dort angeschlossenen Geräte darzustellen.
Das Programm lspci ermöglicht es, genau zu bestimmen, welche Geräte (Karten) am PCI-Bus angeschlossen sind und als was sie sich ausgeben. Das ist insbesondere wichtig, um herauszufinden, welche Chipsätze oder Kompatibilitätskriterien bestimmte Karten aufweisen, um mit dieser Information dann das entsprechende Modul zu laden. Moderne Linux-Distributionen, die bei der Installation selbstständig herausfinden, welche Karten angeschlossen sind (Hardwareerkennung) bedienen sich dieses Programms.
Die eigentlichen Informationen, welche Hersteller und welche Geräte die gefundenen Ergebnisse repräsentieren, wird die systemweite Datenbank /usr/share/misc/pci.ids benutzt. Durch den Parameter -n wird lspci dazu gezwungen, diese Datei nicht zu konsultieren, sondern die Ergebnisse numerisch auszugeben.
Linux Kernel, die neuer als die Version 2.1.82 sind, stellen zudem im Verzeichnis /proc/pci weitere Informationen (binär) zur Verfügung. Das Verzeichnis enthält für jeden PCI-Bus ein entsprechendes Unterverzeichnis, das wiederum für jede angeschlossene Karte eine Datei beinhaltet.