7

这个问题有两个方面:

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", ATTR{idVendor}=="xxxx", MODE="0666"

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

谢谢,

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

4

1 回答 1

8

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

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

If you really want bind/unbind USB devices to drivers, see this LWN article. As root, echo $usbid > /sys/bus/usb/drivers/usb-storage/unbind will unbind the USB device with $usbid from the "usb-storage" driver. Using the same command, but using bind instead of unbind, will try to bind the device to the driver. But be aware that it makes no sense (and will not work) to bind a device which acts like a storage device to a usbnet driver.

于 2011-12-10T18:57:08.217 回答