USB百科
+ -

关于USB复合设备CompositeDevice的交待

2023-07-10 794 0

USB设备按复合的实现机制,分为组合设备和复合设备。关于他们之间的区分可详见:USB复合设备Compoite Device与组合设备Compound Device https://www.usbzh.com/article/detail-1175.html
为了便于区分,本站定义为:

  • USB复合设备CompositeDevice:是一个USB设备通过不同的接口描述符实现“多个”设备功能。
  • USB组合设备DCompoundDevice:是通过USB集线器硬件实现“多个”设备功能。

在windows系统中,USB复合设备是通过驱动usbccgp.sys来驱动的。通过该驱动分析USB设备的配置描述符中的多个接口描述符,拆分出不同的设备功能,并创建这些逻辑子设备。
我们在学习USB,除了看USB规范,调试等,更多的是看一些源代码的实现。不过不幸的是Windows是闭源的,我们无码可查,但幸运的是我们可以查看ReactOS相关的代码来帮助我们学习和理解。

ReactOS(React Operating System)是一个开源的免费操作系统,旨在实现与微软的Windows NT兼容。它的目标是提供一个具有与Windows操作系统相似外观和功能的操作系统,同时提供兼容性和可靠性。ReactOS是一个完全独立的项目,它不是基于Linux或Unix内核,而是使用自己的内核实现。

在ReactOS中提供了大量USB相关驱动的实例,虽然他们代码并不全面,也并等于Windows源码,但至少让我们有迹可寻。

 K:\module\ReactOS-0.4.8-src\ReactOS-0.4.8\drivers\usb 的目录

2018/04/05  19:22    <DIR>          .
2018/04/05  19:22    <DIR>          ..
2018/04/05  19:22               296 CMakeLists.txt
2018/04/05  19:22    <DIR>          usbaudio
2023/07/10  11:37    <DIR>          usbccgp
2018/04/05  19:22    <DIR>          usbd
2018/04/05  19:22    <DIR>          usbehci
2018/04/05  19:22    <DIR>          usbhub
2018/04/05  19:22    <DIR>          usbhub_new
2018/04/05  19:22    <DIR>          usbohci
2018/04/05  19:22    <DIR>          usbohci_new
2018/04/05  19:22    <DIR>          usbport
2018/04/05  19:22    <DIR>          usbstor
2018/04/05  19:22    <DIR>          usbstor_new
2018/04/05  19:22    <DIR>          usbuhci
               1 个文件            296 字节
              14 个目录 138,395,648,000 可用字节

而关于USB复合设备逻辑的代码实现,本人以前也做了一个粗略的分析,可详见:https://www.usbzh.com/article/detail-587.html

其实如果有条件的同学,能拿到XP泄露的源代码的,可以通过其源代码来查看实现细节,而通过reactos来查看大的实现逻辑。

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兼容驱动Composite层级引起的摄像头灯问题
跌跌撞撞,搞了快一个星期。一个定制厂商用的UVC摄像头指示搞了几天,今天算是可以蒙混过关了。关于调试过程中的一部分细节,可见本人的另一篇文章:关于UVC摄像头指示灯的调试过程总结 http://www.usbzh.com/article/detail-430.html在这里,可能只能算是总结二吧,没......
USB通用父驱动usbccgp.sys的过滤UVC摄像头、UAC麦克风和HID设备硬件ID
激动的心情,无溢言表。。虽然只是一个很简单的东西。。但相于折腾了这么久,还是很开心的了。最近有个需求,功能是这样的:有一个USB复合设备,连接到windows系统中它在windows下的设备树如下:USB Composite Device(usbccgp.sys)UVC CameraUAC ......
USB复合设备-UVC摄像头HID设备共存的设计实现
通常做USB设备的开发,我们做的都是单一的功能设备。这种单一的功能设备只实现某种特定的功能,如只实现一个HID鼠标或键盘,只实现一个USB存储功能,或再复杂一点只实现一个UVC音频麦克风和扬声器功能或一个UVC摄像头功能。但我们在一般的市场上看到的设备通常不只实现一种功能,如UVC摄像头功能还提供......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
USBCCGP 功能简介
许多 USB 设备提供了多个 USB 接口。在 USB 术语中,此类设备被称为USB复合设备。Microsoft Windows 2000 和 Windows 98 操作系统的 USB 总线驱动程序 (Usbhub.sys) 中包含有一个通用父设备,它将复合设备的各接口显示为一台单独的设备。在 M......
USBCCGP 复合USB设备的枚举
当新的 USB 设备连接到主机计算机时,USB 总线驱动程序创建设备的物理设备对象 (PDO),并生成报告新 PDO 的即插即用事件。 操作系统然后,查询的硬件 Id 与 PDO 相关联的总线驱动程序。对于所有 USB 设备、 USB 总线驱动程序报告设备 ID具有以下格式:USBVID_xx......
USBCCGP 复合设备接口设备ID
复合 USB 设备上的接口可分组到集合中或分别代表一个 USB 函数。如果接口未分组在集合中,则通用父驱动程序会为每个接口创建一个 PDO,并为每个 PDO 生成一组硬件 Id。USB设备ID接口 PDO 的设备 ID具有以下格式:USBVID_v(4)&PID_p(4)&MI......
USBCCGP 驱动结构
USBCCGP驱动文件结构USBCCGP驱动位于REACTOS的ReactOS-0.4.0driversusbusbccgp目录下,包含文件descriptor.cfdo.cfunction.cguid.cmisc.cpdo.cusbccgp.cusbccgp.husbccg......
USBCCGP 分发函数
通过上一节知道,USBCCGAP将所有的IRP都会发到USBCCGP_Dispatch函数中。其代码如下:usbccgp.cNTSTATUSNTAPIUSBCCGP_Dispatch( PDEVICE_OBJECT DeviceObject, PIRP Irp){ ......
USBCCGP 功能设备驱动FDO创建
回到入口函数DriverEntry,驱动扩展结构体的AddDevice函数指针被置为USBCCGP_AddDevice。这个函数指针是WDM驱动功能设备创建和扩展数据初始的回调函数。usbccgp.cNTSTATUSNTAPIDriverEntry( PDRIVER_OBJECT D......
USBCCGP FDO的启动
USBCCGP FDO的启动会执行主功能号为IRP_MJ_PNP,次功功能号IRP_MN_START_DEVICE的IRP。其函数调用关系如下:USBCCGP_Dispatch FDO_Dispatch FDO_HandlePnp ......
USBCCGP 获取USB设备描述符
USB设备的描述符是通过函数USBCCGP_GetDescriptors来获取的。descriptor.c /* Get descriptors */ Status = USBCCGP_GetDescriptors(DeviceObject); if (!NT_SUCCESS......
USBCCGP 获取USB设备特性
设备特性在windows下所有设备的通用,其主要包括一些电源特性和热插拨特性。结构定义如下:typedef _Struct_size_bytes_(Size) struct _DEVICE_CAPABILITIES { _Field_range_(==, sizeof(struct _DE......
USBCCGP 配置设备
获取设备的配置描述符通过前面已经知道,其包括的内容比较多,如接口描述符、端点描述符等,其中有很多我们进行数据通讯的信息,所以下来我们就要对设备进行配置。在USBCCGP USB复合设备驱动中,由于其将各个独立的接口会枚举成一个单独的设备,所以一般情况下有几个接口描述符就会被枚举成几个设备(UVC设备......
USBCCGP 总线过滤驱动接口
总线驱动或过滤驱动的接口其实就是一个USBC_DEVICE_CONFIGURATION_INTERFACE_V1的结构体,其用于创建PDO.#define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1 0x0001typedef s......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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