udev — переименовать два одинаковых ttyUSB устройства

Задача следующая: в USB подключены два одинаковых USB to COM контроллера, каждый из которых соединён с определённым инвертером для управления и сбора статистики, необходимо их однозначно идентифицировать, чтобы после перезагрузки или переподключения они получали те же самые уникальные имена, а не ttyUSB0, ttyUSB1, ttyUSB2 и т.д.

Так как за idVendor и idProduct нам не зацепиться — они одинаковые, то будем использовать номер шины и порта USB, куда подключены контроллеры, главное при переподключении их возвращать в тот же USB порт.

Идентифицируем устройства, USB порты:

Inverter 1
---
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1)
...
KERNELS=="ttyUSB1"
KERNELS=="4-1:1.0"
...

Inverter 2
---
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
...
KERNEL=="ttyUSB0"
KERNELS=="3-1:1.0"
...

Используем udev, пишем правила:

/etc/udev/rules.d/99-usb-serial.rules
...
SUBSYSTEM=="tty", KERNELS=="4-1:1.0", SYMLINK+="ttyUSBInverter1"
SUBSYSTEM=="tty", KERNELS=="3-1:1.0", SYMLINK+="ttyUSBInverter2"
...

Просим udev перечитать правила и применить их:

udevadm control --reload-rules && udevadm trigger

В итоге получаем такое удобное именование:

root@clu-mon:~# ls -al /dev/ttyU*
...
crw-rw---- 1 root dialout 188, 2 Sep 12 17:37 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 Sep 12 17:37 /dev/ttyUSB3
lrwxrwxrwx 1 root root         7 Sep 12 17:37 /dev/ttyUSBInverter1 -> ttyUSB3
lrwxrwxrwx 1 root root         7 Sep 12 17:37 /dev/ttyUSBInverter2 -> ttyUSB2
...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика