Compartilhar via


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 comunique com o 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 cliente para essa extensão de classe. Enquanto um driver do controlador de host lida com operações de hardware e eventos, gerenciamento de energia e eventos PnP, o UCX serve como uma interface abstraída que enfileira solicitações para o driver do controlador de host e executa outras tarefas.

O UCX é um dos drivers de 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) que tem como destino controladores de host USB xHCI.

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

Binários fornecidos pela Microsoft

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

  • 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 o 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 driver USB fornecida pela Microsoft:

Drivers do lado do host USB no Windows

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

Familiarize-se com os 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 em qualquer driver subjacente de controlador de hospedagem, o UCX utiliza esses objetos. Para obter mais informações, consulte objetos UCX e identificadores usados por um driver do controlador de host.

Objeto UCX Description
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 na callback EVT_WDF_DRIVER_DEVICE_ADD ao chamar o método UcxControllerCreate.
Objeto do hub raiz (UCXROOTHUB) Obtém e controla o status das portas raiz do controlador de host. Criado pelo driver do controlador de host, tipicamente no contexto da chamada de retorno EVT_WDF_DRIVER_DEVICE_ADD, ao chamar o método UcxRootHubCreate.
Objeto de dispositivo USB (UCXUSBDEVICE) Representa um dispositivo de USB físico conectado ao barramento. Criado pelo driver do controlador de host, normalmente no retorno de chamada EVT_UCX_CONTROLLER_USBDEVICE_ADD, que chama 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 callback ao chamar o método **UcxEndpointCreate.
Objeto Stream (UCXSTREAMS) Representa uma série de pipes para o dispositivo em um único ponto de extremidade em massa. Criado pelo driver do controlador de host, normalmente através do retorno de chamada EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD chamando o método UcxStaticStreamsCreate.

Seções de documentação

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

O UCX manipula 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 callback.

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

O UCX faz a triagem dos blocos de solicitação USB (URBs) de entrada e, em seguida, os encaminha para a fila de endpoint correta.

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

O driver do controlador de host desempenha um papel no gerenciamento pela UCX das filas associadas aos seus terminais e na programação dos terminais para o 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 cliente. Essas rotinas e estruturas de dados relacionadas são definidas nos cabeçalhos do WDK.

O UCX é chamado de extensão de classe de estrutura.

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