设备无法被正确枚举定位

现象:hdc无法使用

定位:

1.设备管理器中没有看到设备,提示无法识别usb设备设备无法被正确枚举定位_第1张图片

根据现象初步分析是设备枚举失败了

2.枚举失败的原因非常多,根据该项目背景,这次项目是因为同步最新代码所致,所以问题锁定在同步代码区间

3.交叉测试:

同一个内核+老的system  ok

同一个内核+新的system  error

根据交叉测试结果排除内核问题,问题聚焦在system

4.查看hdc工作需要配置的很多节点,包括iProduct,iManufacturer 等,发现这些配置均ok

5.因为设备不在手边,暂时无法使用抓包工具进行查看

6.继续查看关键节点发现。dev/usb-ffs/adb节点下只有ep0一个节点,ep1,ep2节点均为生成

问题初步厘清,是ep1,ep2节点创建失败,继而枚举失败

7.ep1,ep2的创建在脚本中

"mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000"创建

如果ep1,ep2没有创建成功,有2种可能

7.1这句配置命令没有执行

7.2这句配置执行了,但是内核执行的时候有问题

8.针对上述问题,搜索log关键字“read descriptors”和"read strings“均未找到这2个关键字,从表象上看没有调用到内核

但是找到mount的时候内核的调用栈

ffs_ep0_write()

其中“read descriptors”和"read strings“为info打印

故再次使用dmesg将内核打印全部打出,这次发现了大量了read descriptors,但是没有"read strings"

这说明,"mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000”这句是执行了的,只是内核返回失败了

根据内核逻辑

只有read descriptors而没有"read strings"说明上层对于ep0的配置出现了问题导致没有走到"read strings"

而ep0的配置是由上层hdcd服务在启动的时候对ep0进行写各种描述符完成的

而此前已经排除了内核本身的问题,根据经验,ep1,ep2未创建的原因就是配置ep0的时候出错了

查看hdcd服务种的配置描述符,果然配置描述符未同步,同步后,枚举即成功

你可能感兴趣的:(usb,linux,usb)