Як співставити пристрій ttyUSBX з послідовним пристроєм usb


23

опціональний драйвер правильно відповідає ідентифікатору USB та завантажує драйвер для цього пристрою. Наприклад

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

Він також створює пристрої ttyUSBX для керування обладнанням

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

Однак у мене є більше одного USB-послідовного пристрою, і я хочу знати, який ttyUSB є для якого USBID. Вих. / dev / ttyUSB1 -> 19d2: 0031

Чи знаєте ви якийсь момент, де я можу отримати цю інформацію?


Якщо ви знаєте деталі, як постачальник / товар, то ця відповідь чудова
earcam

Відповіді:


14

Погляньте на файлову систему sysfs. Приклад мого USB-серіалу:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

Як бачите, ttyUSB0карти 067b:2303на моєму комп’ютері. Інші місця, які варто вивчити /sys/class/tty/. Зверніть увагу на символьні посилання.


Ви щось зробили, щоб він перерахував також ТОВАР?
Ігор Стоппа

@IgorStoppa, спробуйте catв ueventфайл з результату find /sys -name ttyACM0, наприклад. Замініть ім'я вузла свого серійного пристрою.
sherrellbc

10

Ви можете спробувати перевірити, чи зареєстровані ваші пристрої під / dev / serial / by-id /

ls -l / dev / serial / by-id

Ці імена повинні відповідати і вказуватимуть (символьне посилання) на правильний ttyUSBx


Чи можете ви додати деякі пояснення, приклади тощо. Однолінійна відповідь не вважається хорошою в SE
Romeo Ninov

@RomeoNinov Добре, я додав уточнення, як ви просили. Це не зовсім складніше, ніж просто заглянути в інший каталог, тому я не можу зрозуміти, як зробити відповідь більш детальною, ніж вона, щось покращить. Вибач за це.
Waxhead

У мене є два однакових адаптери (два Arduinos), підключені до Raspberry Pi. ls -l /dev/serial/by-idповертає лише один адаптер ../../ttyUSB1, при цьому ls -l /sys/bus/usb-serial/devicesпоказує мені обоє. Тому я не думаю, що це хороша відповідь.
Даніель Ф

6

У мене була схожа проблема .

Напишіть це на /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

до кінця. Перезавантажте.

Тепер ви можете /dev/ONDAперейти до свого пристрою ONDA.

Якщо ви хочете, щоб користувачі, що не мають root, змогли ними користуватися, тоді додайте

, MODE="0666"

до кінця кожного рядка.


Я зробив це і перевірив файли, на які вони посилаються. у мене продукт має декілька інтерфейсів, як твердий диск, USB серійний. Хоча я очікував на зв'язок / dev / ttyACM0, але це було до / dev / sda. будь-яким способом визначити у файлі правил, для якого типу пристрою має застосовуватися правило? Я написав правила в
/etc/udev/rules.d/99-ftdi.rules

ОК знайдено це: до параметрів правила додано SUBSYSTEM == "tty". це значення можна знайти у результатах udevadm info --name=/dev/ttyACM0
nurp

3

Я б використовував udev і писав деякі правила, які створюють посилання на пристрої.

Щоб отримати достатньо інформації для розрізнення пристроїв, спробуйте щось подібне для всіх пристроїв:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk

1

Наступні команди дадуть мені список назв пристроїв ttyUSB, пов’язаних з 19d2: 0016 (що є ідентифікатором "модемного режиму" палички ZTE MF831 LTE, ваш може відрізнятися.):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

Це дозволить переглядати список файлів з ім'ям файлу ttyUSB *, включаючи символьні посилання, в / sys / bus / usb / пристроях. В результаті результатів ми будемо шукати файл з назвою modalias і шукати рядок, що містить ідентифікатор постачальника "v" "19d2" та ідентифікатор продукту "p" 0016. Якщо результат збігається, ми будемо повторювати рядок з префіксом "/ dev / "перед USB? назва. Afaik перший або зазвичай останній (найбільша кількість) - порт модему для пристроїв ZTE. Ви можете відповідати результатам у файл у / tmp / та head -n1 або tail -n1 рядках відповідно. Якщо у вас є хаби, можливо, вам знадобиться збільшити maxdepth.

Це не найвишуканіший спосіб, але він працюватиме практично на будь-якому варіанті Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.