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,所以...)

+0

** Unix&Linux上的类似问题** http://unix.stackexchange.com/questions/13964/prevent-claiming-of-novelty-usb-device-by-usbhid-so-i-can-control -it-with-libusb –

+0

@AlessandroPezzato,我读过那篇文章,这很相似,但不是我的问题的解决方案。正如我在我的问题中所说的,我有一个可以运行的应用程序,它使用libusb API分离并声明接口。但我需要知道如何从命令提示符中分离并附加LKM,或者通过应用程序空间之外的udev自动附加。 – linsek

这个问题听起来很像一个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驱动程序是没有意义的(也不行)。

+2

如果您确实想要将USB设备绑定/解除绑定到驱动程序,请参阅此[LWN文章](http://lwn.net/Articles/143397/)。 #回声$ USBID>/SYS /巴士/ USB /驱动器/ USB存储/解除绑定 将从 “USB存储” 司机unbdind与$ USBID USB设备。相同的cmdline,但使用“bind”而不是unbind,会尝试将设备绑定到驱动程序。但请注意,将存储设备作为存储设备的设备绑定到usbnet驱动程序是没有意义的(也不行)。 –