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

时间:2011-12-05 20:47:56

标签: linux linux-kernel usb kernel-module udev

这个问题有两个方面:

1-如何从USB设备手动分离驱动程序并附加另一个驱动程序?例如,我有一个设备,当连接自动使用USB存储驱动程序。

// 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存储驱动程序然后我声明了接口。然后,我可以在USB设备和主机Linux系统上运行的应用程序之间发送数据。

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

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

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

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

谢谢,

(我对StackExchange如何使用它的不同网站或者它们都是一样的有点困惑。这是一个Linux问题所以它也发布在Unix和Linux上。请原谅我,如果它不应该也不会在这里发布,但StackOverflow也处理Linux,所以......)

1 个答案:

答案 0 :(得分: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的包装器和必要的规则文件。

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