USB驱动笔记

OEM:原始设备制造商
IHV:独立设备卖方

usb 版本:usb1.0,usb 1.1 ,usb 2.0, usb 3.0,usb 3.1,usb 3.2
Windows 操作系统为 USB 主控制器、集线器以及符合官方 USB 规范的设备和系统提供驱动支持。
Windows 提供编程接口,用于开发可与 USB 设备通信的设备驱动程序和应用程序。


USB UWP应用:USB SDK
USB客户端驱动程序编写框架:KMDF、UMDF
USB主控制器驱动程序:开发不符合规范的 xHCI 主控制器或开发自定义的非 xHCI 硬件 。底层通讯包:UCX
USB功能控制器驱动程序:处理由主机发送到设备的所有 USB 数据传输内容和命令.底层通讯包:UFX(开发类驱动程序)
USB双角色驱动程序(URS):双角色转换开关。底层通讯包:URS CX。 URS 驱动程序根据平台中的硬件事件管理端口的当前角色,以及相应软件堆栈的加载和卸载

USB 类型 C 连接器驱动程序:实现对 USB 类型 C 的支持。底层通讯包:UcmCx 
模拟设备的 USB 驱动程序:可以开发模拟通用串行总线 (USB) 主机控制器驱动程序和连接的虚拟 USB 设备。 这两个组件组合成单个 KMDF 驱动程序。底层通讯包:UdeCx

编写 WinUSB 应用程序:
Winusb.h
Usbioctl.h

Microsoft USB 测试工具 (MUTT) 是用于测试 USB 硬件与 Microsoft USB 驱动程序堆栈互操作性的设备集合。


Microsoft 提供的 USB 驱动程序:
USB 设备端驱动程序:
USB-IF 设备类驱动程序:
USB 主机端驱动程序:
USB 泛型功能驱动程序 :WinUSB.sys
复合设备的 USB 通用父驱动程序: Usbccgp.sys(composite and complex)

window 提供USB双角色驱动程序支持:
通过 USB 连接到移动外围设备,与蓝牙等无线协议相比,USB 提供更大的数据带宽。
在连接到其他 USB 设备并与其通信时有一个USB 充电的选项 (前提是存在所需的硬件支持) 。
允许拥有移动设备(如智能手机)的客户最有可能完成的所有工作。 此功能将提高有线停靠方案中的工作效率,其中移动设备停靠并因此托管外围设备。
移动设备既可以作为主机也可以做为设备。

Window中usb宿主端驱动程序堆栈:

USB 3.0 驱动程序堆栈
Microsoft 使用内核模式驱动程序框架 (KMDF) 创建 USB 3.0 驱动程序(主控驱动程序和集线器驱动程序)

1)xHCI 驱动程序是 USB 3.0 主机控制器驱动程序(Usbxhci.sys)。
xHCI 驱动程序的职责:xHCI 将上层驱动程序的传输请求映射到传输请求块(终端点上下文),以及将请求提交到硬件。 完成传输后,驱动程序处理来自硬件的传输完成事件,并将事件传播到驱动程序堆栈上。 它还控制 xHCI 控制器设备槽上下文(device connect)和终结点上下文。

USB 集线器驱动程序 (Usbhub3.sys):
管理 USB 集线器及其端口。
枚举连接到其下游端口的设备和hub。
为枚举设备和hub创建物理设备对象 (PDO) 。

USB 主机控制器扩展 (Ucx01000.sys)
向 xHCI 驱动程序提供特定于 USB 的对象(URB)。
向 xHCI 驱动程序提供 KMDF 事件回调例程。
管理和控制与主机控制器关联的根中心的操作(filter)。
上层驱动程序I/O 请求-->主机控制器扩展-->KMDF 队列-->xHCI 驱动程序


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

USB 2.0 驱动程序堆栈:
ehci,uhci ,ohci  是USB2.0三个微型端口驱动程序。对应三个ehci,uhci ,ohci 三种设备。
Usbuhci.sys :通用主机控制器接口。
Usbohci.sys :打开主机控制器接口。
Usbehci.sys: 加强主机控制器接口。支持高速 USB 设备
USB驱动程序堆栈底部是主控制器驱动程序。 它由Usbport.sys 以及同时运行的三个微型端口驱动程序中的一个或多个组成。
当系统检测到主机控制器硬件时,它将加载这些微型端口驱动程序之一。 微型端口驱动程序在加载后加载端口驱动程序(Usbport.sys)。 
端口驱动程序处理主机控制器驱动程序职责的某方面,这些独立于特定协议。

端口驱动程序上方是 USB 总线驱动程序,Usbhub.sys,也称为集线器驱动程序。 这是系统上每个中心的设备驱动程序。


USB 通用泛型父驱动程序:
Usbccgp.sys,使用 Windows WDM驱动程序模型
设备描述符中的 numInterfaces 大于 1,hub 驱动程序将枚举并加载父复合驱动程序.
父复合驱动程序枚举复合设备中的所有功能,并为每个功能创建 PDO。 这会导致为设备中的每个功能加载相应的类或客户端驱动程序。

Winusb.sys: 对于不需要自定义功能驱动程序的设备,Winusb.sys 可以作为功能驱动程序安装在设备的内核模式堆栈中。
usb传输驱动程序(由Microsoft 提供,与具体设备类关联)-->Winusb.sys  --> usbhub

USB 客户端驱动程序:
USB 客户端驱动程序是 USB 驱动程序堆栈的客户端的类或设备驱动程序。由Microsoft 或第三方供应商提供。
分类:复合设备的客户端驱动程序与非复合设备客户端驱动程序
USB 客户端驱动程序可以在用户模式或内核模式下运行,具体取决于驱动程序的要求。
 可以使用 KMDF、UMDF 或 WDM 例程编写 USB 客户端驱动程序。
对于公开多个功能且没有父类驱动程序的复合 USB 设备,Windows 在集线器驱动程序和客户端驱动程序层之间
加载 USB 通用父驱动程序 (Usbccgp.sys) 。 父驱动程序为复合设备的每个功能创建单独的 PDO。

PnP 管理器加载为该接接口创建功能设备对象(FDO)的类驱动程序。


客户端驱动程序的帮助程序库:
Usbd.sys:提供一套接口,简化客户端驱动程序操作任务。比如生成特定URB块,并将URB块传递到USB驱动程序堆栈中。
Usbdex.lib:主要用于分配和生成 特定URB 的例程。
Winusb.dll:与Winusb.sys 通信。应用程序使用这些函数来配置设备、检索有关设备的信息以及执行 I/O 操作。

Window中usb设备端驱动程序:
USB 客户端泛型驱动程序:GenericUSBFn.sys
可以通过发送泛型usbfnioctl.h 中定义的 I/O 控制代码,创建与GenericUSBFn.sys通信的用户模式服务。
GenericUSBFn.sys 处理与 USB 功能驱动程序的内核模式通信。
GenericUSBFn.sys -- >usb类别驱动程序

USB 功能类驱动程序。 USB 设备上实现特定接口(或接口组)的功能。

功能类驱动程序可以纯粹作为内核模式驱动程序实现,也可以是与系统提供的类驱动程序配对的用户模式服务(GenericUSBFn.sys)
功能类驱动程序可以将请求发送到控制器利用usb功能类驱动程序到UFX 编程接口。


USB 功能客户端驱动程序:
UFX :KMDF提供的系统扩展。
UFX 提供了一个抽象接口,可在不同的控制器之间一致地工作。仅处理常见功能。
UFX 公开了上层(USB功能类驱动程序和用户模式服务)可用于将请求发送到控制器的标准 IOCTL。

USB 功能客户端驱动程序负责实现控制器特定的操作。 其中包括实现终结点数据传输、USB 设备状态更改
(重置、暂停、恢复)、附加/分离检测、端口/充电器检测。 客户端驱动程序还负责处理电源管理和 PnP 事件。

功能客户端驱动程序(usb设备驱动程序)使用 USB 功能类驱动程序将作为内核模式驱动程序KMDF)写入 UFX 编程接口。

USB 低筛选器驱动程序:
USB 高筛选器驱动程序:

其他:
USB 驱动程序堆栈使用 bcdDevice 以及 idVendor 和 idProduct 为设备生成硬件和兼容 ID
USB 配置包含一系列接口。 每个接口由一个或多个备用设置组成,每个备用设置由一组终结点组成, (查看 USB 设备布局) 。
配置描述符还可以包含由设备制造商定义的自定义描述符。
接口中的每个终结点描述设备的单个输入或输出流。

WDM驱动程序总类:总线驱动程序,筛选器驱动程序,功能驱动程序。
总线驱动程序:任何总线都有总线驱动程序。总线包括控制器,适配器,桥接器,任何具有子设备的设备
筛选器驱动程序:可以为功能驱动程序添加任意数量的筛选器驱动程序
功能驱动程序:为相应的设备提供可操作的接口.


ACPI 设备驱动:
ACPI 设备是集成到系统板上的硬件设备:设备的物理设备对象 (PDO) 由系统提供的根总线驱动程序创建,
而 ACPI 驱动程序会创建总线筛选器 DO,供应商都会提供可选的 FDO。
如果设备不是集成到系统板上的硬件设备,ACPI 驱动程序将枚举设备并创建 PDO。 供应商提供可选的 FDO。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值