USB 核心如何决定将哪个 HCI 驱动程序用于 USB 设备驱动程序?

How does USB core decides which HCI driver to use for a USB device driver?

我正在研究 USB 设备驱动程序代码。看起来它所做的只是填充 URB 消息,然后调用 usb_submit_urb() 以在匹配 PCI vendor/product ID 时调用 probe() 将消息传递给 USB 核心函数。

但是我无法弄清楚 USB 核心如何将设备驱动程序与正确的 HCI 驱动程序(xHCI、eHCI 等)相关联...我发现大多数 HCI 驱动程序都将自己注册为平台驱动程序,它具有一个唯一的名字,是usb core用来关联设备驱动和主机驱动的标识符吗?

当你有 usb 3.0 - 然后内核使用 xhci 驱动程序并且不需要 uhci、ohci 或 ehci 驱动程序。在这样的配置中,您只有一个 hci 驱动程序和一个 hci 主机。在 USB 2.0 时代的早期,有两种可能的配置:

  • 带有配套控制器(ohci 或 uhci)的 ehci
  • 带事务转换器 (TT) 的 ehci

在第一种情况下,您需要安装两个驱动程序 - 例如 ehci 和 uhci。在第二个中,只需要专用的 ehci 驱动程序。

所以目前当你只有 xhci - 它在 linux 系统中将自己注册为 唯一的 USB 主机驱动程序。第二件事 - 主机驱动程序功能从 USB 设备请求任何东西 - 所以 USB 主机生成对设备的任何请求,它负责维护来自设备的答案。 xhci主机驱动注册他的中断和内存区域用于请求维护。

我觉得你需要从主机(xhci)的角度来看这个问题,而不是从设备的角度,因为主机是usb通信的master,任何请求都是主机发起的。设备仅响应这些请求。