这个问题有两个方面:
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,所以......)
答案 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驱动程序是没有意义的(也是行不通的。)