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

lin*_*sek 7 linux usb udev kernel-module linux-kernel

这个问题有两个问题:

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
        ...
Run Code Online (Sandbox Code Playgroud)

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

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

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

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

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

bof*_*.at 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设备绑定/取消绑定到驱动程序,请参阅此LWN文章.作为root用户,echo $usbid > /sys/bus/usb/drivers/usb-storage/unbind将从$usbid"usb-storage"驱动程序解除USB设备的绑定.使用相同的命令,但使用bind而不是unbind,将尝试将设备绑定到驱动程序.但请注意,将充当存储设备的设备绑定到usbnet驱动程序是没有意义的(也是行不通的).

  • 如果您真的想要将USB设备绑定/取消绑定到驱动程序,请参阅[LWN文章](http://lwn.net/Articles/143397/).#echo $ usbid>/sys/bus/usb/drivers/usb-storage/unbind将使用"usb-storage"驱动程序中的$ usbid解压usb设备.相同的cmdline,但使用"bind"而不是unbind,将尝试将设备绑定到驱动程序.但请注意,将充当存储设备的设备绑定到usbnet驱动程序是没有意义的(也是行不通的). (2认同)