首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Udev并不总是自动地将usbhid驱动程序绑定到我的设备上。

Udev并不总是自动地将usbhid驱动程序绑定到我的设备上。
EN

Unix & Linux用户
提问于 2020-02-19 04:52:14
回答 1查看 2.2K关注 0票数 2

我有多个系统运行Ubuntu19.10。

我有一个USB隐藏设备,每个系统都可以检测到。

我使用的udev规则文件与所有3种规则(99-MyDevice.Regulations)完全相同:

代码语言:javascript
复制
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时,它将输出以下内容:

代码语言:javascript
复制
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M  

请注意,Driver是空的,尽管有时,它实际上会加载驱动程序(这正是我想要的),并输出如下:

代码语言:javascript
复制
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M  

当驱动程序像这样加载时,软件可以检测和使用该设备。

问题是,驱动程序几乎从来没有自动加载。

到目前为止,我已经发现了两种手动加载驱动程序的方法(成败参半):

方法1:

我可以使用以下方法手动分配/绑定驱动程序:

代码语言:javascript
复制
echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind

此时,lsusb -t显示加载了驱动程序

代码语言:javascript
复制
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M

然后我必须修改/dev/mydevice的acl .为了利用它。

注意,此方法并不总是有效的.感觉充其量是随机的。

方法2:

逻辑上断开并重新连接设备到计算机。

(与物理上断开连接相反)。我是通过安装

VMWare并将设备连接到来宾系统几秒钟。

在设备重新连接到主机后,大多数情况下驱动程序是

自动绑定,软件可以看到/使用该设备。

(请注意,使用此方法,我不必修改任何acl)

一些注释:

  • 如果我在RaspberryPI上使用这个设备,我就没有这个问题了。
  • 我有多个相同类型的设备,所有这些设备都会出现问题。
  • 此问题不发生在Windows上
  • 此问题不发生在Ubuntu系统的VM内部的Windows上
  • 此问题不在MacOS上发生。
  • 据我所知,它也没有发生在较早版本的Ubuntu (不完全确定)
  • 该设备本身是基于STM32F4的。

知道我怎么能强迫usbhid驱动程序每次都被绑定吗?

更新:

结果是,如果,在物理连接设备后,我运行

下面的命令,每次都正确绑定usbhid驱动程序。

代码语言:javascript
复制
sudo rmmod usbhid && sudo modprobe usbhid

请注意,我确实必须首先使用rmmod

简单地运行modprobe并不能解决问题。

所以:

  1. 物理连接:Driver=, 12MB
  2. 运行上面的命令:Driver=usbhid, 12MB

根据这个来源,驱动程序本身选择它支持的设备。

因此,我猜该命令会导致usbhid驱动程序重新评估。

它是否能处理这个装置。

现在我仍然需要弄清楚如何使它自动化。

EN

回答 1

Unix & Linux用户

发布于 2020-02-19 08:15:51

/etc/modules-load.d/00-myusbhid.conf中创建一行文件

代码语言:javascript
复制
usbhid

不必在现代系统上这样做,因为模块是自动加载的,但有时仍然需要强制加载模块。

如果其他所有操作都失败,请尝试添加内核引导参数。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/568400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档