Linux:如何将 USB 驱动程序分配给设备 [关闭]

Posted

技术标签:

【中文标题】Linux:如何将 USB 驱动程序分配给设备 [关闭]【英文标题】:Linux: How to assign USB driver to device [closed] 【发布时间】:2012-01-13 13:36:32 【问题描述】:

这个问题有两个方面:

1- 如何手动从 USB 设备中分离驱动程序并连接不同的驱动程序?例如,我有一个设备在连接时会自动使用 usb-storage 驱动程序。

//usbview 输出

Vendor Id: xxxx
Product Id: xxxx
...
    Number of Interfaces: 2
    Interface Number: 0
        Name: usb-storage
        Number of Endpoints: 2
        ...
    Interface Number: 1
        Name: (none)
        Number of Endpoints: 2
        ...

我不想使用 usb-storage 驱动程序,所以我在主机上运行了一个应用程序,我在其中使用 libusb 库来分离 usb-storage 驱动程序,然后我声明了接口。然后,我可以在我的 USB 设备和主机 Linux 系统上运行的应用程序之间发送数据。

如何在应用程序之外手动分离驱动程序?

2- 如何自动分配驱动程序以附加到设备插件上。我目前有一个 udev 规则设置来自动设置设备权限。

SUBSYSTEM=="usb", ATTRidVendor=="xxxx", MODE="0666"

我可以使用 udev 规则将驱动程序分配给 USB 设备上的特定接口吗?例如,如果我希望在接口 0 上自动使用 usbnet 模块而不是 usb-storage,那么在 udev 中可以吗?

谢谢,

(我对 StackExchange 如何与它的不同站点一起工作或者它们是否都相同感到有点困惑。这是一个 Linux 问题,所以它也发布在 Unix 和 Linux 上。如果它不应该的话,请原谅我也不会在这里发布,但 *** 也处理 Linux,所以...)

【问题讨论】:

关于 Unix 和 Linux 的类似问题 unix.stackexchange.com/questions/13964/… @AlessandroPezzato,我读过那篇文章,这很相似,但不是我的问题的解决方案。正如我在问题中所说,我有一个可以运行的应用程序,它使用 libusb API 分离并声明接口。但我需要知道如何从命令提示符或通过应用程序空间之外的 udev 自动分离和附加 LKM。 【参考方案1】:

这个问题听起来很像一个包含 Windows 驱动程序的小闪存盘的 USB 设备,但实际上它是一种网络访问设备(我想到了 UMTS 调制解调器)。如果是这种情况,请尝试使用USB_ModeSwitch,其中包含 USB 设备数据库以及将设备从“存储模式”移动到“网络访问模式”时必须使用的命令和数据。如果设备未在数据库中配置,Usb Sniffer for Windows 可以在 Windows 上用于跟踪 USB 流量并提取必要的命令/数据组合。

usb_modeswitch 的自动化,以便在您插入设备时执行它的魔法可以使用 udev 规则完成。如果您使用的是基于 Fedora 或 Ubuntu 的发行版,则会在您安装提供 usb_modeswitch 的软件包时为您处理(抱歉,我没有关于 SUSE 的信息,但我认为它是相似的)。在 Fedora 中,它是软件包 use_modeswitch_data,它提供了一个usb_modeswitch cmd 和必要规则文件的包装器。

如果您确实想要将 USB 设备绑定/取消绑定到驱动程序,请参阅this LWN article。以 root 身份,echo $usbid > /sys/bus/usb/drivers/usb-storage/unbind 将与“usb-storage”驱动程序中的$usbid 解除绑定。使用相同的命令,但使用bind 而不是unbind,将尝试将设备绑定到驱动程序。但请注意,将充当存储设备的设备绑定到 usbnet 驱动程序是没有意义的(并且不会起作用)。

【讨论】:

如果您真的想将 USB 设备绑定/取消绑定到驱动程序,请参阅LWN article。 # echo $usbid > /sys/bus/usb/drivers/usb-storage/unbind 将使用“usb-storage”驱动程序中的 $usbid 取消绑定 USB 设备。相同的命令行,但使用“绑定”而不是取消绑定,将尝试将设备绑定到驱动程序。但请注意,将充当存储设备的设备绑定到 usbnet 驱动程序是没有意义的(并且不会起作用)。

以上是关于Linux:如何将 USB 驱动程序分配给设备 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

usb 枚举流程

如何解决Linux下USB设备节点名不固定问题

linux 如何写发送一个数据到usb的应用

如何写一个Android USB接口驱动

linux如何发现和加载对应的USB设备驱动

USB设备驱动程序1