LINUX.ORG.RU

помогите понять связи в usb

 ,


0

1

Скажем вставлены в комп через usb две одинаковые железки и создались два устройства /dev/ttyACM0 и /dev/ttyACM1. Я знаю о железках:

vendor (совпадает)

product (совпадает)

iManufacturer (совпадает)

iProduct (совпадает)

iSerial (различается)

положим анализируя выхлоп lsusb -v -d vendor:product и фильтруя по iManufacturer, iProduct, iSerial я получил Bus и Device нужного мне устройства (с уникальным серийным номером). Думаю это нифига не кошерно, может подскажите более прямой способ?

Как далее зная Bus и Device понять с каким устройством (/dev/ttyACM0 или /dev/ttyACM1) связана нужная мне железка?

★★

Посмотри, не сможешь ли ты их различить по выхлопу

udevadm info /dev/ttyACMx
или
udevadm info -a /dev/ttyACMx

ABW ★★★★★
()

Udevd создаёт симлинки в /dev/serial/by-id/.

iliyap ★★★★★
()

Вообщем делаем так: втыкаем устройство и понимаем что оно создало /dev/ttyACM0, далее через

udevadm info –query=all –name=/dev/ttyACM0 | grep ID_PATH | grep -v ID_PATH_TAG

udevadm info –query=all –name=/dev/ttyACM0 | grep ID_VENDOR_ID

udevadm info –query=all –name=/dev/ttyACM0 | grep ID_MODEL_ID

udevadm info –query=all –name=/dev/ttyACM0 | grep ID_SERIAL_SHORT

узнаем железный порт в который устройство воткнуто и его idVendor, idProduct и serial - уникальный серийный номер

далее создаем файл /etc/udev/rules.d/usb.rules в котором либо привязываем устройство к железному порту (плохой вариант):

SUBSYSTEM==«tty», ENV{ID_PATH}==«pci-0000:00:14.0-usb-0:7:1.0», SYMLINK+=«ttyUSBsuper»

либо привязываем само устройство:

SUBSYSTEM==«tty», ATTRS{idVendor}==«2184», ATTRS{idProduct}==«0011», ATTRS{serial}==«0762», SYMLINK+=«ttyUSBsuper»

перезапускаем udev

udevadm control –reload-rules

udevadm trigger

в результате при втыкании устройства создается ссылка /dev/ttyUSBsuper которая ссылается на что то типа /dev/ttyACM0 или /dev/ttyACM1

у другого устройства то-же узнаем его уникальный серийный номер и прописываем

SUBSYSTEM==«tty», ATTRS{idVendor}==«2184», ATTRS{idProduct}==«0011», ATTRS{serial}==«0763», SYMLINK+=«ttyUSBpuper»

А дальше просто работаем с заранее известными /dev/ttyUSBsuper и /dev/ttyUSBpuper вместо случайно назначенных /dev/ttyACM0 или /dev/ttyACM1

quester ★★
() автор топика
Последнее исправление: quester (всего исправлений: 5)
Ответ на: комментарий от quester

Как сделать reset нашему предопределенному устройству?

udevadm -d info -a /dev/ttyUSBsuper | grep busnum | head -n 1 | sed -e ‘s/[^0-9]//g’

2

udevadm -d info -a /dev/ttyUSBsuper | grep devnum | head -n 1 | sed -e ‘s/[^0-9]//g’

19

usbreset 2/19

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

прими к сведению

китайцы умудряются делать устройства в одинаковыми серийными номерами

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

лично у себя «да, конечно», но бывают обстоятельства без возможности выбора. я смотрел по номерам SIM-карт, слава богу ОПСОСы недопускают 2-х одинаковых. неудобно, но нужно было как-то решать… если будут не модемы, тогда не знаю. надеюсь, не придётся в этом разбираться.

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

спасибо // я искренне надеюсь, что до этого не дойдёт ;)

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