“udevadm monitor --kernel --property”看不到正在插入的 USB 设备

“udevadm monitor --kernel --property”看不到正在插入的 USB 设备

我有一个 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

我想了解检测是如何工作的,即它是哪一层,即此处“故障”并且为什么

据我所知:

  1. 设备和主机之间通信的第一步是设备在电气回路中插入一个电阻,这使得主机(或集线器?)意识到设备的物理(电气)存在。它是否正确?硬件(集线器/总线?)是否向总线驱动程序发出此电气事件信号?应该udevadm monitor --kernel --property向我展示这个活动吗?如果没有,还有什么可以在主机端向我展示此事件吗?

  2. 接下来发生什么?这应该在 中可见吗udevadm

  3. USB 堆栈的“传输层”接管,主机向设备发送 USB 控制数据包,询问其供应商和产品 ID。谁负责这样做?这是否已经是总线驱动程序软件在执行此操作,或者仍然在“硬件”中(即软件笔记本电脑的 USB 集线器/总线)?这应该在 中可见吗udevadm

  4. 主机收到设备的应答,现在知道设备有什么 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

相关内容