Вопрос или проблема
Может кто-нибудь объяснить мне связь между /dev/ttyACM0 и выводом lsusb?
Я следую этим инструкциям.
Говорится: “Обновите ttyACM0, чтобы он соответствовал расположению вашего адаптера.” Я не знаю, что здесь делать.
lsusb
Bus 002 Device 002: ID 1058:25a3 Western Digital Technologies, Inc. Elements Desktop (WDBWLG)
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0451:16a8 Texas Instruments, Inc. CC2531 ZigBee
Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
simon@simon-itx:~/Downloads/zigbee2mqtt$ usb-devices
Вывод lsusb
говорит, что у вас подключено устройство Zigbee:
Bus 001 Device 004: ID 0451:16a8 Texas Instruments, Inc. CC2531 ZigBee
Теперь USB-устройства определенного класса имеют драйверы, которые создают устройства /dev/ttyACM*
. Эти устройства получают увеличивающиеся номера в зависимости от времени их создания, и эти номера абсолютно не связаны с выводом lsusb
.
Судя по выводу lsusb
, у вас, вероятно, есть только одно из таких устройств. Так что если вы выполните ls /dev/ttyACM*
, вы должны увидеть один файл /dev/ttyACM0
.
Если это так, запустите контейнер с этим файлом:
docker run \
--device=/dev/ttyACM0
...
и вы закончите.
Если вы видите несколько файлов с разными номерами, например /dev/ttyACM0
и /dev/ttyACM1
, следующим шагом будет выяснить, какое из них какое. Существует несколько способов сделать это, например, вы можете посмотреть вывод dmesg
сразу после подключения устройства, или вы можете использовать файловую систему /sys
, которая содержит символические ссылки, показывающие связь.
Ответ или решение
Концепция Dev/TTY и связь с LSUSB
Если вы пытаетесь настроить устройство USB, например ZigBee адаптер для взаимодействия с программным обеспечением, когда система находится в Linux-среде, важно понимать связь между файлами устройств, такими как /dev/ttyACM0, и инструментами командной строки, такими как lsusb.
Теория: Устройства USB и файловая система Linux
В Linux, когда вы подключаете устройство через USB, ядро системы распознает это устройство и передает управление подходящему драйверу. Если устройство классифицируется как интерфейс связи (например, модемы, микроконтроллеры), оно обычно сопоставляется с виртуальным последовательным портом, представленным файлом в системе /dev, например, /dev/ttyACM0 или /dev/ttyUSB0.
/dev/ttyACM#: TTY
(Teletype) обозначает последовательные устройства, связанные с интерфейсом связи. ACM
– это сокращение от "Abstract Control Model", стандарт USB для коммуникационных устройств. /dev/ttyACM0 – это путь к файлу устройства, который связывает программные операции с физическим устройством.
lsusb: Это инструмент командной строки, который перечисляет USB-устройства, подключенные к вашей системе. Он предоставляет важную информацию, такую как вендорный и продуктовый идентификаторы, которые помогают идентифицировать конкретное устройство.
Пример: Использование lsusb и /dev/ttyACM
Когда вы вводите команду lsusb
, output может выглядеть так:
Bus 001 Device 004: ID 0451:16a8 Texas Instruments, Inc. CC2531 ZigBee
Это сообщает, что на шине 001, устройство 004 является устройством от Texas Instruments с идентификатором продукта 16a8. Это важно для последующей идентификации и устранения неполадок.
Применение: Настройка и определение устройства
-
Определите ваше устройство с помощью lsusb: Команда
lsusb
помогает определить, какое USB-устройство подключено и распознано системой. Это первый шаг в идентификации, что за устройство находится в системе. -
Найдите соответствующий /dev/ttyACM#: Когда USB-устройство подключается, драйвер может создать соответствующий файл устройства, например, /dev/ttyACM0. Этот файл позволяет программам взаимодействовать с устройством, используя стандартные системные вызовы.
-
Подключение устройства в Docker-контейнере:
Если ваша инструкция говорит "обновите ttyACM0, чтобы он соответствовал расположению вашего адаптера", это означает, что вы должны убедиться, что путь к файлу устройства в Docker-контейнере совпадает с текущим файлом устройства в вашей системе.
Команда, чтобы запустить контейнер с пре загружаемым устройством, может выглядеть так:
docker run \ --device=/dev/ttyACM0 \ ...
Эта команда говорит Docker использовать устройство /dev/ttyACM0 внутри контейнера, предоставляя доступ приложениям, работающим внутри контейнера.
Устранение неисправностей
Если вы видите более одного файла /dev/ttyACM, например, /dev/ttyACM0 и /dev/ttyACM1, может возникнуть путаница, какое устройство какое. Здесь на помощь придут:
-
dmesg: Выведите информацию о последних событиях в системе, чтобы увидеть, какое устройство только что было подключено, включая его назначенный путь /dev.
-
Файловая система /sys: Это система, которая представляет устройств в виде иерархии символических ссылок и файлов, предоставляющая информацию о физических и логических устройствах. Исследуя содержимое /sys/class/tty/ttyACM0 или /sys/class/tty/ttyACM1, можно получить подсказки о соответствующих USB-вендорах или серийных номерах.
Заключение
Понимание связки таких команд и файловых систем как lsusb и /dev/ttyACM# имеет жизненно важное значение для успешного управления USB-устройствами в среде Linux, особенно при интеграции таких устройств в контейнеризованные приложения. Понимание процедур по идентификации и отладке этих устройств обеспечивает безошибочную работу систем и упрощает процессы настройки.