Linux的:如何USB驱动程序分配到设备
这个问题有两方面:Linux的:如何USB驱动程序分配到设备
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存储驱动程序,所以我必须在我使用libusb库,以拔除USB存储驱动程序在主机上运行的应用程序然后我声称接口。然后,我可以将数据发送到我的USB设备和我的主机Linux系统上运行的应用程序。
如何在应用程序外手动分离驱动程序?
2-如何自动分配驱动程序以附加在设备插件上。我目前有一个udev规则设置来自动设置设备权限。
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
我可以使用udev规则将驱动程序分配给USB设备上的特定接口吗?例如,如果我想在接口0上自动使用usbnet模块而不是usb-storage,那么udev中可以使用这种模块吗?
感谢,
(我有点困惑StackExchange如何与它不同的网站,或者如果他们都是一样的。这是一个Linux的问题,所以它也被张贴在Unix & Linux操作系统。原谅如果它不应该在这里发布,但StackOverflow也处理Linux,所以...)
这个问题听起来很像一个USB设备,包含一个包含Windows驱动程序的小型闪存盘,但实际上它是一种网络接入设备(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”驱动程序解除USB设备与$usbid
的绑定。使用相同的命令,但使用bind
而不是unbind
将尝试将设备绑定到驱动程序。但请注意,将存储设备作为存储设备的设备绑定到usbnet驱动程序是没有意义的(也不行)。
如果您确实想要将USB设备绑定/解除绑定到驱动程序,请参阅此[LWN文章](http://lwn.net/Articles/143397/)。 #回声$ USBID>/SYS /巴士/ USB /驱动器/ USB存储/解除绑定 将从 “USB存储” 司机unbdind与$ USBID USB设备。相同的cmdline,但使用“bind”而不是unbind,会尝试将设备绑定到驱动程序。但请注意,将存储设备作为存储设备的设备绑定到usbnet驱动程序是没有意义的(也不行)。 –
** Unix&Linux上的类似问题** http://unix.stackexchange.com/questions/13964/prevent-claiming-of-novelty-usb-device-by-usbhid-so-i-can-control -it-with-libusb –
@AlessandroPezzato,我读过那篇文章,这很相似,但不是我的问题的解决方案。正如我在我的问题中所说的,我有一个可以运行的应用程序,它使用libusb API分离并声明接口。但我需要知道如何从命令提示符中分离并附加LKM,或者通过应用程序空间之外的udev自动附加。 – linsek