Kernel
Drivers |
Wie Kernel-Treiber
mit PCI-Karten funktionieren
Installation
und Systembindung
Einführung
Bei
Windows XP handelt es sich um die Version des Windows-Betriebssystems von
Microsoft, die als Nachfolger von Microsoft Windows 2000 und Microsoft
Windows Me gilt und diese beiden Betriebssysteme ersetzt. Windows XP basiert
auf der Windows 2000-Codebasis und verfügt über die Zuverlässigkeit
und Leistung dieses Betriebssystems. Darüber hinaus besitzt Windows
XP die neuen Features des Betriebssystems Windows Me in verbesserter Form:
Systemwiederherstellung, Windows Media Player, Windows-Bilderfassung usw.
Ob nun Windows 98, ME, NT, 2000 oder XP, es gilt grundsätzlich: Damit
unter Windows entsprechende Hardwarekomponenten angesteuert werden können,
müssen entsprechende Treiber zu jedem Gerät installiert werden,
die für jedes Betriebssystem unterschiedlich ausfallen.
Der
Gerätetreiber
Geräte
(engl. device) sind Drucker, Graphikkarten, IDE-Controler oder aber
auch moderne PCI-Messkarten wie A/D-Karten und Hardware mit TTL-Ports,
die unter Windows installiert werden müssen. Die Plug-and-Play-Unterstützung
ist Voraussetzung, damit Slot-Hardware (PCI) unter Windows erkannt, installiert
und verwaltet werden kann. Diese Geräte können samt Treiber über
den Gerätemanager eingesehen (Parametrierungen), deinstalliert oder
mit einem neueren UpDate versehen werden. Teilweise werden Treiber zu gängigen
Geräten bereits bei der Betriebssysteminstallation von der Windows-CD
gleich vorinstalliert, bei Ware die nicht als Massenprodukt vertrieben
wird, muss ein hardwarespezifischer Treiber vom Hersteller nachinstalliert
werden. Je nach Auffassungsgabe des Herstellers kann ein Treiber darüber
wesentlich mitentscheiden, wie gut oder schlecht ein Gerät betrieben
werden kann. Wird beispielsweise ein 600-dpi Drucker nur mit einem 300-dpi
Treiber installiert, kann folglich auch der Ausdruck nur mit 300-dpi erfolgen
obwohl das Gerät 600-dpi fähig ist.
Fehlerbehebung
Seit
Windows 98 soll ein spezieller Mechanismus allgemeine Treiberprobleme verhindern
helfen: Der Assistent für die Hardware-Fehlerbehebung (auch Automatic
Skip Driver Agent ASD genannt) überwacht die Treibererkennung beim
Hochfahren des Rechners. Erkennt ASD eine Inkompatibilität, wird der
betreffende Treiber automatisch aus der Boot-Liste entfernt. Im Gerätemanager
findet der Anwender dann dazu ein gelbes Ausrufezeichen (siehe Bild 1.0)
neben seiner Hardware, das unter Umständen als "unknown device" oder
"PCI Device" o.a. deklariert wird. Weiterhin werden fehlerhaft installierte
bzw. nicht erkannte Geräte in die Datei >> detlog.txt << im
Hauptverzeichnis abgelegt. Kein Grund zur Panik: Die fehlerhaften oder
nicht erkannten Karten und/oder Geräte können Sie später
nach der Windows-Installation von Hand über die Systemsteuerung installieren
und initialisieren.
In erster Linie sind jene System-Treiber wie VXD und SYS gemeint, die eine Hardware im Gerätemanager eintragen und weitere Treiber, die Zugriffe mittels einer DLL von Anwendungen auf verschiedene Hardware ermöglichen soll. Beides kann ein und der selbe Treiber sein, muss es aber nicht. Eine weitere Variante ist, dass man direkt auf die Hardware ohne Treiber zugreift. Dies ist jedoch nur mit kleinen Hilfsmitteln (Port-Zugriff mittels asm-include) und Delphi oder VC++ unter Windows 9x/ME möglich - nicht aber unter NT/2000 oder XP. Da es hinsichtlich einer besseren UpDate-Fähigkeit hilfreicher ist, immer mit mehreren Treibern zu arbeiten, werden oft zwei oder mehr Treiber zu einer Hardware verwendet (bsp. klibndrv.sys, klibdrv.sys pciinfo.sys...).

Der
INF-Script
Damit
Treiber überhaupt in die Systemumgebung aufgenommen werden können,
bedient man sich diverser Hilfsmittel wie Setups oder INF-Dateien. Alle
Kernel- und WDM-Treiber werden mittels der INF-Dateien installiert. Sie
veranlasst das Kopieren der Dateien, den Eintrag in der Registry sowie
die Zuordnung der vom Treiber unterstützten Hardware. Es handelt sich
um ein Microsoft-standardisiertes Installationsskript im ASCII Format und
kann mit jedem herkömmlichen Editor wie Word, Wordpad, Edit oder Notepad
editiert werden. Eine INF-Datei besteht aus mehreren Sektionen und beginnt
üblicherweise mit der "Signature", die dem nachfolgenden Scripttext
eine oder mehrere BS-Plattformmöglichkeiten zuteilt. Jede Sektion
wird durch ein Schlüsselwort in eckigen Klammern eingeleitet. Dabei
kann es sich um systemspezifische oder benutzerdefinierte Schlüsselworte
handeln. Eine Auflistung der systemspezifischen Werte findet man in der
Dokumentation zum DDK. Jede Sektion besitzt mindestens einen Eintrag. Die
Art des Eintrags ist von der Bedeutung der Sektion abhängig. Welche
Sektionen und Einträge (bsp. Geräteklasse) notwendig und welche
optional sind, hängt immer von der Art des Treibers ab. Jede Geräteklasse
ist in einem eigenen Abschnitt beschrieben, der im allgemeinen aus einem
Header mit der Identifikation der INF-Datei und der unterstützten
Geräteklasse besteht, gefolgt vom Manufacturer-Abschnitt. Darin sind
Hersteller und die von ihnen produzierten Geräte aufgelistet. Im Install-Abschnitt
sind der Gerätetreiber und die physikalischen Eigenschaften der Geräte
erklärt. Zusätzlich laufen hier alle Installationshinweise und
Pfade zusammen. Die Reihenfolge des Auftretens der Sektionen ist beliebig,
da u.a. auch Setupprogramme den Namen der Sektion mit verwenden können.
Eine reine Setup-Installation ist für den Benutzer zwar einfach zu installieren, da sie als EXE lediglich nur ausgeführt werden muss. Leider ist sie für den Hersteller jedoch schwieriger und lästiger zu programmieren, sodass diese Variante nicht immer up-to-date zu aktuellen Betriebssystemen bzw. zur Hardware ist. Ein INF-Script ist wesendlich pflegeleichter und kann zudem vom Nutzer eingesehen oder selber abgeändert werden, um die Installation besser an sein System auszurichten. Damit die Treiber an ihren richtigen Ort gelangen (bei NT/2000/XP: C:\WINNT\system32\drivers , und bei W9x/ME: C:\WINDOWS\SYSTEM32\DRIVERS) sucht Windows immer nach einer aktuellen INF-Datei, in der Hersteller (VID) und Devicecode (DID) zur erkannten Hardware passen. Die INF-Datei wird dazu mit der rechten Maustaste angeklickt. Dann öfftet sich ein weiteres Fenster, mit der Möglichkeit den/die Treiber über "Installieren" in das System zu übertragen. In der Regel werden dazu verschiedene Dateien mit der Endung: VXD, SYS und DLL in das entsprechende System-Verzeichnis kopiert und dauerhafte Einträge in die Windows-Registry vorgenommen. Nach einem Neustart werden diese Treiberdienste automatisch gestartet und die KOLTER-Hardware im Gerätemanager als Multifunction device aufgeführt.
Hier ein Script-Ausschnitt für Windows 95/98:
[Version]Anbindung zum System
Signature="$Windows 95/98$"
Provider=%String0%
HardwareClass=MultiFunction
ClassGUID={4d36e971-e325-11ce-bfc1-08002be10318}
Class=Multifunction
HWRevision=003
DriverVer=09/14/2001, 2.0.0.0
Driver=Multifunktionskarten
Version=2.0.0.0
Nicht zuletzt bestimmt auch der Registry-Eintrag wesendlich mit, wie Treiber in das System eingebunden werden. So kann beispielsweise ein Eintrag darüber entscheiden, ob ein Gerätedienst permanent oder erst auf Anforderung der Anwendung zur Verfügung gestellt wird. Liegt der Treiber permanent an, bremst er das System unnötig aus, ist dafür jedoch bei einem Zugriff schneller bereit und abgearbeitet. Im umgekehten Fall wird das System nicht unnötig belastet, jedoch müssen bei einem Zugriff diverse Initialisierungen, Handles und Prioritäten durchlaufen werden, bis die Funktion ausgeführt werden kann.
Um mit einer selbstgeschriebenen Software, sei es Visual-BASIC, VC++ oder Delphi, auf Hardware bzw. I/O-Ports direkt zugreifen zu können, bedienen wir uns der klibdrv.dll, die mit ihren hardwarespezifischen Funktionen neue Befehle zum bestehenden Befehlsvorat ergänzt. Sie wird üblicherweise als UNIT.PAS, MODUL.BAS oder INCLUDE.H einfach zum eigenen Source dazugebunden. Da die DLL-Anbindung unterschiedlich ausfällt und in Ihrem Compiler-Handbuch ausführlich beschrieben sein sollte, gehen wir an dieser Stelle auch nicht näher darauf ein. In unseren kostenpflichtigen VB-Sourcen für NT können Sie die Anbindung der DLL und der dazu notwendigen Module leicht nachverfolgen. Nach einer Initialisierung durch den CREATE- oder OPEN-Befehl kann über einen zurückgegebenen HANDLE die DLL aus Ihrer Anwendung heraus angesprochen werden und die I/O-Anforderung über die SYS bzw. VXD an das System abgesetzt werden. Der dabei entstandene Zeitverlust im DLL>SYS>SYSTEM-Thread ist von der vorgegebenen Priorität abhängig. Die Prioritäten werden u.a. durch Hintergrundanwendungen und System-Treiber stark beeinträchtigt (bsp. VGA-Karte, IDE-Treiber, Tastatur und Maus...). Selbst als Ring-0 ausgeführte Threads unter Windows 9x können Wartezeiten in der Zeitscheibe (task) von ca. 10-100us und unter NT-Systemen von bis zu 200ms entstehen lassen.
Hier
eine Skizze zur Treibereinbindung unter Windows:

Dynamische und statische
Treiber
Je nach Treiberart können
sowohl dynamische als auch statische Treiber für den Port-Zugriff
auf Hardware verwendet werden. Bei der Verwendung
von dynamischen Treibern, wird der DLL-Zugriff über den im gleichen
Verzeichnis liegenden VXD-Treiber abgearbeitet (Win9x/ME), wo hingegen
beim statischen Treiber der Zugriff auf die im System verankerten SYS-Treiber
erfolgt (Win NT). Viele dynamische Treiber haben jedoch den Nachteil, dass
sie bei jedem Zugriff geöffnet und geschlossen werden müssen
(unnötiger Zeitverlust), wo hingegen statische Treiber erst nach Beendigung
oder Abbruch der Anwendung wieder geschlossen wird. Da Windows-NT aber
ein anderes, sichereres Zeitscheibenverfahren verwendet als Win9x/ME sind
dynamische Treiber oft wesendlich schneller als statische Treiber unter
NT. Fehlerhafte Zugriffe mit dynamischen Treibern unter Win9x/ME werden
aus diesem Grund oftmals mit einer Schutzverletzung und einem Blue-Screen
quitiert, wo Windows NT lediglich die Anwendung einstellt oder nur eine
Schutzverletzung mit Abbruchmöglichkeit ausgibt - das System aber
weiterhin funktionstüchtig bleibt. Über den Taskmanager kann
ein fehlerhafter Prozess (Anwendung) auch jederzeit manuell abgebrochen
werden.
Treiber
von CD
Updates
von Windows enthalten neuere Geräteinformationen zu Massenprodukte
(VGA-Karte, SCSI-Contoller...), für die dann keine Diskette bzw. CD
mehr erforderlich ist. Für Nieschenprodukte gelten immer die hinzugefügten
Treiber auf der Hersteller-CD bzw. Diskette. Sie finden unsere aktuellen
Treiber im Verzeichnis: %root CD%:\Drivers\...
Abkürzungen
API
"application
programming interface"
BS
"Betriebssystem"
NT
"New
Technologie". Windows NT ist ein 32-bit Betriebssystem von Microsoft.
PnP
Plug
and Play besagt, daß der PC ohne Zutun des Benutzers den Einsteckkarten
und Hardware-Komponenten alle Ressourcen automatisch zuordnet. Das Rechner-BIOS
findet nach dem Einschalten des Computers alle PCI-Devices und frägt
jedes einzelne Device nach den benötigten Ressourcen ab. Die zuverteilenden
Ressourcen bestehen meistens aus I/O Adressen, IRQ-Nummer, DMA Kanälen
und verwendeter Speicherbereiche. Die verwendeten Ressourcen jeder PCI-Karte
werden anschliessend in einer ESCD-Datenbank des BIOS (im Memory) abgelegt
und dem verwendetem Betriebssystem zur Verfügung gestellt.
PCI
Der
PCI-Bus = "Peripheral Component Interconnect Bus", ist ein aktuelles High-End-Bussystem
mit 32/64-bit Datenbreite. Steckkarten arbeiten mit einem eigenen Systemtakt,
asynchron zum PC. Über eine Hostbridge sind die Bussysteme miteinander
verbunden und tauschen Daten mit 33/66 MHz aus.
Port
I/O
Port
I/O ist die Abkürzung für einen hardwarebezogenen "Input/Output-Anschluss".
Darunter versteht man heutzutage nicht mehr nur die Ein- und Ausgabe über
Register, sondern auch über div. Peripherie-Controller wie beispielsweise
dem UPD8255 PPI Baustein.
DDK
Das
Kürzel DDK steht für "Driver Development Kit" und ist ein spezielle
Ansammlung von Microsoft-Sourcen und Includes um mit einem C-Line-Compiler
einen SYS- oder VXD-Gerätetreiber per Build-Befehl zu generieren.
Hierzu ist tiefgehendes Fachwissen über die System- und Kernelprogrammierung
nötig, dass nur sehr mühsam katalogisiert werden kann, da es
keine schlüssige Referenz gibt bzw. einem stetigem Wandel unterworfen
ist.
DLL
Der
Suffix DLL steht für "Dynamic Link Library". DLLs enthalten Prozeduren
und Routinen, auf die Anwendungen mit Funktionsaufrufen zugreifen können
(ähnlich einer API).
SYS
Das
Suffix .SYS "System" tragen auch die Startdateien von Windows (bsp. IO.SYS),
die im Root-Verzeichnis des Systems liegen. Eine SYS-Datei ermöglicht
einen statischen oder dynamischen Systemaufruf und wird vorzugsweise für
Windows NT, 2000 oder XP verwendet.
VXD
Die
virtuellen Gerätetreiber unter Windows 95, 98 und ME haben das Suffix
VXD. Das x steht für den Gerätetyp "Virtual x Device". Das heißt,
man bezeichnet virtuelle Gerätetreiber für Anzeigegeräte
mit VDD (Virtual Display Device) und für Drucker mit VPD (Virtuel
Printer Device). Ein virtueller Gerätetreiber ist ein 32-Bit-Treiber,
der Systemressourcen wie Hardwarekomponenten oftmals nur dynamisch verwaltet.
INF
Die
INF-Dateien sind reine Geräte-informationsdateien. Sie stellen dem
Windows-Setup wichtige Treiber-Informationen zur Einrichtung einer Hardware-
und Netzwerkkomponente wie Konfigurationsparameter und Laufwerkspfade zur
Verfügung. In der Regel liefern Hardwarehersteller INF-Dateien samt
Treiber auf einer CD mit dem Gerät aus.
WDM
Dieses
Kürzel steht für "Windows Driver Modell". Es umschreibt die Vorgehensweise
und Einbindung von neuen Treibern, wie sie nach Auffassung von Microsoft
für neue Betriebssysteme angewendet werden sollte.
Windows® ist ein eingetragenes Warenzeichen von Microsoft