Übersicht über die Entwicklung von Windows-Treibern für USB-Hostcontroller

In diesem Artikel wird die Unterstützung im Windows-Betriebssystem für die Entwicklung eines USB-Hostcontrollertreibers (Universal Serial Bus) beschrieben, der mit der von Microsoft bereitgestellten USB-Hostcontrollererweiterung (UCX) kommuniziert.

Wenn Sie einen xHCI-Hostcontroller entwickeln, der nicht mit der Spezifikation konform ist, oder eine benutzerdefinierte Nicht-xHCI-Hardware (z. B. einen virtuellen Hostcontroller) entwickeln, können Sie einen Hostcontrollertreiber schreiben, der mit UCX kommuniziert. Betrachten Sie beispielsweise ein drahtloses Dock, das USB-Geräte unterstützt. Der PC kommuniziert mit USB-Geräten über das wireless Dock, indem er USB über TCP als Transport verwendet.

USB-Hostcontrollererweiterung (UCX)

Die USB-Hostcontrollererweiterung ist ein vom System bereitgestellter Treiber (Ucx01000.sys). Dieser Treiber wird als Frameworkklassenerweiterung mithilfe der Windows Driver Framework-Programmierschnittstellen implementiert. Der Hostcontrollertreiber dient als Clienttreiber für diese Klassenerweiterung. Während ein Hostcontrollertreiber Hardwarevorgänge und -ereignisse, Energieverwaltung und PnP-Ereignisse verarbeitet, dient UCX als abstrahierte Schnittstelle, die Anforderungen an den Hostcontrollertreiber in die Warteschlange stellt und andere Aufgaben ausführt.

UCX ist einer der usb-hostseitigen Treiber in Windows. Es wird als FDO im Hostcontroller-Gerätestapel geladen.

USB-Hostcontrollertreiber

UCX ist erweiterbar und wurde entwickelt, um verschiedene Hostcontrollertreiber zu unterstützen. Windows stellt einen xHCI-Treiber (Usbxhci.sys) bereit, der auf USB-xHCI-Hostcontroller ausgerichtet ist.

Der Hostcontrollertreiber ist ein Client von UCX, der als KmDF-Treiber (Kernel-Mode Driver Framework ) geschrieben wurde.

Von Microsoft bereitgestellte Binärdateien

Zum Schreiben eines Hostcontrollertreibers benötigen Sie UCX (Ucx01000.sys) und die Stubbibliothek (Ucx01000.lib). Die Stubbibliothek befindet sich im Windows Driver Kit (WDK). Die Bibliothek führt zwei Standard Funktionen aus.

  • Übersetzen Sie Aufrufe des Hostcontrollertreibers, und übergeben Sie sie an UCX.
  • Bietet Unterstützung für die Versionsverwaltung. Ein Hostcontrollertreiber funktioniert nur mit UCX, wenn UCX dieselbe Hauptversionsnummer wie der Hostcontrollertreiber und die gleiche oder höhere Nebenversionsnummer wie der Hostcontrollertreiber hat.

Entwicklungstools

Das WDK enthält Ressourcen, die für die Treiberentwicklung erforderlich sind, z. B. Header, Bibliotheken, Tools und Beispiele.

Herunterladen von Kits und Tools für Windows

Erste Schritte

Lesen Sie die offizielle Spezifikation, die das erwartete Verhalten verschiedener Komponenten (Gerät, Hostcontroller und Hub) der Architektur beschreibt.

xHCI für den universellen seriellen Bus: Spezifikation

Offizielle Dokumente für den universalen seriellen Bus

Grundlegendes zur Architektur von UCX

Machen Sie sich mit dem von Microsoft bereitgestellten USB-Treiberstapel vertraut:

USB-hostseitige Treiber in Windows

Architektur: USB-Hostcontrollererweiterung (UCX)

Machen Sie sich mit UCX-Objekten und -Handles vertraut

UCX erweitert die WDF-Objektfunktionalität, um eigene USB-spezifische UCX-Objekte zu definieren. Weitere Informationen zu WDF-Objekten finden Sie unter Einführung in Framework-Objekte.

Für warteschlangenbasierte Anforderungen an einen zugrunde liegenden Hostcontrollertreiber verwendet UCX diese Objekte. Weitere Informationen finden Sie unter UCX-Objekte und -Handles, die von einem Hostcontrollertreiber verwendet werden.

UCX-Objekt BESCHREIBUNG
Hostcontrollerobjekt (UCXCONTROLLER) Stellt den Hostcontroller dar, der vom Hostcontrollertreiber erstellt wird. Der Treiber darf nur ein Hostcontrollerobjekt pro Hostcontroller instance erstellen. In der Regel innerhalb des EVT_WDF_DRIVER_DEVICE_ADD Rückrufs erstellt, indem die UcxControllerCreate-Methode aufgerufen wird .
Root Hub-Objekt (UCXROOTHUB) Ruft die status der Stammports des Hostcontrollers ab und steuert sie. Wird vom Hostcontrollertreiber in der Regel innerhalb des EVT_WDF_DRIVER_DEVICE_ADD Rückrufs erstellt, indem die UcxRootHubCreate-Methode aufgerufen wird .
USB-Geräteobjekt (UCXUSBDEVICE) Stellt ein physisches USB-Gerät dar, das mit dem Bus verbunden ist. Wird vom Hostcontrollertreiber in der Regel innerhalb des EVT_UCX_CONTROLLER_USBDEVICE_ADD Rückrufs erstellt, indem die **UcxUsbDeviceCreate-Methode aufgerufen wird .
Endpunktobjekt (UCXENDPOINT) Stellt einen Endpunkt auf einem USB-Geräteobjekt dar. Wird vom Hostcontrollertreiber in der Regel innerhalb des EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD oder EVT_UCX_USBDEVICE_ENDPOINT_ADD Rückrufs erstellt, indem die **UcxEndpointCreate-Methode aufgerufen wird .
Stream-Objekt (UCXSTREAMS) Stellt eine Anzahl von Pipes an das Gerät über einen einzelnen Massenendpunkt dar. Wird vom Hostcontrollertreiber in der Regel innerhalb des EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD Rückrufs erstellt, indem die UcxStaticStreamsCreate-Methode aufgerufen wird .

Abschnitte der Dokumentation

Root Hub-Rückruffunktionen eines Hostcontrollertreibers

UCX verarbeitet die meisten Vorgänge im Zusammenhang mit dem Stammhub. Dadurch kann der USB-Hubtreiber auf die gleiche Weise mit dem Stammhub interagieren, wie er mit einem regulären Hub interagiert. Der Hostcontrollertreiber kann seine Rückruffunktionen registrieren.

Verarbeiten von E/A-Anforderungen in einem USB-Hostcontrollertreiber

UCX selektieren eingehende USB-Anforderungsblöcke (URBs) und leitet sie dann an die richtige Endpunktwarteschlange weiter.

Konfigurieren von USB-Endpunkten in einem Hostcontrollertreiber

Der Hostcontrollertreiber spielt eine Rolle bei der UcX-Verwaltung der Warteschlangen, die seinen Endpunkten zugeordnet sind, und bei der Programmierung von Endpunkten in Controllerhardware.

Referenz zur USB-Hostcontrollererweiterung (UCX)

Enthält Spezifikationen für E/A-Anforderungen, Supportroutinen, Strukturen und Schnittstellen, die vom Clienttreiber verwendet werden. Diese Routinen und zugehörigen Datenstrukturen werden in den WDK-Headern definiert.

UCX wird als Frameworkklassenerweiterung bezeichnet.

Der Hostcontrollertreiber wird als Clienttreiber bezeichnet.