Как получить связь между шиной и устройством для / dev / ttyUSB

Ubuntu обычно основан на «нестабильной» версии (кодовое имя «sid») Debian. Они берут Debian «нестабильно» каждые 6 месяцев и стабилизируют его. Пакеты Ubuntu и Debian двоичные несовместимы.

1
задан 6 September 2012 в 03:21

2 ответа

На самом деле нет хорошего способа сопоставления символьных устройств, таких как /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 " " "/"

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

НО, возможно! - возвращает информацию об устройстве и его родительских устройствах

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

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

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

awk '{$1 = sprintf("%03d", $1); print}' - весь этот джаз завернут в оператор 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;}'`
7
ответ дан 25 May 2018 в 06:49

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

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/
0
ответ дан 25 May 2018 в 06:49

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

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