Windows下USB百科
+ -

Windows10中USB驱动程序架构

2024-11-05 6 0

Windows10驱动程序从功能上分分为USB主机驱动程序和设备端驱动程序,从支持的协议栈来分为USB3.0驱动程序和USB2.0驱动程序(包括兼容USB1.0和USB1.1)。

Windows10中USB驱动程序架构

USB主机驱动程序

USB主机驱动程序指的是USB控制器和USB集线器驱动程序(包括根集线器)。按协议栈又分为USB3.0和USB2.0驱动程序。

  • 对于USB3.0,其USB主机控制器驱动为XHCI,其驱动包括USBXhci.sys. UCX01000.SYS和USB根集线器驱动程序USBhub3.sys
  • USB 3.0 驱动程序由内核模式驱动程序框架 (KMDF) 接口创建
  • 对于USB2.0,其USB主机控制器驱动为EHCI(1.1的USBUhci和USBohci.sys)和其公共类代码USBPORT.SYS。USB集线器驱动程序为USBHUB.SYS

USB 3.0 主机控制器驱动程序(Usbxhci.sys)

xHCI 驱动程序是 USB 3.0 主机控制器驱动程序。 xHCI 驱动程序的职责包括初始化 xHCI 控制器硬件的 MMIO 寄存器和基于内存的数据结构、将来自上层驱动程序的传输请求映射到传输请求块,以及将请求提交到硬件。 完成传输后,驱动程序处理来自硬件的传输完成事件,并将事件传播到驱动程序堆栈上。 它还控制 xHCI 控制器设备槽和终结点上下文。

Windows 将 xHCI 驱动程序作为主机控制器的设备堆栈中的函数设备对象(FDO)加载。

USB 主机控制器扩展(Ucx01000.sys)

USB 主机控制器扩展驱动程序(KMDF 的扩展)是基础类特定的主机控制器驱动程序(例如 xHCI 驱动程序)的新扩展。 新驱动程序可扩展,旨在支持将来要开发的其他类型的主机控制器驱动程序。 USB 主机控制器扩展充当中心驱动程序的通用抽象接口,提供一种通用机制,用于将请求排队到主机控制器驱动程序,并替代某些选定的函数。 由上层驱动程序启动的所有 I/O 请求在 xHCI 驱动程序之前到达主机控制器扩展驱动程序。 收到 I/O 请求后,主机控制器扩展将验证请求,然后将请求转发到与目标终结点关联的正确 KMDF 队列。 xHCI 驱动程序在准备好进行处理时从队列中检索请求。 USB 主机控制器扩展驱动程序的职责包括:

  • 向 xHCI 驱动程序提供特定于 USB 的对象。
  • 向 xHCI 驱动程序提供 KMDF 事件回调例程。
  • 管理和控制与主机控制器关联的根中心的操作。
  • 实现客户端驱动程序可配置的功能,如链接的 MDL、流等。

Usb3.0集线器驱动 (Usbhub3.sys)

适用于 3.0 设备的 USB 驱动程序堆栈中的新中心驱动程序使用 KMDF 驱动程序模型。

  • 管理 USB集线器及其端口。
  • 枚举附加到其下游端口的设备和其他集线器设备。
  • 为枚举设备和集线器创建物理设备对象(PDO)。

Windows 将集线器驱动程序作为 FDO 加载到集线器设备堆栈中。 新驱动程序中的设备枚举和集线器管理通过一组状态机实现。 集线器驱动程序依赖于 KMDF 进行电源管理和 PnP 功能。 除了集线器管理之外,集线器驱动程序还对 USB 客户端驱动程序层发送的某些请求执行初步检查和处理。 例如,集线器驱动程序分析选择配置请求,以确定请求将配置哪些终结点。 分析信息后,集线器驱动程序会将请求提交到 USB 主机控制器扩展或进一步处理。

USB设备端驱动程序

USB设备端驱动程序主要着重的是功能,这里有UVC相机图像驱动程序,UAC音频驱动程序,HIDUSB等USB-mini 端口驱动程序。
当然除了这些标准的类驱动程序外,还包括一些功能驱动程序,如USBCCGP.SSY,winusb.sys,usbd.sys等。

Usbd.sys

Microsoft提供导出 USB 客户端驱动程序例程的Usbd.sys库。 帮助程序例程简化了客户端驱动程序的操作任务。 例如,通过使用帮助程序例程,USB 客户端驱动程序可以针对某些特定操作(例如选择配置)生成 USB 请求块(URB), 并将这些 URB 提交到 USB 驱动程序堆栈。

Usbdex.lib

此帮助程序库是 Windows 8 的新增功能。 库导出例程主要用于分配和生成 URB。 这些例程取代了Usbd.sys导出的一些旧例程。 新例程要求客户端驱动程序向 USB 驱动程序堆栈注册,该堆栈维护注册句柄。 该句柄用于调用其他 Usbdex.lib 例程。 由新例程分配的某些 URI 具有 USB 驱动程序用于更好地跟踪和处理的 URB 上下文。 有关详细信息,请参阅 分配和生成 URB。

Winusb.dll

Winusb.dll是一个用户模式 DLL,它公开 用于与 Winusb.sys 通信的 WinUSB 函数 ,该函数在内核模式下作为设备的功能驱动程序加载。 应用程序使用这些函数配置设备、检索有关设备的信息以及执行 I/O 操作。 有关使用这些函数的信息,请参阅 如何使用 WinUSB 函数访问 USB 设备。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB设备和USB集线器HUB的数据传输
USB高速集线器与USB根集线器之间只通过USB使用USB高速通讯讯方式,而对于低速或全速的数据通讯的转换是由其挂接的最近的USB-HUB负责完成转换。如下图:对于USB高速设备和USB高速HUB,使用高速通讯。对于连接到高速HUB上的低速或全速USB-HUB,使用低速或全速通讯方式。对于连接到高速......
USB控制器及分类
USB是一直在变化的,从最开始的1.0发展到现在开始大规模使用的3.0,甚至到今天已经发布的USB4.0。所以USB的控制器也在不断的变化升级。所以由于历史的原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。不论是那种USB主机控制器,简称主控,都是符合......
USB 集线器HUB
通过USB集线器,可以很简单的实现主机扩展USB设备的数量。在USB协议规范中,USB集线器作为了一种特殊的设备在存在,USB规范专门为其定义了一种设备类。USB集线器的结钩集线器由6个组件组成:上行端口:用于连接上层的USB集线器或者根集线器。下行端口:用于连接下层的USB功能设备或扩展的U......
USB主机端控制器集线器与USB设备类型分类
USB根据设备功能及类型,可以分USB主机端,USB设备端。USB主机端-USB hostUSB主机端也叫USB控制器,包括两大部分,分别为与系统总线进行数据交互的USB控制器和USB总线的根集线器。一个USB主机端就是一个独立的USB总线,其按USB版本可分为OHCI,UHCI,EHCI,xHC......
USB设备与集线器最大可以级联多少层
在USB2.0规范中,定义了USB设备与集线器最大可以级联7层(包括根集线器),即根集线器之设备之间最多有5个继集线器。注意:有一个USB复合(compound)设备,其本身是一个USB集线器并接连1个或多个USB功能设备,这里需要将这个USB集线器算在内。......
USB集线器HUB的枚举过程及集线器状态
USB集线器和其他USB设备一样,都需要在上电时进行配置。在USB协议中,使用默认的端0点。进行上电初期的通信。USB集线器除了配置其自身外,还需要对下行端口连接的其他USB设备进行识别。USB集线器HUB枚举过程USB集线器的上电配置过程如下:USB集线器连接到USB主机的根集线器上。USB......
USB HUB集线器芯片选型
型号TT模式过流检测工作温度封装 CH334GSTT--40~85℃SOP16 CH334RMTT--40~85℃QSOP16 CH334U/FMTTGANG模式-40~85℃QSOP28/QFN24_4x4 CH334S/Q......
USBIP虚拟控制器和根集线器HUB的设备信息分析
USBIP是一套可以实现USB远程设备的本机映射,这样就像在本地操作目标USB设备一样。其原理是在本地端通过安装一个虚拟的USB根控制器,根集线器,同时虚拟出4个USB端口,当远程USB设备连接到远程机器时,可以把远程设备的USB信息通过网络传输到本地,在本地的虚拟USB端口虚拟一个相同的设备,这样......
USBIP虚拟控制器安装命令过程分析
USBIP虚拟控制器其自带的安装命令为:usbip.exe install -w可以看到,这是一个明显的自定义命令。这里一个比较有意思的是对命令行进行解析,使用的函数是getopt_long。在介绍这个命令之前,我们先介绍几个命令行参数的函数。命令行的长短项之分命令行分为长项和短项,我们一般使......
控制器USB的信号和协议实现
目录第1章 深入理解USB信号0011.1 USB的电气特性和信号0021.1.1 电气特性0031.1.2 驱动特性0071.1.3 USB信号特性0091.1.4 数据包编码0181.2 连接和断开的检测0201.2.1 连接状态的检测0211.2.2 断开状态的检测0241.3 速度检测028......
USBIP 设备树层次分析
通过前面知道,usbip_vhci工程实现的是pnp管理器虚拟出来的PDO的FDO,但同样也是这个FDO创建的PDO虚拟根USB控制器和其子设备HUB的驱动程序。USBIP设备硬件ID名称sys文件inf文件硬件IDusbip-win VHIC Rootusbip_vhic......
USBIP 虚拟控制器设备(VDEV_CPDO)PDO的初始化过程
IRP_MN_QUERY_ID/BusQueryDeviceIDPAGEABLE NTSTATUSpnp_query_id(pvdev_t vdev, PIRP irp, PIO_STACK_LOCATION irpstack){ NTSTATUS status = STATUS_......
USBIP 虚拟控制器设备(VDEV_VHCI)FDO的初始化过程
虚拟ROOT总线FDO创建了虚拟USB控制器PDO之后,系统通过各种IRP_MJ_PNP收集完物理设备的信息之后,开始根据其硬件ID进行设备驱动批配,批配成功后,装载驱动并调用其AddDevice之后,开始FDO的创建过程。通过前面的可知,USBIP实现的根驱动,USB控制器、HUB和设备PDO的S......
USBIP 集线器PDO(VDEV_HPDO)的初始化过程
USB集线器其实也是USB设备的一类,其设备分类分类为0x09。和USBIP虚拟的控制器(VDEV_CPDO)类似,USB控制器创建了其PDO之后,会通过IRP_MN_QUERY_DEVICE_RELATIONS返回USB集线器HUB的PDO设备列表。PNP管理器收到有新的设备之后,会开始收集这个P......
USBIP 虚拟集线器FDO子设备的管理
IRP_MN_QUERY_DEVICE_RELATIONS这得从IRP_MN_QUERY_DEVICE_RELATIONS来谈起,好像有点看的不是很明白。先把上一节的代码复制过来,看一下:static PAGEABLE NTSTATUSget_bus_relations_vhub(pvhub_d......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!