Visão geral do desenvolvimento de drivers do Windows para controladores de host USB

Este artigo descreve o suporte no sistema operacional Windows para desenvolver um driver de controlador de host USB (Barramento Serial Universal) que se comunica com a UCX (extensão do controlador de host USB) fornecida pela Microsoft.

Se você estiver desenvolvendo um controlador de host xHCI que não esteja em conformidade com a especificação ou desenvolvendo um hardware não xHCI personalizado (como um controlador de host virtual), você poderá escrever um driver de controlador de host que se comunica com UCX. Por exemplo, considere um encaixe sem fio que dê suporte a dispositivos USB. O computador se comunica com dispositivos USB por meio do encaixe sem fio usando USB via TCP como transporte.

Extensão do controlador de host USB (UCX)

A extensão do controlador de host USB é um driver fornecido pelo sistema (Ucx01000.sys). Esse driver é implementado como uma extensão de classe de estrutura usando as interfaces de programação do Windows Driver Framework . O driver do controlador de host serve como o driver do cliente para essa extensão de classe. Enquanto um driver de controlador de host lida com operações e eventos de hardware, gerenciamento de energia e eventos PnP, o UCX serve como uma interface abstraída que enfileira solicitações para o driver do controlador host e executa outras tarefas.

UCX é um dos drivers do lado do host USB no Windows. Ele é carregado como o FDO na pilha de dispositivos do controlador de host.

Driver do controlador de host USB

O UCX é extensível e foi projetado para dar suporte a vários drivers de controlador de host. O Windows fornece um driver xHCI (Usbxhci.sys) direcionado a controladores de host xHCI USB.

O driver do controlador de host é um cliente do UCX, escrito como driver KMDF ( Kernel-Mode Driver Framework ).

Binários fornecidos pela Microsoft

Para gravar um driver de controlador de host, você precisa de UCX (Ucx01000.sys) e da biblioteca stub (Ucx01000.lib). A biblioteca stub está no WDK (Kit de Driver do Windows). A biblioteca executa duas funções main.

  • Traduza as chamadas feitas pelo driver do controlador de host e passe-as para o UCX.
  • Fornece suporte para controle de versão. Um driver do controlador de host funcionará com UCX, somente se o UCX tiver o mesmo número de versão Principal que o driver do controlador de host e o mesmo número de versão secundária ou superior que o driver do controlador de host.

Ferramentas de desenvolvimento

O WDK contém recursos necessários para o desenvolvimento de driver, como cabeçalhos, bibliotecas, ferramentas e exemplos.

Baixar kits e ferramentas para Windows

Introdução

Leia a especificação oficial que descreve o comportamento esperado de diferentes componentes (dispositivo, controlador de host e hub) da arquitetura.

xHCI para Barramento Serial Universal: Especificação

Documentos oficiais do Barramento Serial Universal

Entender a arquitetura do UCX

Familiarize-se com a pilha de drivers USB fornecida pela Microsoft:

Drivers do lado do host USB no Windows

Arquitetura: extensão do controlador de host USB (UCX)

Familiarizar-se com identificadores e objetos UCX

O UCX estende a funcionalidade do objeto WDF para definir seus próprios objetos UCX específicos de USB. Para obter mais detalhes sobre objetos WDF, consulte Introdução aos objetos framework.

Para enfileirar solicitações para qualquer driver de controlador de host subjacente, o UCX usa esses objetos. Para obter mais informações, consulte Objetos UCX e identificadores usados por um driver de controlador de host.

Objeto UCX Descrição
Objeto do controlador de host (UCXCONTROLLER) Representa o controlador de host criado pelo driver do controlador de host. O driver deve criar apenas um objeto de controlador de host por instância do controlador de host. Normalmente criado no EVT_WDF_DRIVER_DEVICE_ADD retorno de chamada chamando o método UcxControllerCreate .
Objeto de hub raiz (UCXROOTHUB) Obtém e controla o status das portas raiz do controlador de host. Criado pelo driver do controlador de host normalmente dentro do EVT_WDF_DRIVER_DEVICE_ADD retorno de chamada chamando o método UcxRootHubCreate .
Objeto de dispositivo USB (UCXUSBDEVICE) Representa um dispositivo USB físico conectado ao barramento. Criado pelo driver do controlador de host normalmente dentro do EVT_UCX_CONTROLLER_USBDEVICE_ADD retorno de chamada chamando o método **UcxUsbDeviceCreate .
Objeto Endpoint (UCXENDPOINT) Representa um ponto de extremidade em um objeto de dispositivo USB. Criado pelo driver do controlador de host normalmente dentro do EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD ou EVT_UCX_USBDEVICE_ENDPOINT_ADD retorno de chamada chamando o método **UcxEndpointCreate .
Objeto Stream (UCXSTREAMS) Representa vários pipes para o dispositivo em um único ponto de extremidade em massa. Criado pelo driver do controlador de host normalmente dentro do EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD retorno de chamada chamando o método UcxStaticStreamsCreate .

Seções de documentação

Funções de retorno de chamada do hub raiz de um driver de controlador de host

O UCX lida com a maioria das operações relacionadas ao hub raiz. Isso permite que o driver do hub USB interaja com o hub raiz da mesma forma que interage com um hub regular. O driver do controlador de host pode registrar suas funções de retorno de chamada.

Manipular solicitações de E/S em um driver de controlador de host USB

O UCX faz a triagem de URBs (blocos de solicitação USB) de entrada e os encaminha para a fila correta do ponto de extremidade.

Configurar pontos de extremidade USB em um driver de controlador de host

O driver do controlador de host desempenha um papel no gerenciamento do UCX das filas associadas aos pontos de extremidade e na programação de pontos de extremidade no hardware do controlador.

Referência de UCX (extensão do controlador de host USB)

Fornece especificações para solicitações de E/S, rotinas de suporte, estruturas e interfaces usadas pelo driver do cliente. Essas rotinas e estruturas de dados relacionadas são definidas nos cabeçalhos do WDK.

UCX é conhecido como a extensão de classe de estrutura.

O driver do controlador de host é conhecido como o driver do cliente.