如何解决如何找出未应用 udev 规则的原因?
我添加了一个 udev 规则来生成一个单独的链接到一个特殊的 tty 设备。我从 lsusb 获取了供应商和产品 ID:
Bus 001 Device 016: ID abcd:1234 Foo Device
设备的 dmesg
输出为:
[ 369.384850] usb 1-1.1: new full-speed USB device number 4 using xhci_hcd
[ 369.470492] usb 1-1.1: New USB device found,idvendor=09d8,idProduct=0420
[ 369.470506] usb 1-1.1: New USB device strings: Mfr=1,Product=2,SerialNumber=0
[ 369.470515] usb 1-1.1: Product: TWN4/B1.06/ccl3.12/PRS1.04
[ 369.470522] usb 1-1.1: Manufacturer: OEM
[ 369.475188] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
通常 Debian 系统会为此设备生成 ACM* tty:
$ ls /dev/ttyACM*
/dev/ttyACM0
所以我创建了/ect/udev/rules.d/99-bizrfid.rules
:
ACTION=="add",ATTRS{idvendor}=="09d8",ATTRS{idProduct}=="0420",SYMLINK+="ttyMyDevice"
但是 ls /dev/tty*
不显示 ttyMyDevice
。
到目前为止我尝试过但没有成功:
- 正在运行
udevadm trigger
。这应该应用新的 udev 规则。 - 我重新启动了。
- 我看过
udevadm test /dev/ttyACM0
。我的 udevrule 显示在最后。所以我确信它没有被覆盖。但我想知道“无法打开”的提示。尽管如此,此提示也适用于其他 tty,例如 tty0 或 ttyS0。
...
Reading rules file: /lib/udev/rules.d/98-systemd.rules
Reading rules file: /etc/udev/rules.d/99-bizrfid.rules
rules contain 49152 bytes tokens (4096 * 12 bytes),12883 bytes strings
4240 strings (40079 bytes),3515 de-duplicated (27922 bytes),726 trie nodes used
unable to open device '/sys/dev/ttyACM0'
Unload module index
Unloaded link configuration context.
- 我重新连接了 USB 设备。
- 我尝试了另一个 udev 规则。这个规则是 100% 正确的,因为我已经在其他设备上使用了这个规则。但它不适用于 ttyACM0:
ACTION=="add",KERNEL=="ttyACM*",MODE="0666"
我想知道为什么这不起作用。 如何找出未应用 udev 规则的原因?
解决方法
对于 Task.Run
规则
udev
我会添加 /ect/udev/rules.d/99-bizrfid.rules
:
SUBSYSTEM
您也可以添加 ACTION=="add",SUBSYSTEM=="tty",ATTRS{idVendor}=="09d8",ATTRS{idProduct}=="0420",SYMLINK+="ttyMyDevice"
,但 ATTRS{manufacturer}==
和 idVendor
就足够了。
否则它看起来是正确的,并且测试运行会创建符号链接:
idProduct
根据评论,我可以尝试以下方法来调试问题:
检查驱动程序
使用 dmesg
检查您使用的驱动程序并确保它是通用驱动程序。如果它是自定义编译的,则问题可能出在您的自定义实现中。如果它是通用的,请继续执行第二步。我在最后一行找到了驱动程序名称:cdc_acm
[ 369.384850] usb 1-1.1: new full-speed USB device number 4 using xhci_hcd
[ 369.470492] usb 1-1.1: New USB device found,idVendor=09d8,idProduct=0420
[ 369.470506] usb 1-1.1: New USB device strings: Mfr=1,Product=2,SerialNumber=0
[ 369.470515] usb 1-1.1: Product: TWN4/B1.06/CCL3.12/PRS1.04
[ 369.470522] usb 1-1.1: Manufacturer: OEM
[ 369.475188] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
检查用户权限
确保您的 udev 规则的权限正确:
chmod 644 99-myrule.rules
chown root:root 99-myrule.rules
对附加操作进行测试运行
检查 udevadm test -a add $(udevadm info -q path -n /dev/ttyACM0)
的输出。我的输出如下所示:
调用:测试
version 232
This program is for debugging only,it does not run any program
specified by a RUN key. It may show incorrect results,because
some values may be different,or not available at a simulation run.
=== trie on-disk ===
tool version: 232
file size: 8447696 bytes
header size 80 bytes
strings 1849040 bytes
nodes 6598576 bytes
Load module index
Found container virtualization none
timestamp of '/etc/systemd/network' changed
timestamp of '/usr/lib/systemd/network' changed
timestamp of '/lib/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
timestamp of '/etc/udev/rules.d' changed
Skipping overridden file: /lib/udev/rules.d/99-bizrfid.rules.
Reading rules file: /lib/udev/rules.d/50-firmware.rules
...
Reading rules file: /lib/udev/rules.d/98-systemd.rules
Reading rules file: /etc/udev/rules.d/99-bizrfid.rules
rules contain 49152 bytes tokens (4096 * 12 bytes),12900 bytes strings
4244 strings (40114 bytes),3517 de-duplicated (27942 bytes),728 trie nodes used
GROUP 20 /lib/udev/rules.d/50-udev-default.rules:26
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:7
IMPORT builtin 'usb_id' /lib/udev/rules.d/60-serial.rules:8
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0: if_class 2 protocol 0
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:8
IMPORT builtin 'path_id' /lib/udev/rules.d/60-serial.rules:15
LINK 'serial/by-path/pci-0000:00:14.0-usb-0:1.1:1.0' /lib/udev/rules.d/60-serial.rules:16
IMPORT builtin skip 'usb_id' /lib/udev/rules.d/60-serial.rules:19
LINK 'serial/by-id/usb-OEM_TWN4_B1.06_CCF3.00_PRS1.04-if00' /lib/udev/rules.d/60-serial.rules:23
LINK 'ttyMyDevice' /etc/udev/rules.d/99-bizrfid.rules:1
handling device node '/dev/ttyACM0',devnum=c166:0,mode=0660,uid=0,gid=20
preserve permissions /dev/ttyACM0,020660,gid=20
preserve already existing symlink '/dev/char/166:0' to '../ttyACM0'
found 'c166:0' claiming '/run/udev/links/\x2fserial\x2fby-id\x2fusb-OEM_TWN4_B1.06_CCF3.00_PRS1.04-if00'
creating link '/dev/serial/by-id/usb-OEM_TWN4_B1.06_CCF3.00_PRS1.04-if00' to '/dev/ttyACM0'
preserve already existing symlink '/dev/serial/by-id/usb-OEM_TWN4_B1.06_CCF3.00_PRS1.04-if00' to '../../ttyACM0'
found 'c166:0' claiming '/run/udev/links/\x2fserial\x2fby-path\x2fpci-0000:00:14.0-usb-0:1.1:1.0'
creating link '/dev/serial/by-path/pci-0000:00:14.0-usb-0:1.1:1.0' to '/dev/ttyACM0'
preserve already existing symlink '/dev/serial/by-path/pci-0000:00:14.0-usb-0:1.1:1.0' to '../../ttyACM0'
creating link '/dev/ttyMyDevice' to '/dev/ttyACM0'
creating symlink '/dev/ttyMyDevice' to 'ttyACM0'
created db file '/run/udev/data/c166:0' for '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0/tty/ttyACM0'
ACTION=add
DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:1.1:1.0 /dev/serial/by-id/usb-OEM_TWN4_B1.06_CCF3.00_PRS1.04-if00 /dev/ttyMyDevice
DEVNAME=/dev/ttyACM0
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0/tty/ttyACM0
ID_BUS=usb
ID_MODEL=TWN4_B1.06_CCF3.00_PRS1.04
ID_MODEL_ENC=TWN4\x2fB1.06\x2fCCF3.00\x2fPRS1.04
ID_MODEL_FROM_DATABASE=Atom Processor Z36xxx/Z37xxx,Celeron N2000 Series USB xHCI
ID_MODEL_ID=0420
ID_PATH=pci-0000:00:14.0-usb-0:1.1:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_1_0
ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
ID_PCI_INTERFACE_FROM_DATABASE=XHCI
ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
ID_REVISION=0200
ID_SERIAL=OEM_TWN4_B1.06_CCF3.00_PRS1.04
ID_TYPE=generic
ID_USB_CLASS_FROM_DATABASE=Communications
ID_USB_DRIVER=cdc_acm
ID_USB_INTERFACES=:020201:0a0000:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=OEM
ID_VENDOR_ENC=OEM
ID_VENDOR_FROM_DATABASE=Intel Corporation
ID_VENDOR_ID=09d8
MAJOR=166
MINOR=0
SUBSYSTEM=tty
TAGS=:systemd:
USEC_INITIALIZED=71480300178
Unload module index
Unloaded link configuration context.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。