为 USB 主机控制器开发 Windows 驱动程序概述

本文介绍在 Windows作系统中支持开发与Microsoft提供的 USB 主机控制器扩展(UCX)通信的通用串行总线(USB)主机控制器驱动程序。

如果要开发不符合规范或开发自定义非 xHCI 硬件(如虚拟主机控制器)的 xHCI 主机控制器,则可以编写与 UCX 通信的主机控制器驱动程序。 例如,请考虑支持 USB 设备的无线扩展坞。 电脑通过无线扩展坞使用基于TCP的USB传输协议与USB设备通信。

USB 主机控制器扩展 (UCX)

USB 主机控制器扩展是系统提供的驱动程序(Ucx01000.sys)。 此驱动程序使用 Windows 驱动程序框架 编程接口作为框架类扩展实现。 主机控制器驱动程序充当该类扩展的客户端驱动程序。 尽管主机控制器驱动程序负责处理硬件操作和事件、电源管理和 PnP 事件,UCX 作为一个抽象化接口,用于将请求排队发送给主机控制器驱动程序,并执行其他任务。

UCX 是 Windows 中的 USB 主机端驱动程序之一。 它作为 FDO 加载在主机控制器设备堆栈中。

USB 主机控制器驱动程序

UCX 可扩展,旨在支持各种主机控制器驱动程序。 Windows 提供面向 USB xHCI 主机控制器的 xHCI 驱动程序(Usbxhci.sys)。

主机控制器驱动程序是 UCX 的客户端,作为 Kernel-Mode Driver Framework (KMDF) 驱动程序编写。

Microsoft提供的二进制文件

若要编写主机控制器驱动程序,需要 UCX (Ucx01000.sys) 和存根库 (Ucx01000.lib)。 存根库位于 Windows 驱动程序工具包(WDK)中。 该库执行两个主要函数。

  • 转换主机控制器驱动程序发出的调用,并将其传递给 UCX。
  • 提供对版本控制的支持。 只有当 UCX 的主版本号与主机控制器驱动程序相同,并且次版本号与主机控制器驱动程序相同或更高时,主机控制器驱动程序才能使用 UCX。

开发工具

WDK 包含驱动程序开发所需的资源,例如标头、库、工具和示例。

下载适用于 Windows 的工具包和工具

开始

阅读官方规范,该规范描述了体系结构的不同组件(设备、主机控制器和中心)的预期行为。

通用串行总线的 xHCI:规范

官方通用串行总线文档

了解 UCX 的体系结构

熟悉Microsoft提供的 USB 驱动程序堆栈:

Windows 中的 USB 主机端驱动程序

体系结构:USB 主机控制器扩展(UCX)

熟悉 UCX 对象和句柄

UCX 扩展 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 有关 WDF 对象的更多详细信息,请参阅 框架对象简介

若要将请求排队至任何基础主机控制器驱动程序,UCX 使用这些对象。 有关详细信息,请参阅 主机控制器驱动程序使用的 UCX 对象和句柄

UCX 对象 Description
主机控制器对象 (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_ADDEVT_UCX_USBDEVICE_ENDPOINT_ADD回调中调用 **UcxEndpointCreate 方法创建。
流对象 (UCXSTREAMS) 表示通过单个批量终结点与设备连接的多个管道。 主机控制器驱动程序通常通过调用 UcxStaticStreamsCreate 方法在EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD回调中创建。

文档部分

主机控制器驱动程序的根中心回调函数

UCX 处理与根中心相关的大多数操作。 这样,USB 中心驱动程序就可以以与常规中心交互的方式与根中心进行交互。 主机控制器驱动程序可以注册其回调函数。

处理 USB 主机控制器驱动程序中的 I/O 请求

UCX 将传入的 USB 请求块(URB)分类和处理,然后将这些请求转发到正确的终结点队列。

在主机控制器驱动程序中配置 USB 终结点

主机控制器驱动程序在 UCX 管理与其终结点关联的队列以及将终结点编程为控制器硬件方面发挥作用。

USB 主机控制器扩展 (UCX) 参考

提供 I/O 请求、支持例程、结构和客户端驱动程序使用的接口的规范。 这些例程和相关数据结构在 WDK 标头中定义。

UCX 称为 框架类扩展

主机控制器驱动程序称为 客户端驱动程序