Обзор разработки драйверов Windows для USB-контроллеров узлов

В этой статье описывается поддержка в операционной системе Windows для разработки драйвера хост-контроллера универсальной последовательной шины (USB), который взаимодействует с предоставленным Корпорацией Майкрософт расширением хост-контроллера USB (UCX).

Если вы разрабатываете контроллер узла xHCI, который не соответствует спецификации, или разрабатываете пользовательское оборудование, отличное от xHCI (например, виртуального хост-контроллера), вы можете написать драйвер хост-контроллера, который взаимодействует с UCX. Например, рассмотрим беспроводную док-станцию, которая поддерживает USB-устройства. Компьютер взаимодействует с USB-устройствами через беспроводную док-станцию, используя USB через TCP в качестве транспорта.

Расширение контроллера узла USB (UCX)

Расширение USB-контроллера узла — это системный драйвер (Ucx01000.sys). Этот драйвер реализуется как расширение класса платформы с помощью программных интерфейсов Windows Driver Framework . Драйвер хост-контроллера выступает в качестве драйвера клиента для расширения этого класса. В то время как драйвер контроллера узла обрабатывает аппаратные операции и события, управление питанием и события PnP, UCX выступает в качестве абстрактного интерфейса, который помещает запросы в очередь к драйверу контроллера узла и выполняет другие задачи.

UCX — это один из драйверов USB на стороне узла в Windows. Он загружается в качестве FDO в стеке устройств контроллера узла.

Драйвер контроллера узла USB

UCX является расширяемым и предназначен для поддержки различных драйверов хост-контроллера. Windows предоставляет драйвер xHCI (Usbxhci.sys), предназначенный для хост-контроллеров USB xHCI.

Драйвер хост-контроллера — это клиент UCX, написанный как драйвер в режиме ядра (KMDF).

Двоичные файлы, предоставляемые корпорацией Майкрософт

Чтобы написать драйвер хост-контроллера, вам потребуется UCX (Ucx01000.sys) и библиотека заглушки (Ucx01000.lib). Библиотека заглушки находится в комплекте драйверов Windows (WDK). Библиотека выполняет две main функции.

  • Преобразуйте вызовы, выполненные драйвером хост-контроллера, и передайте их в UCX.
  • Обеспечивает поддержку управления версиями. Драйвер контроллера узла будет работать с UCX, только если UCX имеет тот же основной номер версии, что и драйвер контроллера узла, и тот же или более дополнительный номер версии, что и драйвер контроллера узла.

Средства разработки

WDK содержит ресурсы, необходимые для разработки драйверов, такие как заголовки, библиотеки, инструменты и примеры.

Скачивание комплектов и средств для Windows

Начало работы

Ознакомьтесь с официальной спецификацией, описывающей ожидаемое поведение различных компонентов (устройства, контроллера узла и концентратора) архитектуры.

xHCI для универсальной последовательной шины: спецификация

Официальные документы универсальной последовательной шины

Общие сведения об архитектуре UCX

Ознакомьтесь со стеком драйверов USB, предоставляемым корпорацией Майкрософт:

Драйверы USB на стороне узла в Windows

Архитектура: расширение контроллера узла USB (UCX)

Знакомство с объектами и дескрипторами UCX

UCX расширяет функциональные возможности объектов WDF, определяя собственные объекты UCX, относящиеся к USB. Дополнительные сведения об объектах WDF см. в статье Общие сведения об объектах платформы.

Для очередей запросов к любому базовому драйверу контроллера узла UCX использует эти объекты. Дополнительные сведения см. в разделе Объекты и дескрипторы UCX, используемые драйвером контроллера узла.

Объект UCX Описание
Объект хост-контроллера (UCXCONTROLLER) Представляет контроллер узла, созданный драйвером контроллера узла. Драйвер должен создать только один объект контроллера узла на экземпляр контроллера узла. Обычно создается в EVT_WDF_DRIVER_DEVICE_ADD обратным вызовом путем вызова метода UcxControllerCreate .
Объект root hub (UCXROOTHUB) Возвращает и управляет состоянием корневых портов контроллера узла. Создается драйвером контроллера узла, как правило, в EVT_WDF_DRIVER_DEVICE_ADD обратным вызовом путем вызова метода UcxRootHubCreate .
Объект USB-устройства (UCXUSBDEVICE) Представляет физическое USB-устройство, подключенное к шине. Создается драйвером контроллера узла, как правило, в EVT_UCX_CONTROLLER_USBDEVICE_ADD обратном вызове путем вызова метода **UcxUsbDeviceCreate .
Объект Endpoint (UCXENDPOINT) Представляет конечную точку в объекте USB-устройства. Создается драйвером контроллера узла, как правило, в EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD или EVT_UCX_USBDEVICE_ENDPOINT_ADD обратном вызове метода **UcxEndpointCreate .
Объект Stream (UCXSTREAMS) Представляет несколько каналов к устройству в одной массовой конечной точке. Создается драйвером контроллера узла, как правило, в EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD обратном вызове путем вызова метода UcxStaticStreamsCreate .

Разделы документации

Функции обратного вызова корневого концентратора драйвера контроллера узла

UCX обрабатывает большинство операций, связанных с корневым концентратором. Это позволяет драйверу USB-концентратора взаимодействовать с корневым концентратором так же, как и с обычным концентратором. Драйвер контроллера узла может регистрировать свои функции обратного вызова.

Обработка запросов ввода-вывода в драйвере контроллера узла USB

UCX выполняет рассмотрение входящих блоков запросов USB (URB), а затем перенаправляет их в правильную очередь конечных точек.

Настройка конечных точек USB в драйвере хост-контроллера

Драйвер хост-контроллера играет роль в управлении UCX очередями, связанными с конечными точками, и в программировании конечных точек в оборудование контроллера.

Справочник по расширению контроллера узла USB (UCX)

Предоставляет спецификации для запросов ввода-вывода, подпрограмм поддержки, структур и интерфейсов, используемых драйвером клиента. Эти подпрограммы и связанные структуры данных определяются в заголовках WDK.

UCX называется расширением класса платформы.

Драйвер хост-контроллера называется драйвером клиента.