这个问题有两个方面:
首先,如何手动从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-storage驱动程序,然后声明接口。然后,我可以与USB设备和主机Linux系统上运行的应用程序之间来回发送数据。
如何在应用程序外部手动分离驱动程序?
其次,如何自动分配驱动程序以附加在设备插件上?我目前有一个udev规则设置来自动设置设备权限:
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
我可以使用udev规则将驱动程序分配给USB设备上的特定接口吗?例如,如果我希望在接口0而不是usb-storage上自动使用usbnet模块,是否可以在udev中使用?
usbnet
不会自动加载,因为它没有有关可以使用它的硬件的信息。尝试找到合适的驱动程序并使用,例如 modinfo kalmia
。在各alias
行中,您将看到供应商ID xxxx和产品ID yyyy usb:vxxxxpyyyy
。或者,您可以编辑文件/lib/modules/kernel_version/modules.usbmap,并为您的硬件删除行,这对于您的硬件模块usb-storage或使用适当的网络驱动程序更改usbstorage。但是depmod -a
这种变化将消失……