如何解决udev - 在一个符号链接下收集 USB 类
我有一个 4 端口 USB 集线器,它连接了多个具有相同/相似(一个或多个类可能/可能不可用)功能的 USB 设备,我想在一个符号链接目录下收集设备类,并带有端口/路径标识
它应该看起来像:
/dev/usb_port0
└── tty*
└── hidraw*
└── sd*
└── ...
/dev/usb_port1
└── tty*
└── hidraw*
└── sd*
└── ...
/dev/usb_port-n
└── tty*
└── hidraw*
└── sd*
└── ...
设备-A 连接到端口 2 - hidraw 类:
$ udevadm info --attribute-walk /dev/hidraw0
looking at device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2:1.3/0003:0D28:0204.0016/hidraw/hidraw0':
KERNEL=="hidraw0"
SUBSYstem=="hidraw"
DRIVER==""
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2:1.3/0003:0D28:0204.0016':
KERNELS=="0003:0D28:0204.0016"
SUBSYstemS=="hid"
DRIVERS=="hid-generic"
ATTRS{country}=="00"
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2:1.3':
KERNELS=="1-1.4.2:1.3"
SUBSYstemS=="usb"
DRIVERS=="usbhid"
...
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2':
KERNELS=="1-1.4.2"
SUBSYstemS=="usb"
DRIVERS=="usb"
...
ATTRS{product}=="DAPLink CMSIS-DAP"
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4':
KERNELS=="1-1.4"
SUBSYstemS=="usb"
DRIVERS=="usb"
...
ATTRS{product}=="USB2.0 Hub "
ATTRS{manufacturer}=="VIA Labs,Inc. "
设备-A 连接到端口 2 - tty 类:
udevadm info --attribute-walk /dev/ttyACM0
looking at device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2:1.1/tty/ttyACM0':
KERNEL=="ttyACM0"
SUBSYstem=="tty"
DRIVER==""
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2:1.1':
KERNELS=="1-1.4.2:1.1"
SUBSYstemS=="usb"
DRIVERS=="cdc_acm"
...
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2':
KERNELS=="1-1.4.2"
SUBSYstemS=="usb"
DRIVERS=="usb"
...
ATTRS{product}=="DAPLink CMSIS-DAP"
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4':
KERNELS=="1-1.4"
SUBSYstemS=="usb"
DRIVERS=="usb"
...
ATTRS{manufacturer}=="VIA Labs,Inc. "
ATTRS{product}=="USB2.0 Hub
"
我的 udev 规则:/etc/udev/rules.d/90-port-2.rules
ACTION!="add|change",GOTO="debug_rules"
DEVPATH!="*1-1.4.2",GOTO="debug_rules"
ACTION=="add",GROUP="usb",MODE="0666",SYMLINK+="usbdev/%k-%n"
LABEL="debug_rules"
$ journalctl -f | grep usbdev 说:
systemd-udevd[5608]: 1-1.4.2: /etc/udev/rules.d/90-port-2.rules:4 LINK 'usbdev/1-1.4.2-2'
systemd-udevd[5608]: 1-1.4.2: Creating symlink '/dev/usbdev/1-1.4.2-2' to '../bus/usb/001/029'
systemd-udevd[5612]: 1-1.4.2: Updating old name,'/dev/usbdev/1-1.4.2-2' no longer belonging to '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.2'
systemd-udevd[5612]: 1-1.4.2: No reference left,removing '/dev/usbdev/1-1.4.2-2'
请问,你知道如何实现这个方法吗?
解决方法
在对 udev 联机帮助页和调试注销进行了一些挖掘后,我找到了答案。
我之前的规则未命中绑定动作
ACTION!="add|bind",GOTO="debug_rules"
进入
KERNELS=="1-1.4.2:*",SUBSYSTEM=="hidraw|tty|scsi_generic",OWNER="ubuntu",GROUP="usb",SYMLINK+="usbport/2/%k",MODE="0666",OPTIONS+="last_rule",GOTO="debug_rules"
整个规则也应该看起来:
/dev/usbport/
└── 2
├── hidraw0 -> ../../hidraw0
├── sg0 -> ../../sg0
└── ttyACM0 -> ../../ttyACM0
和符号链接是(树视图)
{
"id": 1,"name": "Sample name","attributes": {
"age": 10
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。