[sisyphus] настройка usb-устройств в udev

Vladislav Zavjalov slazav на altlinux.org
Сб Фев 10 15:12:32 MSK 2018


Добрый день!

Задача такая: есть десяток простых и дешевых примерно одинаковых
USB-устройств, которые хочется использовать одновременно. Проблема в том,
что, с точки зрения USB, устройства не имеют уникальных ID. При этом,
разумеется, хочется быть уверенным, что если я пишу на /dev/my_dev7, то
это будет именно устройство 7, а не какое-то другое.

Что я делаю. Сперва собираю информацию об устройствах (у них всех
usb vendor:product равен 0416:5011):
---------
lsusb |
sed -n -r -e '/0416:5011/{s/Bus ([0-9]+) Device ([0-9]+).*/\1 \2/p}' |
while read bus dev; do
  udevadm info -a /dev/bus/usb/$bus/$dev  > dev$dev
done
---------

Действительно, различий немного:
---------
$ diff dev084 dev085
8,9c8,9
<   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3':
<     KERNEL=="1-2.3"
---
>   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.4':
>     KERNEL=="1-2.4"
26,27c26,27
<     ATTR{devnum}=="84"
<     ATTR{devpath}=="2.3"
---
>     ATTR{devnum}=="85"
>     ATTR{devpath}=="2.4"
---------

Моя гипотеза состоит в том, что можно различить их по devpath. Они подключены
у меня к нескольким простым 4-портовым USB-хабам, и, действительно, devpath
соответствует порядку их портов: 1.1, 1.2, 1.3, 1.4, 2.1 и т.д.

Поэтому я пишу такие правила для udev (в /etc/udev/rules.d/)

---------
ACTION=="add",\
  ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011",\
  ATTRS{devpath}=="1.1", GROUP="users", SYMLINK+="my_dev7"

и т.д.
---------

Естественно, придется все промаркировать и заботиться о том,
чтобы все всегда было воткнуто в нужном порядке.

Я довольно смутно представляю себе концепцию usb и udev, поэтому
хочется попросить о критике этого рецепта. Насколько на devpath
можно полагаться, какие могут быть проблемы и т.п.
Ну и, если все нормально, то, может быть, оно кому-то еще пригодится.




Подробная информация о списке рассылки Sisyphus