【问题标题】:How does USB core decides which HCI driver to use for a USB device driver?USB 内核如何决定将哪个 HCI 驱动程序用于 USB 设备驱动程序?
【发布时间】:2019-03-14 21:47:51
【问题描述】:

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

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

【问题讨论】:

    标签: linux-kernel driver


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的澄清。如果我需要编写自己的 HCI,如何将其连接到设备驱动程序?我可以参考linux内核中的任何特定HCI代码吗?
    • 我不确定 HCI 和设备驱动程序之间是否有任何 直接 连接,因为我现在不记得 USB 源的所有详细信息。也许 urb->hcpriv 以某种方式用于将设备与 HCI 连接?对不起,我现在没有足够的时间来调查它。我认为如果您要编写自己的 HCI 驱动程序,您只需在 usb-core 中正确注册即可。
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多