udev规则与几个父设备属性 [英] udev rule with few parent device attributes
问题描述
我需要复杂和通用的 udev
规则来确定USB设备插入任何USB集线器的某个端口。所以,我必须结合设备树的不同层的父属性...
I need complex and universal udev
rule to determine USB-device plugged in certain port of the any USB hub. so, i have to combine parent attributes of different layers of the device tree...
我有这个:
$udevadm info --query=all --name=/dev/ttyUSB0 --attribute-walk
looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
. . .
looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4':
KERNELS=="1-1.2.4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2':
KERNELS=="1-1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{devpath}=="1.2"
ATTRS{idVendor}=="0835"
...
ATTRS{idProduct}=="8500"
ATTRS{bDeviceClass}=="09"
ATTRS{product}=="USB2.0 Hub"
. . .
然后,我构建了udev规则,以识别某些USB集线器的某些端口:
Then i constructed udev rule something like this to identify certain port of certain USB hub:
KERNEL=="ttyUSB[0-9]*", KERNELS=="1-1.2.4", ATTRS{idVendor}=="0835", ATTRS{idProduct}=="8500", SYMLINK+="port1"
但它是当我尝试使用不同父层的属性时不工作。
But it's not working when i try to use attributes from different parent layers.
我知道udev仅支持来自一个特定父设备的附加属性。但是我真的需要得到结合我设备的两个父节点的属性的规则。
I know that udev supports additional attributes only from one particular parent device. But I really need to get the rule that combines attributes from 2 parent nodes of my device
有人可以提出解决方案吗?有没有办法得到它?
Could anybody suggest the solution? Is there any trick to get it?
推荐答案
经过许多不成功的经历,我找到了解决方案!
After many of unsuccessful experiences, i found the solution!
它的主要功能是设置环境变量:
The key feature of it is setting the environment variable:
- 在插件事件中,我们查找
vendor:id
pair并记住它在环境变量中。 - 在同一个事件中,我们比较保存的变量和usb-device树节点ID以分配特定usb-hub的端口的确切名称。
- On plugging event, we looking the
vendor:id
pair and remember it in environment variable. - On the same event, we compare the saved variable and usb-device tree nodes IDs to assign exact names of ports of certain usb-hub.
此文档帮助我 http://www.reactivated.net/writing_udev_rules.html
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="0610", ENV{USB_HUB_TYPE}="05e3:0610"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0835", ATTRS{idProduct}=="8500", ENV{USB_HUB_TYPE}="0835:8500"
#
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].4:1.0", SYMLINK+="port1"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].3:1.0", SYMLINK+="port2"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].2:1.0", SYMLINK+="port3"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].5.5:1.0", SYMLINK+="port4"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].5.2:1.0", SYMLINK+="port5"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].5.3:1.0", SYMLINK+="port6"
ENV{USB_HUB_TYPE}=="0835:8500", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].5.4:1.0", SYMLINK+="port7"
#
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].1.1:1.0" SYMLINK+="port1"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].2:1.0", SYMLINK+="port2"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].1.2:1.0", SYMLINK+="port3"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].3:1.0", SYMLINK+="port4"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].1.3:1.0", SYMLINK+="port5"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].4:1.0", SYMLINK+="port6"
ENV{USB_HUB_TYPE}=="05e3:0610", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.[2-3].1.4:1.0", SYMLINK+="port7"
这对某人来说是有用的。
Perhaps, it will be useful for someone.
这篇关于udev规则与几个父设备属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!