Как получить отношения Шины и Устройства для/dev/ttyUSB

Я должен записать сценарий для перезапуска аппаратные ключи USB. У меня есть все инструменты, но я не могу связать свой/dev/ttyUSBx с физической шиной и УСТРОЙСТВОМ. Проблема - то, что у меня есть три аппаратных ключа с тем же идентификационным поставщиком и идентификационным продуктом.

Если я делаю lsusb, вывод:

Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

И я присоединил его к:

/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5

Но я хочу знать, какое устройство связано с который Устройство Шины. Примером я должен получить следующее:

/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007

Я использую Сервер Ubuntu 10.04, и я протестировал инструменты:

lsusb
hal
lsmod

Но я не могу получить отношения.

14
задан 6 September 2012 в 02:21

3 ответа

Так как у меня нет Ваших аппаратных средств, я не могу дать Вам точный ответ.

я предложил бы, чтобы Вы перешли к рассматриваемому устройству, например:

ls -l /dev/ttyUSB0

и получают главные и незначительные числа узла. Скажем, им 116 лет, 7

Затем переходят в:

ls -l /sys/dev/char/116:7

(char, потому что tty является устройством посимвольного ввода-вывода при трассировке вниз дискового устройства, Вы указали бы block вместо char)

В выводе от команды, как которая Вы будете видеть что-то немного:

lrwxrwxrwx 1 root root 0 Sep 6 00:17 116:7 -> ../../devices//sys/devices/pci0000:00/0000:00:13.5/pci0000:00/0000:00:13.5/usb1/1-3/1-3:1.1/sound/card1/pcmC1D0c

каталог /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/ и его подкаталоги имеют много информации об устройстве. Как пример, /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/busnum и /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/devnum. В моей системе они соответствуют номеру шины и номеру устройства, упомянутому в записях замены в горячем режиме устройства в/var/log/syslog.

Что-то еще, что работает над моей системой для/dev/video0:

find /sys/dev -lname '*video0' -exec cat {}/device/busnum {}/device/devnum \; 2>/dev/null
11
ответ дан 21 October 2019 в 10:55

Действительно нет хорошего способа отобразить устройства посимвольного ввода-вывода как /dev/ttyUSB0 к соответствующему USB-устройству и номерам шины. НО, это возможно!

Что-то вроде этого могло бы работать:

udevadm info --name=/dev/ttyUSB0 --attribute-walk

Оттуда, Вы получите набор информации об устройстве и его родительских устройствах. Теперь, это - просто все о парсинге тех данных для получения то, что Вы хотите. Я использовал это в прошлом:

echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/"

Теперь, если это не полный рот, я не знаю то, что! Давайте сломаем его:

udevadm info --name=/dev/ttyUSB0 --attribute-walk - информация о возвратах об устройстве и его родительских устройствах

sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' - синтаксические анализы эти данные и возвраты любые строки, содержащие атрибут "devnum" или "busnum". Мы предположим, что "busnum" перечислен сначала..., и в этом случае... мы можем просто захватить первые две строки вывода.

head -n 2 - Захватите первые 2 строки вывода. Мы могли стать более необычными здесь, но мы просто делаем предположение, что "busnum" и "devnum" самого близкого родителя будут перечисленными сначала.

awk '{$1 = sprintf("%03d", $1); print}' - Берет те цифры и заполняет их нулями.

echo /dev/bus/usb... - весь этот джаз обернут в echo оператор для замены новых строк пробелами. Можно добавить -n кому: echo если Вы хотите отключить запаздывающую новую строку.

tr " " "/" - замените пробелы в выводе с наклонными чертами вправо

Это произведет что-то как:

/dev/bus/usb/001/011

... который, конечно, является устройством. Если Вы хотели бы, можно легко произвести что-то как busnum:001 devnum:011 с несколькими тонкими настройками:

echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\1\ \4/p' | head -n 2 | awk '{$1 = sprintf("%s:%03d", $1, $2); print $1;}'`
10
ответ дан 21 October 2019 в 10:55

Вы можете найти всю информацию об использовании узла ниже команды:

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/
1
ответ дан 21 October 2019 в 10:55

Другие вопросы по тегам:

Похожие вопросы: