/dev/ttyACM0 и lsusb

Вопрос или проблема

Может кто-нибудь объяснить мне связь между /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. Это важно для последующей идентификации и устранения неполадок.

Применение: Настройка и определение устройства

  1. Определите ваше устройство с помощью lsusb: Команда lsusb помогает определить, какое USB-устройство подключено и распознано системой. Это первый шаг в идентификации, что за устройство находится в системе.

  2. Найдите соответствующий /dev/ttyACM#: Когда USB-устройство подключается, драйвер может создать соответствующий файл устройства, например, /dev/ttyACM0. Этот файл позволяет программам взаимодействовать с устройством, используя стандартные системные вызовы.

  3. Подключение устройства в 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, особенно при интеграции таких устройств в контейнеризованные приложения. Понимание процедур по идентификации и отладке этих устройств обеспечивает безошибочную работу систем и упрощает процессы настройки.

Оцените материал
Добавить комментарий

Капча загружается...