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...
I have this:
$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"
. . .
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.
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 and remember it in environment variable.This document helped me http://www.reactivated.net/writing_udev_rules.html
Perhaps, it will be useful for someone.