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.
Bild 1.0: Fehler in der
Treiberinstallation
Treiberarten
Grundvoraussetzung
für eine erfolgreiche Treiberinstallation ist ein sauber
installiertes Betriebssystem sowie die richtigen
Treiber zur entsprechenden PnP-Hardware (PnP = plug-and-play) zu installieren
>> siehe unsere Install-Seite. Allgemein
werden heutzutage Treiber (kernel-device-driver) zur Einbindung von Hardware
verwendet, damit sie beispielsweise unter Windows komfortabel angesprochen
werden können. Dabei unterscheiden sich diese Treiber aber in mehrfacher
Weise: WDM- oder non-PnP-Treiber, die unter Windows 9x/ME oder Windows
NT/2000/XP verwendet werden (siehe Anmerkung zum Kernel), damit sie im
Betriebssystem erkannt werden und integriert sind, und Treiber, die man
benötigt, um auf die Hardware direkt zuzugreifen (bsp. klibdrv.sys).
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...).
Anmerkung
zum Kernel
Windows
2000 und XP basieren nicht auf dem Kernel von Windows 9x/ME, sondern auf
dem geschützen Kernel von Windows NT, der zwar stabiler ist, aber
ursprünglich nicht für USB, Multimedia-Anwendungen und Spiele
konzipiert worden war. Diese waren unter dem Vorgänger Windows NT
4.0 nur eingeschränkt möglich, da alle neueren DirectX-Versionen
nicht in die Windows NT-Plattform integriert werden konnten. Daher werden
zu beiden Plattformen auch immer unterschiedliche Treiber zur betreffenden
Hardware vom Hersteller angeboten. Beispielsweise können NT-basierende
Plattformen nicht mit VXD-Treibern betrieben werden - sie benötigen
echte 32-bit SYS Kernel-Treiber. Hierzu wird von Microsoft das neue WDM
Treibermodell empfohlen, das sich weitgehend durchgesetzt hat. WDM = Windows-Driver-Model,
ist ein 32-bit Treibermodell, dass sowohl von Win9x/ME als auch von Windows
NT unterstützt wird. Microsoft hat dazu bestimmte NT-Kernel-Dienste
als virtuelle Gerätetreiber (ntkern.vxd) zur Verfügung gestellt.
Damit ist es möglich, die neuen WDM-Treiber parallel zu alten Treibern
zu nutzen. Einen Vorteil versprechen sich hiervon NT-Anwender, die für
Ihre nicht unterstützte Hardware nun auf einen WDM-Treiber hoffen
können.
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]
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
Anbindung
zum System
Dynamische Bibliotheken
(DLL) sind im allgemeinen werder direkt ausführbar noch verarbeiten
sie Benutzereingaben im Rahmen einer Nachrichtenschleife. Vielmehr handelt
es sich bei DLLs um eigenständige Dateien, die anderen Programmen
und dynamischen Bibliotheken eine Sammlung von Funktionen bereitstellen,
die bestimmte Aufgaben erledigen. Eine dynamische Bibliothek tritt nur
dann in Aktion, wenn ein anderes Modul eine ihrer Funktionen aufruft. Statische
Bibliotheken werden hauptsächlich bei der Entwicklung von Programmen
verwendet - im Gegensatz zu den dynamischen Bibliotheken, die zur Laufzeit
des jeweiligen Programms verfügbar sein müssen. Windows sucht
diese DLL automatisch zuerst im Anwenderverzeichnis der EXE-Datei. Fehlt
sie dort, sucht sie danach im Windows-Systemverzeichnis. Es gibt verschiedene
Methoden, wie eine DLL angesprochen werden kann. So kann beispielsweise
eine 16-bit DLL unter Windows 9x/ME ohne SYS- oder VXD-Treiber betrieben
werden, die jedoch unter NT-Systemen zum Absturz führt. Im umgekehrten
Fall können 32-bit DLLs, die für NT-Systeme mit SYS-Treiber geschrieben
worden sind, nicht unter Windows 9x/ME ohne VXD-Treiber betrieben werden.
Deshalb ist es elementar wichtig, dass bei der Installation von Treibern
wirklich das richtige Treiber-Verzeichnis angewählt wird, da sonst
das Gerät entweder nicht richtig funktioniert - oder sogar das gesamte
System durcheinander kommt. Vorsicht: Datenverlust möglich !!!
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:

Unser
KLIBDRV.SYS
ist ein reiner non-PnP-Treiber, d.h. er kann sowohl unter Win9x/ME/2k/XP
oder auch unter Windows NT verwendet werden, ohne das der Quellcode in
Abhänigkeit des Betriebssystems geändert werden muss. Dies ist
besonders konfortabel, wenn man grosse Applikationen entwickelt, die zu
allen 32-bit Windows-Versionen passen soll.
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
KOLTER ELECTRONIC
ist nicht für die Inhalte fremder Seiten verantwortlich.
Es gelten ausschließlich
die AGB der Firma KOLTER ELECTRONIC.
Für die Richtigkeit
der Angaben wird keine Gewähr übernommen.
Alle Preisangaben sind gewerblich.
Das Zahlungsmittel ist EURO.
Alle Rechte vorbehalten.
(c)
copyright H.Kolter
[ Zur
KOLTER ELECTRONIC® Hauptseite ]
|