LINUX.ORG.RU
ФорумAdmin

Нумерация USB устройств


0

0

Есть компьютер с Линукс с подключенными по USB двумя (для простоты, на самом деле больше) устройствами. Компьютер выполняет роль терминального сервера предоставляя в сеть VNC для доступа к устройствам по USB. Устройства в линукс видны как /dev/ttyUSB<number> При последовательном вклчении устройств каждому назначается последующий номер ttyUSB0 ttyUSB1 и т.д. Но когда начиются перезагрузки устройств или всей системы целиком, то нумерация USB сбивается. Получается в некотором роде гонка сигналов. Есть ли способы жестко закрепить номера USB за конкретными устройствами? Физически USB порты не меняются.


Поможет такое правило udev:

SUBSYSTEM=="tty", ATTRS{idVendor}=="Ваш_vendor_id", ATTRS{idProduct}=="Ваш_product_id", SYMLINK+="usbmodem"

если устройства не одинаковые, конечно. Если одннаковые - определяйте по serial number устройства.

anon_666
()
Ответ на: комментарий от anon_666

Что-то я совсем туплю... а где искать потом получившийся симлинк? Раньше я делал minicom USB0 и вконфигурации minirc.USB0 прописано устройство /dev/ttyUSB0 а в случае с симлинком что там должно быть прописано?

bobych
() автор топика
Ответ на: комментарий от bobych

Ну eth они другие, совсем другие, так уж сложилось исторически.

vga ★★
()
Ответ на: комментарий от bobych

Нет, вру, это уже реализовано. Вот подключил телефон:
$ ls /dev/serial/by-id/

usb-HUAWEI_TECHNOLOGY_Mobile_Configuration-if00-port0  usb-HUAWEI_TECHNOLOGY_Mobile_Configuration-if01-port0
те никаких правил добавлять не нужно, просто смотрим в /dev/serial/by-id/
Когда писал, не было возможности проверить.

anon_666
()
Ответ на: комментарий от anon_666

Спасибо! но осталась одна загвоздка, на серверах с ядром 2.6.34 все так и работает. а вот на серверах с ядром 2.6.27 /dev/serial/ нет. Но зато есть куча устройств вида usbdev*. Может быть на этом ядре и надо писать правила для udev?

bobych
() автор топика
Ответ на: комментарий от anon_666

Да можно и не по линку, можно правило взять из более нового удева и кинуть его в /etc/udev/rules.d, мне кажется должно работать, ничего страшногоо я в нем не вижу

 $ cat /lib/udev/rules.d/60-persistent-serial.rules 
# do not edit this file, it will be overwritten on update

ACTION!="add|change", GOTO="persistent_serial_end"
SUBSYSTEM!="tty", GOTO="persistent_serial_end"
KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="persistent_serial_end"

SUBSYSTEMS=="usb-serial", ENV{ID_PORT}="$attr{port_number}"

IMPORT="path_id %p"
ENV{ID_PATH}=="?*", ENV{ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}"
ENV{ID_PATH}=="?*", ENV{ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{ID_PORT}"

IMPORT="usb_id --export %p"
ENV{ID_SERIAL}=="", GOTO="persistent_serial_end"
SUBSYSTEMS=="usb", ENV{ID_IFACE}="$attr{bInterfaceNumber}"
ENV{ID_IFACE}=="", GOTO="persistent_serial_end"
ENV{ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_IFACE}"
ENV{ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_IFACE}-port$env{ID_PORT}"

LABEL="persistent_serial_end"

vga ★★
()
Ответ на: комментарий от vga

P.S. Потом при апгрейде на новый удев не забыть это правило удалить, а то мало ли.

vga ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.