我有 3 个运行 Ubuntu 19.10 的系统。
我有一个 USB HID 设备,每个系统都可以看到它。
我在这 3 个系统上使用完全相同的 udev 规则文件:
SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLINK+="mydevice%n"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="timothy"
在所有 3 个系统上,该设备均正确显示为 /dev/mydevice...
如果我运行,lsusb -t
我将在一个系统上获得以下内容:
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
如您所见,usbhid 驱动程序在这里正确映射,
但在其他系统上我得到以下信息:
Port 2: Dev 1, If 1, Class=Human Interface Device, Driver= , 12M
在这些系统上,驱动程序不会自动映射。因此
我的软件无法看到或使用该设备。
我可以使用手动分配驱动程序
echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind
此时lsbusb -t
显示以下内容:
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
现在我的软件可以看到该设备但无法打开它。
我真的搞不懂为什么设备在一个系统上映射正确
,而在其他系统上映射不正确。我没有做任何特别的事情让它在
工作系统上工作,只是像其他两个一样进行了全新安装。
唯一的区别是工作系统是台式机,其他两个是笔记本电脑。
更新 2:我已验证该设备仅在逻辑上断开
连接并重新连接到主机后才能工作。目前,我
通过将其连接到 VMWARE 客户机然后重新连接到主机来执行此操作。有没有其他方法可以逻辑地重新连接设备(而不是物理连接)
更新 3:我还可以验证此问题在 Raspbian (RaspberryPI) 或 Ubuntu 18.04 上不存在
。在这些系统上,当您连接设备时,hidusb
驱动程序始终与其绑定。
更新 4:
规则文件位于,/etc/udev/rules.d/100.mydevice.rules
每次我连接其中一个设备时,都会
在下面创建 dev 文件/dev
,例如/dev/mydevice4
(此部分在每个系统上每次都有效,但并不意味着我可以实际使用该设备)
在 Ubuntu 20.04 上,我似乎运气好一些。
也就是说,如果它确实有效,它会一直有效,直到我重新启动
整个机器,如果它不起作用,它肯定不会起作用,直到我重新启动机器。
udevadm 信息*
root@devtop-home:/home/timothy# udevadm info /dev/mydevice10
P: /devices/pci0000:00/0000:00:14.0/usb3/3-10
N: bus/usb/003/014
L: 0
S: mydevice10
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-10
E: DEVNAME=/dev/bus/usb/003/014
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=483/5750/200
E: TYPE=0/0/0
E: BUSNUM=003
E: DEVNUM=014
E: MAJOR=189
E: MINOR=269
E: SUBSYSTEM=usb
E: USEC_INITIALIZED=1354934046
E: ID_VENDOR=Acme
E: ID_VENDOR_ENC=Acme
E: ID_VENDOR_ID=0483
E: ID_MODEL=mydevice_V2
E: ID_MODEL_ENC=mydevice\x20V2
E: ID_MODEL_ID=5750
E: ID_REVISION=0200
E: ID_SERIAL=Acme_mydevice_V2_3100079BDA31
E: ID_SERIAL_SHORT=3100079BDA31
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030000:
E: ID_VENDOR_FROM_DATABASE=STMicroelectronics
E: ID_MODEL_FROM_DATABASE=LED badge -- mini LED display -- 11x44
E: ID_PATH=pci-0000:00:14.0-usb-0:10
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_10
E: DEVLINKS=/dev/mydevice10
如您所见,这是基于 STM32F4 MCU 的,
当设备通电时,需要一些时间才能
在固件中启用 HID。