我有一个 USB 硬盘。当我将其插入 xhci_hcd 总线时通常它不会被列出lsusb
。如果这样做udevadm monitor --kernel --property
,则不会出现设备已插入的迹象。
有两件事最终将成功地使设备无论是组合还是单独可见:
- 合上盖子(从而使系统进入挂起状态)
- 解除 USB 驱动程序与 USB 总线的绑定并重新绑定:
_
echo -n 0000:19:00.0 > /sys/bus/pci/drivers/xhci_hcd/unbind
echo -n 0000:19:00.0 > /sys/bus/pci/drivers/xhci_hcd/bind
我想了解检测是如何工作的,即它是哪一层,即此处“故障”并且为什么?
据我所知:
设备和主机之间通信的第一步是设备在电气回路中插入一个电阻,这使得主机(或集线器?)意识到设备的物理(电气)存在。它是否正确?硬件(集线器/总线?)是否向总线驱动程序发出此电气事件信号?应该
udevadm monitor --kernel --property
向我展示这个活动吗?如果没有,还有什么可以在主机端向我展示此事件吗?接下来发生什么?这应该在 中可见吗
udevadm
?USB 堆栈的“传输层”接管,主机向设备发送 USB 控制数据包,询问其供应商和产品 ID。谁负责这样做?这是否已经是总线驱动程序软件在执行此操作,或者仍然在“硬件”中(即软件在笔记本电脑的 USB 集线器/总线)?这应该在 中可见吗
udevadm
?主机收到设备的应答,现在知道设备有什么 VID/PID。这是否一定意味着该设备
lsusb
此时可见?
我已经在互联网上搜索过,但还没有找到“设备(功能)检测如何与 USB 配合使用”文档。还没有阅读完 670 多页的 USB 规范 - 谁能告诉我:
- 上述哪些步骤是由硬件(集线器及其内部软件)执行的?
- 驱动程序在什么时候收到通知(事件、中断、轮询或其他)?
- 是否有(更好?更专业?)的工具能够在流程的早期告诉我发生了什么(无需向 USB 总线驱动程序添加调试语句)?
前言:
- 公共汽车是
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
- 该设备是一个
Bus 002 Device 002: ID 1e68:001b TrekStor GmbH & Co. KG DataStation maxi g.u
驱动器 - Debian 内核 3.16.0-4-amd64