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

时间:2018-10-10 04:06:53

标签: linux-kernel driver

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

但是我无法弄清楚USB内核如何将设备驱动程序与正确的HCI驱动程序(xHCI,eHCI等)相关联...我发现大多数HCI驱动程序将自己注册为具有独特功能的平台驱动程序名称,usb核心的标识符是否与设备驱动程序和主机驱动程序相关?

1 个答案:

答案 0 :(得分:0)

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

  • 带有陪伴控制器(ohci或uhci)的ehci
  • 带有交易翻译器(TT)的ehci

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

因此,当前只有xhci时-它会将自己注册为linux系统中的唯一 USB主机驱动程序。第二件事-主机驱动程序功能可向USB设备请求任何内容-因此USB主机会生成对设备的任何请求,并负责维护设备的答案。 xhci主机驱动程序注册其中断和内存区域以进行请求维护。

我认为您需要从主机(xhci)的角度而不是从设备的角度查看此问题,因为主机是USB通信的主设备,并且主机会发起任何请求。设备仅在回答这些请求。