Linux:如何将 USB 驱动程序分配给设备

标签 linux linux-kernel usb kernel-module udev

<分区>

这个问题有两个方面:

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 驱动程序,然后我声明了接口(interface)。然后,我可以向在我的 USB 设备和主机 Linux 系统上运行的应用程序发送数据,以及从这些应用程序发送数据。

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

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

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"

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

谢谢,

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

最佳答案

这个问题听起来很像一个 USB 设备,其中包含一个包含 Windows 驱动程序的小型闪存盘,但实际上它是一种网络访问设备(我想到了 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 设备绑定(bind)/取消绑定(bind)到驱动程序,请参阅 this LWN article .作为 root,echo $usbid >/sys/bus/usb/drivers/usb-storage/unbind 将解除与“usb-storage”中的 $usbid 的 USB 设备绑定(bind)司机。使用相同的命令,但使用 bind 而不是 unbind,将尝试将设备绑定(bind)到驱动程序。但请注意,将充当存储设备的设备绑定(bind)到 usbnet 驱动程序是没有意义的(也不会起作用)。

关于Linux:如何将 USB 驱动程序分配给设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391644/

相关文章:

linux - 如何使用 RPM 分发内核模块?

android - 关闭 USB 附件连接的正确方法

Java 1.4.2 File.listFiles 无法与 CIFS 安装正常工作 - 解决方法?

linux - 无法将应用程序与 libavcodec 链接

compiler-errors - 在ubuntu上编译内核时出错

linux - 带有 Buildroot 的 BeagleBoard Ralink Wifi USB

c - 检测 USB HID 设备何时模拟键盘的可靠方法

c++ - OpenNI: "Open failed: Device is in safe mode. Cannot start any stream!"

linux - 如何在此脚本中将数字行添加到文件中

linux - svn——如何保存密码,但不是明文?