Vue d’ensemble du développement de pilotes Windows pour les contrôleurs hôtes USB

Cet article décrit la prise en charge dans le système d’exploitation Windows pour le développement d’un pilote de contrôleur hôte USB (Universal Serial Bus) qui communique avec l’extension de contrôleur hôte USB fournie par Microsoft (UCX).

Si vous développez un contrôleur hôte xHCI qui n’est pas conforme à la spécification ou si vous développez un matériel non xHCI personnalisé (tel qu’un contrôleur hôte virtuel), vous pouvez écrire un pilote de contrôleur hôte qui communique avec UCX. Par exemple, considérez une station d’accueil sans fil qui prend en charge les périphériques USB. Le PC communique avec les périphériques USB via la station d’accueil sans fil en utilisant USB sur TCP comme transport.

Extension du contrôleur hôte USB (UCX)

L’extension du contrôleur hôte USB est un pilote fourni par le système (Ucx01000.sys). Ce pilote est implémenté en tant qu’extension de classe framework à l’aide des interfaces de programmation Windows Driver Framework . Le pilote du contrôleur hôte sert de pilote client pour cette extension de classe. Alors qu’un pilote de contrôleur hôte gère les opérations et les événements matériels, la gestion de l’alimentation et les événements PnP, UCX sert d’interface abstraite qui met en file d’attente les demandes au pilote du contrôleur hôte et effectue d’autres tâches.

UCX est l’un des pilotes côté hôte USB dans Windows. Il est chargé en tant que FDO dans la pile d’appareils du contrôleur hôte.

Pilote de contrôleur hôte USB

UCX est extensible et est conçu pour prendre en charge différents pilotes de contrôleur d’hôte. Windows fournit un pilote xHCI (Usbxhci.sys) qui cible les contrôleurs hôtes USB xHCI.

Le pilote du contrôleur hôte est un client d’UCX, écrit en tant que pilote KMDF ( Kernel-Mode Driver Framework ).

Fichiers binaires fournis par Microsoft

Pour écrire un pilote de contrôleur hôte, vous avez besoin d’UCX (Ucx01000.sys) et de la bibliothèque stub (Ucx01000.lib). La bibliothèque stub se trouve dans le Kit de pilotes Windows (WDK). La bibliothèque exécute deux fonctions main.

  • Traduire les appels effectués par le pilote du contrôleur hôte et les transmettre à UCX.
  • Fournit une prise en charge du contrôle de version. Un pilote de contrôleur hôte fonctionne avec UCX, uniquement si UCX a le même numéro de version principale que le pilote du contrôleur hôte et le même numéro de version mineure ou supérieur que le pilote du contrôleur hôte.

Outils de développement

Le WDK contient des ressources requises pour le développement de pilotes, telles que des en-têtes, des bibliothèques, des outils et des exemples.

Télécharger des kits et outils pour Windows

Bien démarrer

Lisez la spécification officielle qui décrit le comportement attendu des différents composants (appareil, contrôleur hôte et hub) de l’architecture.

xHCI pour le bus série universel : spécification

Documents officiels du bus série universel

Comprendre l’architecture d’UCX

Familiarisez-vous avec la pile de pilotes USB fournie par Microsoft :

Pilotes côté hôte USB dans Windows

Architecture : extension du contrôleur hôte USB (UCX)

Familiarisez-vous avec les objets et les handles UCX

UCX étend la fonctionnalité d’objet WDF pour définir ses propres objets UCX spécifiques à l’USB. Pour plus d’informations sur les objets WDF, consultez Présentation des objets Framework.

Pour la mise en file d’attente des demandes adressées à n’importe quel pilote de contrôleur hôte sous-jacent, UCX utilise ces objets. Pour plus d’informations, consultez objets et handles UCX utilisés par un pilote de contrôleur hôte.

Objet UCX Description
Objet contrôleur hôte (UCXCONTROLLER) Représente le contrôleur hôte créé par le pilote du contrôleur hôte. Le pilote ne doit créer qu’un seul objet contrôleur hôte par contrôleur hôte instance. Généralement créé dans le EVT_WDF_DRIVER_DEVICE_ADD rappel en appelant la méthode UcxControllerCreate .
Objet hub racine (UCXROOTHUB) Obtient et contrôle le status des ports racine du contrôleur hôte. Créé par le pilote du contrôleur hôte généralement dans le EVT_WDF_DRIVER_DEVICE_ADD rappel en appelant la méthode UcxRootHubCreate .
Objet périphérique USB (UCXUSBDEVICE) Représente un périphérique USB physique connecté au bus. Créé par le pilote de contrôleur hôte généralement dans le EVT_UCX_CONTROLLER_USBDEVICE_ADD rappel en appelant la méthode **UcxUsbDeviceCreate .
Objet Endpoint (UCXENDPOINT) Représente un point de terminaison sur un objet de périphérique USB. Créé par le pilote du contrôleur hôte généralement dans le EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD ou EVT_UCX_USBDEVICE_ENDPOINT_ADD rappel en appelant la méthode **UcxEndpointCreate .
Objet Stream (UCXSTREAMS) Représente un certain nombre de canaux vers l’appareil sur un point de terminaison en bloc unique. Créé par le pilote de contrôleur hôte généralement dans le EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD rappel en appelant la méthode UcxStaticStreamsCreate .

Sections de documentation

Fonctions de rappel hub racine d’un pilote de contrôleur hôte

UCX gère la plupart des opérations liées au hub racine. Cela permet au pilote de hub USB d’interagir avec le hub racine de la même façon qu’il interagit avec un hub standard. Le pilote du contrôleur hôte peut inscrire ses fonctions de rappel.

Gérer les demandes d’E/S dans un pilote de contrôleur hôte USB

UCX trie les blocs de requête USB entrants (URB), puis les transfère vers la file d’attente de point de terminaison appropriée.

Configurer des points de terminaison USB dans un pilote de contrôleur hôte

Le pilote du contrôleur hôte joue un rôle dans la gestion par UCX des files d’attente associées à ses points de terminaison et dans la programmation des points de terminaison dans le matériel du contrôleur.

Informations de référence sur l’extension du contrôleur hôte USB (UCX)

Fournit des spécifications pour les demandes d’E/S, les routines de prise en charge, les structures et les interfaces utilisées par le pilote client. Ces routines et structures de données associées sont définies dans les en-têtes WDK.

UCX est appelé extension de classe framework.

Le pilote du contrôleur hôte est appelé pilote client.