我有多个系统运行Ubuntu19.10。
我有一个USB隐藏设备,每个系统都可以检测到。
我使用的udev规则文件与所有3种规则(99-MyDevice.Regulations)完全相同:
SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLINK+="mydevice%n"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="timothy"在所有三个系统中,设备正确地显示为/dev/mydevice.
现在,当我执行lsusb -t时,它将输出以下内容:
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M 请注意,Driver是空的,尽管有时,它实际上会加载驱动程序(这正是我想要的),并输出如下:
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M 当驱动程序像这样加载时,软件可以检测和使用该设备。
问题是,驱动程序几乎从来没有自动加载。
到目前为止,我已经发现了两种手动加载驱动程序的方法(成败参半):
方法1:
我可以使用以下方法手动分配/绑定驱动程序:
echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind此时,lsusb -t显示加载了驱动程序
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M然后我必须修改/dev/mydevice的acl .为了利用它。
注意,此方法并不总是有效的.感觉充其量是随机的。
逻辑上断开并重新连接设备到计算机。
(与物理上断开连接相反)。我是通过安装
VMWare并将设备连接到来宾系统几秒钟。
在设备重新连接到主机后,大多数情况下驱动程序是
自动绑定,软件可以看到/使用该设备。
(请注意,使用此方法,我不必修改任何acl)
知道我怎么能强迫usbhid驱动程序每次都被绑定吗?
结果是,如果,在物理连接设备后,我运行
下面的命令,每次都正确绑定usbhid驱动程序。
sudo rmmod usbhid && sudo modprobe usbhid请注意,我确实必须首先使用rmmod,
简单地运行modprobe并不能解决问题。
所以:
Driver=, 12MBDriver=usbhid, 12MB根据这个来源,驱动程序本身选择它支持的设备。
因此,我猜该命令会导致usbhid驱动程序重新评估。
它是否能处理这个装置。
现在我仍然需要弄清楚如何使它自动化。
发布于 2020-02-19 08:15:51
在/etc/modules-load.d/00-myusbhid.conf中创建一行文件
usbhid不必在现代系统上这样做,因为模块是自动加载的,但有时仍然需要强制加载模块。
如果其他所有操作都失败,请尝试添加内核引导参数。
usbhid.quirks=0x0463:0xffff:0x08到重新启用NOGET,看看它是否有效。
https://www.cyberciti.biz/faq/linux-how-to-load-a-kernel-module-automatically-at-boot-time/ https://bugzilla.redhat.com/show_bug.cgi?id=1715504 https://github.com/networkupstools/nut/issues/515
https://unix.stackexchange.com/questions/568400
复制相似问题