Linux kernel USB核心如何决定将哪个HCI驱动程序用于USB设备驱动程序?
我正在研究USB设备驱动程序代码。看起来它所做的只是填充一条URB消息,然后在匹配PCI供应商/产品ID时调用probe()后,调用usb_submit_URB()将消息传递给usb核心函数Linux kernel USB核心如何决定将哪个HCI驱动程序用于USB设备驱动程序?,linux-kernel,driver,Linux Kernel,Driver,我正在研究USB设备驱动程序代码。看起来它所做的只是填充一条URB消息,然后在匹配PCI供应商/产品ID时调用probe()后,调用usb_submit_URB()将消息传递给usb核心函数 但是,我无法弄清楚USB核心如何将设备驱动程序与正确的HCI驱动程序(xHCI、eHCI等)联系起来。。。我发现大多数HCI驱动程序都注册为具有唯一名称的平台驱动程序,即usb核心的标识符,用于关联设备驱动程序和主机驱动程序?当您使用usb 3.0时,内核使用xhci驱动程序,而不需要uhci、ohci或e
但是,我无法弄清楚USB核心如何将设备驱动程序与正确的HCI驱动程序(xHCI、eHCI等)联系起来。。。我发现大多数HCI驱动程序都注册为具有唯一名称的平台驱动程序,即usb核心的标识符,用于关联设备驱动程序和主机驱动程序?当您使用usb 3.0时,内核使用xhci驱动程序,而不需要uhci、ohci或ehci驱动程序。在这种配置中,您只有一个hci驱动程序和一个hci主机。在USB 2.0时代早期,有两种可能的配置:
- 带配套控制器的ehci(ohci或uhci)
- 带有事务转换器(TT)的ehci
我认为您需要从主机(xhci)的角度,而不是从设备的角度来看这个问题,因为主机是usb通信的主机,主机会发起任何请求。设备只回答这些请求。感谢您的澄清。如果我需要编写自己的HCI,如何将其连接到设备驱动程序?linux内核中有什么具体的HCI代码我可以参考吗?我不确定HCI和设备驱动程序之间是否有任何直接连接,因为我现在不记得usb源的所有细节。也许urb->hcpriv是用来连接设备和HCI的?对不起,我现在没有足够的时间调查此事。我认为,如果你要编写自己的HCI驱动程序,你只需要在usb核心中正确注册它。