Panoramica dello sviluppo di driver Windows per i controller host USB

Questo articolo descrive il supporto nel sistema operativo Windows per lo sviluppo di un driver del controller host usb (Universal Serial Bus) che comunica con l'estensione del controller host USB fornito da Microsoft (UCX).

Se si sta sviluppando un controller host xHCI non conforme alla specifica o lo sviluppo di un hardware non xHCI personalizzato (ad esempio un controller host virtuale), è possibile scrivere un driver del controller host che comunica con UCX. Si consideri ad esempio un dock wireless che supporta i dispositivi USB. Il PC comunica con dispositivi USB tramite il dock wireless usando USB tramite TCP come trasporto.

Estensione del controller host USB (UCX)

L'estensione del controller host USB è un driver fornito dal sistema (Ucx01000.sys). Questo driver viene implementato come estensione della classe framework usando le interfacce di programmazione di Windows Driver Framework . Il driver del controller host funge da driver client per tale estensione di classe. Mentre un driver del controller host gestisce operazioni e eventi hardware, risparmio energia e PnP, UCX funge da interfaccia astratta che accoda il driver del controller host ed esegue altre attività.

UCX è uno dei driver lato host USB in Windows. Viene caricato come fdO nello stack di dispositivi controller host.

Driver del controller host USB

UCX è estendibile ed è progettato per supportare vari driver del controller host. Windows fornisce un driver xHCI (Usbxhci.sys) destinato ai controller host xHCI USB.

Il driver del controller host è un client di UCX, scritto come Driver Framework in modalità kernel (KMDF).

File binari forniti da Microsoft

Per scrivere un driver del controller host, è necessario UCX (Ucx01000.sys) e la libreria stub (Ucx01000.lib). La libreria stub è disponibile in Windows Driver Kit (WDK). La libreria esegue due funzioni principali.

  • Tradurre le chiamate effettuate dal driver del controller host e passarle a UCX.
  • Fornisce il supporto per il controllo delle versioni. Un driver del controller host funzionerà con UCX, solo se UCX ha lo stesso numero di versione principale del driver del controller host e lo stesso numero di versione secondaria del driver del controller host.

Strumenti di sviluppo

WdK contiene risorse necessarie per lo sviluppo di driver, ad esempio intestazioni, librerie, strumenti e esempi.

Scaricare kit e strumenti per Windows

Introduzione

Leggere la specifica ufficiale che descrive il comportamento previsto di componenti diversi (dispositivo, controller host e hub) dell'architettura.

xHCI per il bus seriale universale: specifica

Documenti ufficiali del bus seriale universale

Comprendere l'architettura di UCX

Acquisire familiarità con lo stack di driver USB fornito da Microsoft:

Driver sul lato host USB in Windows

Architettura: estensione del controller host USB (UCX)

Acquisire familiarità con oggetti UCX e handle

UCX estende la funzionalità dell'oggetto WDF per definire i propri oggetti UCX specifici di USB. Per altre informazioni sugli oggetti WDF, vedere Introduzione agli oggetti Framework.

Per le richieste di accodamento a qualsiasi driver del controller host sottostante, UCX usa questi oggetti. Per altre informazioni, vedere oggetti UCX e handle usati da un driver del controller host.

Oggetto UCX Descrizione
Oggetto controller host (UCXCONTROLLER) Rappresenta il controller host creato dal driver del controller host. Il driver deve creare un solo oggetto controller host per ogni istanza del controller host. In genere creato all'interno del callback EVT_WDF_DRIVER_DEVICE_ADD chiamando il metodo UcxControllerCreate .
Oggetto hub radice (UCXROOTHUB) Ottiene e controlla lo stato delle porte radice del controller host. Creato dal driver del controller host in genere all'interno del callback EVT_WDF_DRIVER_DEVICE_ADD chiamando il metodo UcxRootHubCreate .
Oggetto dispositivo USB (UCXUSBDEVICE) Rappresenta un dispositivo USB fisico connesso al bus. Creato dal driver del controller host in genere all'interno del callback EVT_UCX_CONTROLLER_USBDEVICE_ADD chiamando il metodo **UcxUsbDeviceCreate .
Oggetto Endpoint (UCXENDPOINT) Rappresenta un endpoint in un oggetto dispositivo USB. Creato dal driver del controller host in genere all'interno del EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD o EVT_UCX_USBDEVICE_ENDPOINT_ADD callback chiamando il metodo **UcxEndpointCreate .
Oggetto Stream (UCXSTREAMS) Rappresenta un numero di pipe al dispositivo in un singolo endpoint bulk. Creato dal driver del controller host in genere all'interno del callback EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD chiamando il metodo UcxStaticStreamsCreate .

Sezioni della documentazione

Funzioni di callback dell'hub radice di un driver controller host

UCX gestisce la maggior parte delle operazioni correlate all'hub radice. Ciò consente al driver dell'hub USB di interagire con l'hub radice nello stesso modo in cui interagisce con un hub normale. Il driver del controller host può registrare le funzioni di callback.

Gestire le richieste di I/O in un driver del controller host USB

UCX valuta i blocchi di richiesta USB in ingresso e li inoltra alla coda dell'endpoint corretta.

Configurare gli endpoint USB in un driver del controller host

Il driver del controller host svolge un ruolo nella gestione delle code associate agli endpoint e nella programmazione degli endpoint nell'hardware del controller.

Informazioni di riferimento sul controller host USB (UCX)

Fornisce specifiche per le richieste di I/O, supporta le routine, le strutture e le interfacce usate dal driver client. Tali routine e strutture di dati correlate sono definite nelle intestazioni WDK.

UCX viene definito estensione della classe framework.

Il driver del controller host viene definito driver client.