本文介绍 Windows 操作系统中对开发通用串行总线 (USB) 主机控制器驱动程序的支持,该驱动程序与 Microsoft 提供的 USB 主机控制器扩展 (UCX) 通信。
如果要开发不符合规范的 xHCI 主控制器或开发自定义的非 xHCI 硬件 ((例如虚拟主机控制器) ),则可以编写与 UCX 通信的主控制器驱动程序。 例如,可以考虑支持 USB 设备的无线坞。 电脑通过无线坞与 USB 设备通信,使用基于 TCP 的 USB 作为传输方式。
USB 主控制器扩展 (UCX)
USB 主机控制器扩展是系统提供的驱动程序 (Ucx01000.sys) 。 此驱动程序是通过使用 Windows 驱动程序 框架编程接口作为框架类扩展实现的。 主机控制器驱动程序充当该类扩展的客户端驱动程序。 当主机控制器驱动程序处理硬件操作和事件、电源管理和 PnP 事件时,UCX 充当抽象接口,将请求排队到主机控制器驱动程序,并执行其他任务。
UCX 是 Windows 中的 USB 主机端驱动程序之一。 它作为 FDO 加载到主机控制器设备堆栈中。
USB 主机控制器驱动程序
UCX 是可扩展的,旨在支持各种主机控制器驱动程序。 Windows 提供面向 USB xHCI 主机控制器的 xHCI 驱动程序 (Usbxhci.sys) 。
主机控制器驱动程序是 UCX 的客户端,以 内核模式驱动程序框架 (KMDF) 驱动程序编写。
Microsoft 提供的二进制文件
若要编写主机控制器驱动程序,需要 UCX (Ucx01000.sys) 和存根库 (Ucx01000.lib) 。 存根库位于 Windows 驱动程序工具包 (WDK) 中。 库执行两个main函数。
- 转换主控制器驱动程序发出的调用并将其传递到 UCX。
- 提供对版本控制的支持。 仅当 UCX 的主版本号与主机控制器驱动程序相同,且次要版本号与主控制器驱动程序相同或更高时,主控制器驱动程序才能与 UCX 一起使用。
开发工具
WDK 包含驱动程序开发所需的资源,例如标头、库、工具和示例。
入门
阅读官方规范,该规范描述了体系结构 (设备、主机控制器和集线器) 不同组件的预期行为。
了解 UCX 的体系结构
熟悉 Microsoft 提供的 USB 驱动程序堆栈:
熟悉 UCX 对象和句柄
UCX 扩展了 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 有关 WDF 对象的更多详细信息,请参阅 框架对象简介。
为了将请求排队到任何基础主机控制器驱动程序,UCX 使用这些对象。 有关详细信息,请参阅 主控制器驱动程序使用的 UCX 对象和句柄。
UCX 对象 | 说明 |
---|---|
主机控制器对象 (UCXCONTROLLER) | 表示由主机控制器驱动程序创建的主控制器。 驱动程序必须为每个主机控制器实例创建一个主机控制器对象。 通常通过调用 UcxControllerCreate 方法在EVT_WDF_DRIVER_DEVICE_ADD回调中创建。 |
根中心对象 (UCXROOTHUB) | 获取和控制主机控制器的根端口的状态。 通常由主机控制器驱动程序通过调用 UcxRootHubCreate 方法在EVT_WDF_DRIVER_DEVICE_ADD回调中创建。 |
USB 设备对象 (UCXUSBDEVICE) | 表示连接到总线的物理 USB 设备。 通常由主机控制器驱动程序通过调用 **UcxUsbDeviceCreate 方法在EVT_UCX_CONTROLLER_USBDEVICE_ADD回调中创建。 |
终结点对象 (UCXENDPOINT) | 表示 USB 设备对象上的终结点。 通常由主机控制器驱动程序在 EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD 中创建,或者通过调用 **UcxEndpointCreate 方法EVT_UCX_USBDEVICE_ENDPOINT_ADD回调中创建。 |
流对象 (UCXSTREAMS) | 表示通过单个批量终结点连接到设备的多个管道。 通常由主机控制器驱动程序通过调用 UcxStaticStreamsCreate 方法在EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD回调中创建。 |
文档部分
UCX 处理与根中心相关的大多数操作。 这允许 USB 集线器驱动程序以与常规集线器交互的方式与根集线器交互。 主机控制器驱动程序可以注册其回调函数。
UCX 会审传入的 USB 请求阻止 (URB) ,然后将其转发到正确的终结点队列。
主机控制器驱动程序在 UCX 管理与其终结点关联的队列以及将终结点编程为控制器硬件的过程中发挥作用。
为客户端驱动程序使用的 I/O 请求、支持例程、结构和接口提供规范。 这些例程和相关的数据结构在 WDK 头文件中定义。
UCX 称为 框架类扩展。
主控制器驱动程序称为 客户端驱动程序。