首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制USB设备驱动程序调用特定的HCI控制器驱动程序?

如何强制USB设备驱动程序调用特定的HCI控制器驱动程序?
EN

Stack Overflow用户
提问于 2018-10-12 04:03:47
回答 1查看 546关注 0票数 0

我研究了几个USB设备驱动程序代码,它们看起来必须与PCI设备关联,当在USB设备驱动程序中调用usb_submit_urb()时,urb结构已经与特定的HCI驱动程序相关联,然后当usb_submit_urb()调用usb_hcd_submit_urb()时,usb_hcd_submit_urb ()将从参数urb获取hcd,然后调用urb->enqueue (),后者映射到特定的HCI驱动程序。

代码语言:javascript
复制
int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
{
    int         status;
    struct usb_hcd      *hcd = bus_to_hcd(urb->dev->bus);

    ......
    ......
        if (likely(status == 0)) {
            status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);

在我的例子中,我需要编写一个USB HCI驱动程序,该驱动程序可以与需要对USB设备驱动程序隐藏的硬件通信,因此我不能更改USB设备驱动程序以搜索硬件的PCI I。在这种情况下,有没有办法强迫特定的设备驱动程序与USB驱动程序相关联?

更新:

我在讨论的基础上创建了两张图表。

图1显示了内核中当前的USB模型,我从'lspci‘输出中看到,xHCI是在我的系统中使用的唯一主机控制器驱动程序。

图2是一个建议的设计。虽然仍然允许NCM设备驱动程序作为PCI表中列出的当前设备的驱动程序,但我想为NCM设备驱动程序注册我的定制HCI。定制的HCI与定制的硬件驱动程序对话,该驱动程序从用户空间隐藏定制的硬件信息(这意味着没有PCI探针)。

我的定制HCI需要解析从USB核心传递下来的URB消息,并将它们映射到由定制硬件驱动程序提供的相应API中。

我的问题是,它看起来xHCI是默认使用的所有USB设备驱动程序,我不知道如何告诉USB核心使用我的定制HCI在所有.即使我可能能够硬编码USB核来强制所有流量从NCM CDC USB设备驱动程序到自定义的HCI,因为我无法向NCM CDC设备驱动程序提供PCI产品I/供应商I,我如何才能触发NCM CDC设备驱动程序的探测()功能呢?

代码语言:javascript
复制
Diagram #1 (Current kernel USB model):
  -----------------           ------------------           -------------------             -------------------
  |    NCM CDC    |  <---->   |    USB Core    |   <---->  |       xHCI      |    <---->   |   USB devices   |
  -----------------           ------------------           -------------------             -------------------





Diagram #2 (proposed design):
  -----------------           ------------------           -----------------------------             --------------------------------            --------------------
  |    NCM CDC    |  <---->   |    USB Core    |   <----->  |       Customized HCI      |    <---->  |   Customized Hardware driver |    <---->  |   Customized HW  |
  -----------------           ------------------      |     -----------------------------            --------------------------------            --------------------
                                                      |
                                                      |
                                                      |
                                                      |    -------------------             -------------------
                                                      |--->|       xHCI      |    <---->   |   USB devices   |
                                                           -------------------             -------------------
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 04:49:34

如果我正确理解了您的需求:您需要编写一个HCI驱动程序,它将在Linux标准USB堆栈之外工作?所以你不想在Linux核中注册你的HCI?如果是,只需编写HCI驱动程序,不要将他的API注册到usb核心。AFAIK使用的USB HCI驱动程序(和HCI HW)只取决于您连接的物理USB端口。因此,如果您有多个USB系统,那么您可以选择HCI,只需将USB设备插入给定的物理端口即可。我记得在USB2.0 (ehci +配套控制器)中,有可能将一些USB端口分配给ehci或uhci/ohci (使用某种mux),但现在使用xhci -我认为这是不可能的。主要是因为xhci不需要任何同伴控制器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52772094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档