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.


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 ]