Gerätetreiber - Device driver

In der Berechnung wird ein Gerätetreiber ist ein Computerprogramm , das eine bestimmte Art von Betrieb betreibt oder Vorrichtung , die an einen angebrachten Computer oder Automaten . Ein Treiber stellt eine Softwareschnittstelle zu Hardwaregeräten bereit , die es Betriebssystemen und anderen Computerprogrammen ermöglicht, auf Hardwarefunktionen zuzugreifen, ohne genaue Details über die verwendete Hardware kennen zu müssen.

Ein Treiber kommuniziert mit dem Gerät über den Computerbus oder das Kommunikationssubsystem, mit dem die Hardware verbunden ist. Wenn ein aufrufendes Programm eine Routine im Treiber aufruft , gibt der Treiber Befehle an das Gerät aus. Sobald das Gerät Daten an den Treiber zurücksendet, kann der Treiber Routinen im ursprünglichen aufrufenden Programm aufrufen.

Treiber sind hardwareabhängig und betriebssystemspezifisch. Sie stellen normalerweise die Unterbrechungsbehandlung bereit, die für jede erforderliche asynchrone zeitabhängige Hardwareschnittstelle erforderlich ist.

Zweck

Der Hauptzweck von Gerätetreibern besteht darin, Abstraktion bereitzustellen, indem sie als Übersetzer zwischen einem Hardwaregerät und den Anwendungen oder Betriebssystemen fungieren , die es verwenden. Programmierer können Anwendungscode auf höherer Ebene unabhängig von der spezifischen Hardware schreiben, die der Endbenutzer verwendet. Beispielsweise kann eine High-Level-Anwendung zum Interagieren mit einem seriellen Port einfach zwei Funktionen für "Daten senden" und "Daten empfangen" haben. Auf einer niedrigeren Ebene würde ein Gerätetreiber, der diese Funktionen implementiert, mit dem bestimmten seriellen Port-Controller kommunizieren, der auf dem Computer eines Benutzers installiert ist. Die zur Steuerung eines 16550 UART erforderlichen Befehle unterscheiden sich stark von den Befehlen, die zur Steuerung eines FTDI- Konverters für die serielle Schnittstelle erforderlich sind , aber jeder hardwarespezifische Gerätetreiber abstrahiert diese Details in dieselbe (oder eine ähnliche) Softwareschnittstelle.

Entwicklung

Das Schreiben eines Gerätetreibers erfordert ein tiefes Verständnis dafür, wie die Hardware und die Software für eine bestimmte Plattformfunktion funktionieren. Da Treiber für den Betrieb einen Low-Level-Zugriff auf Hardwarefunktionen benötigen, arbeiten Treiber in der Regel in einer hochprivilegierten Umgebung und können im Falle eines Fehlers Systembetriebsprobleme verursachen. Im Gegensatz dazu kann die meiste Software auf Benutzerebene auf modernen Betriebssystemen gestoppt werden, ohne den Rest des Systems stark zu beeinträchtigen. Selbst im Benutzermodus ausgeführte Treiber können ein System zum Absturz bringen, wenn das Gerät falsch programmiert wurde . Diese Faktoren machen es schwieriger und gefährlicher, Probleme zu diagnostizieren.

Das Schreiben von Treibern fällt daher in der Regel Softwareingenieuren oder Computeringenieuren zu, die für Hardware-Entwicklungsunternehmen arbeiten. Dies liegt daran, dass sie bessere Informationen über das Design ihrer Hardware haben als die meisten Außenstehenden. Darüber hinaus wurde es traditionell in der Hardware als Hersteller ‚s Interesse zu garantieren , dass ihre Kunden ihre Hardware in optimaler Weise nutzen können. Normalerweise wird der Logical Device Driver (LDD) vom Betriebssystemhersteller geschrieben, während der Physical Device Driver (PDD) vom Gerätehersteller implementiert wird. In den letzten Jahren haben jedoch Nicht-Hersteller zahlreiche Gerätetreiber für proprietäre Geräte geschrieben, hauptsächlich für die Verwendung mit freien und Open-Source- Betriebssystemen . In solchen Fällen ist es wichtig, dass der Hardwarehersteller Informationen darüber gibt, wie das Gerät kommuniziert. Obwohl diese Informationen stattdessen durch Reverse Engineering gelernt werden können , ist dies bei Hardware viel schwieriger als bei Software.

Microsoft hat versucht, die Systeminstabilität aufgrund schlecht geschriebener Gerätetreiber zu reduzieren, indem ein neues Framework für die Treiberentwicklung namens Windows Driver Framework (WDF) geschaffen wurde. Dazu gehört das User-Mode Driver Framework (UMDF), das die Entwicklung bestimmter Treibertypen fördert – hauptsächlich solche, die ein nachrichtenbasiertes Protokoll für die Kommunikation mit ihren Geräten implementieren – als User-Mode-Treiber. Wenn solche Treiber nicht funktionieren, verursachen sie keine Systeminstabilität. Das Kernel-Mode Driver Framework (KMDF)-Modell ermöglicht weiterhin die Entwicklung von Kernel-Mode-Gerätetreibern, versucht jedoch, Standardimplementierungen von Funktionen bereitzustellen, die bekanntermaßen Probleme verursachen, einschließlich Abbruch von E/A-Vorgängen, Energieverwaltung und Plug-and- Unterstützung für Spielgeräte.

Apple hat ein Open-Source-Framework für die Entwicklung von Treibern unter macOS , genannt I/O Kit.

In Linux- Umgebungen können Programmierer Gerätetreiber als Teile des Kernels erstellen , separat als ladbare Module oder als Benutzermodustreiber (für bestimmte Gerätetypen, bei denen Kernel-Schnittstellen vorhanden sind, z. B. für USB-Geräte). Makedev enthält eine Liste der Geräte in Linux, einschließlich ttyS (Terminal), lp ( Parallelport ), hd (Disk), Loop und Sound (dazu gehören Mixer , Sequencer , dsp und Audio).

Microsoft Windows .sys- Dateien und Linux .ko-Dateien können ladbare Gerätetreiber enthalten. Der Vorteil von ladbaren Gerätetreibern besteht darin, dass sie nur bei Bedarf geladen und dann wieder entladen werden können, wodurch Kernelspeicher gespart wird.

Kernel-Modus vs. Benutzermodus

Gerätetreiber, insbesondere auf modernen Microsoft Windows- Plattformen, können im Kernel-Modus ( Ring 0 auf x86-CPUs ) oder im Benutzermodus (Ring 3 auf x86-CPUs) ausgeführt werden. Der Hauptvorteil der Ausführung eines Treibers im Benutzermodus ist eine verbesserte Stabilität, da ein schlecht geschriebener Gerätetreiber im Benutzermodus das System nicht durch Überschreiben des Kernelspeichers zum Absturz bringen kann. Andererseits verursachen Benutzer/Kernel-Modus-Übergänge in der Regel einen erheblichen Performance-Overhead, wodurch Kernel-Modus-Treiber für Netzwerke mit geringer Latenz bevorzugt werden.

Der Zugriff auf den Kernel-Space kann von Benutzermodulen nur durch die Verwendung von Systemaufrufen erfolgen. Endbenutzerprogramme wie die UNIX-Shell oder andere GUI-basierte Anwendungen sind Teil des Benutzerbereichs. Diese Anwendungen interagieren mit der Hardware über vom Kernel unterstützte Funktionen.

Anwendungen

Aufgrund der Vielfalt moderner Hardware und Betriebssysteme arbeiten Treiber in vielen verschiedenen Umgebungen. Treiber können eine Schnittstelle haben mit:

Zu den üblichen Abstraktionsebenen für Gerätetreiber gehören:

  • Für Hardware:
    • Direkte Anbindung
    • Schreiben in oder Lesen aus einem Gerätesteuerregister
    • Verwenden einer übergeordneten Schnittstelle (z. B. Video-BIOS )
    • Verwendung eines anderen untergeordneten Gerätetreibers (z. B. Dateisystemtreiber mit Festplattentreibern)
    • Die Arbeit mit Hardware simulieren und dabei etwas ganz anderes machen
  • Für Software:
    • Ermöglichen des direkten Zugriffs des Betriebssystems auf Hardwareressourcen
    • Nur Primitive implementieren
    • Implementierung einer Schnittstelle für Nicht-Treibersoftware (zB TWAIN )
    • Implementieren einer Sprache, manchmal ziemlich hoch (zB PostScript )

Daher ist die Auswahl und Installation der richtigen Gerätetreiber für eine bestimmte Hardware häufig eine Schlüsselkomponente der Computersystemkonfiguration.

Virtuelle Gerätetreiber

Virtuelle Gerätetreiber stellen eine bestimmte Variante von Gerätetreibern dar. Sie werden verwendet , um ein Hardware - Gerät zu emulieren, insbesondere in Virtualisierungsumgebungen, zum Beispiel , wenn ein DOS - Programm auf einem ausgeführt wird Microsoft Windows - Computer oder wenn ein Gast - Betriebssystem ausgeführt wird auf zum Beispiel einer Xen - Host. Anstatt dem Gastbetriebssystem den Dialog mit der Hardware zu ermöglichen, übernehmen virtuelle Gerätetreiber die entgegengesetzte Rolle und emulieren eine Hardware, sodass das Gastbetriebssystem und seine Treiber in einer virtuellen Maschine die Illusion haben, auf echte Hardware zuzugreifen. Versuche des Gastbetriebssystems, auf die Hardware zuzugreifen, werden zum Beispiel als Funktionsaufrufe an den virtuellen Gerätetreiber im Hostbetriebssystem weitergeleitet  . Der virtuelle Gerätetreiber kann auch simulierte Ereignisse auf Prozessorebene wie Interrupts an die virtuelle Maschine senden .

Virtuelle Geräte können auch in einer nicht virtualisierten Umgebung betrieben werden. Beispielsweise wird ein virtueller Netzwerkadapter mit einem virtuellen privaten Netzwerk verwendet , während ein virtuelles Festplattengerät mit iSCSI verwendet wird . Ein gutes Beispiel für virtuelle Gerätetreiber können Daemon Tools sein .

Es gibt verschiedene Varianten von virtuellen Gerätetreibern, z. B. VxDs , VLMs und VDDs.

Open-Source-Treiber

Solaris- Beschreibungen häufig verwendeter Gerätetreiber:

  • fas: Fast/Wide SCSI Controller
  • hme: Schnelles (10/100 Mbit/s) Ethernet
  • isp: Differentielle SCSI-Controller und die SunSwift-Karte
  • glm: (Gigabaud Link Module) UltraSCSI-Controller
  • scsi: SCSI-Geräte (Small Computer Serial Interface)
  • sf: soc+ oder socal Fibre Channel Arbitrated Loop (FCAL)
  • soc: SPARC Storage Array (SSA)-Controller und das Steuergerät
  • socal: Serielle optische Controller für FCAL (soc+)

APIs

Identifikatoren

Ein Gerät am PCI-Bus oder USB wird durch zwei IDs identifiziert, die aus jeweils 4 hexadezimalen Zahlen bestehen. Die Hersteller-ID identifiziert den Hersteller des Geräts. Die Geräte-ID identifiziert ein bestimmtes Gerät dieses Herstellers/Anbieters.

Ein PCI-Gerät hat oft ein ID-Paar für den Hauptchip des Geräts und auch ein Subsystem-ID-Paar, das den Anbieter identifiziert, der sich vom Chiphersteller unterscheiden kann.

Siehe auch

Verweise

Externe Links