USB设备路径后缀数字分配规则 树莓派零模拟思科USB控制台接口
USB sysfs设备路径后缀的编号规则
- 路径冒号后的格式为
激活配置号.接口号,该编号完全由主机端Linux内核在USB枚举阶段自动生成,不存在设备端主动上报编号的逻辑。 - 具体生成逻辑为:
- 冒号后第一个数字,是内核从设备返回的配置描述符中读取的
bConfigurationValue字段值,代表设备当前激活的USB配置编号 - 冒号后第二个数字,是内核从设备返回的接口描述符中读取的
bInterfaceNumber字段值,代表该配置下对应的接口编号
- 冒号后第一个数字,是内核从设备返回的配置描述符中读取的
- 你观察到的真实思科设备路径为
1-1.4.2:1.0,本质是因为真实思科控制台设备的第一个USB配置的bConfigurationValue为1,对应的ACM串口接口的bInterfaceNumber为0,才生成了对应的路径后缀。
调整g_serial实现:1.0后缀的配置方法
- 目前树莓派模拟设备生成
:2.0后缀的核心原因,是Linux USB Gadget框架默认给CDC ACM类型的gadget配置分配的bConfigurationValue值为2,对应的ACM接口bInterfaceNumber为0,因此主机端枚举后自然生成2.0的路径后缀。 - 不需要依赖udev规则,仅通过调整树莓派端g_serial的gadget配置即可实现完全仿真的路径匹配:
- 如果你是通过configfs方式挂载加载g_serial驱动,在gadget的配置节点目录下,找到对应配置的
bConfigurationValue文件,将文件内默认的数值2修改为1。 - 修改完成后重新绑定gadget驱动,主机端重新枚举设备时,就会读取到gadget上报的配置值1,最终生成的sysfs路径后缀就会变成
x.x:1.0,和真实思科设备的路径完全一致。 - 注意configfs中的配置节点名称(比如默认的
c.1)是gadget设备的本地内部标识,不会被主机端USB协议栈解析,真正决定主机端识别值的是节点下的bConfigurationValue字段。
- 如果你是通过configfs方式挂载加载g_serial驱动,在gadget的配置节点目录下,找到对应配置的
内容的提问来源于stack exchange,提问作者Liam Kelly
相关产品推荐
相关产品推荐

