Вопрос или проблема
У меня есть cubieboard2 с установленной Arch Linux и кастомным ядром Linux. В cubieboard2 я подключил свое устройство usb-serial (например, arduino), оно распознается как CDC ACM. Мое ядро Linux имеет включенные опции CDC в конфигурации, как я увидел на этой странице, но я не могу использовать последовательный порт /dev/ttyACM0
с приложениями minicom
или pyserial
.
Minicom просто сообщает, что не может открыть последовательный порт. Pyserial может открыть порт, но когда я пытаюсь его прочитать, результат такой:
SerialException: устройству было сигнализировано о готовности к чтению, но данных не вернулось (устройство отключено или происходит множественный доступ к порту?)
Тем не менее, в pyserial
, если я пытаюсь записать байт, результат другой:
SerialException: запись не удалась: [Errno 5] Ошибка ввода/вывода.
Другие странности происходят, когда я закрываю последовательный порт, его имя изменяется, другими словами, когда я закрываю /dev/ttyACM0
, оно меняется на /dev/ttyACM1
.
Я пробовал мое устройство на ноутбуке, и оно работает нормально с pyserial
и minicom
.
Информация о cubieboard2:
$ uname -a
Linux alarm 3.4.61-rt77-ARCH+ #10 SMP PREEMPT RT Thu Apr 17 13:58:20 BRT 2014 armv7l GNU/Linux
мой файл конфигурации ядра: http://pastebin.com/raw.php?i=6LfsRyek
Мое предположение в том, что не включена какая-то опция ядра, но я не знаю, какая именно.
Есть идеи?
Мне кажется, что проблема в вашем устройстве. Оно может правильно идентифицироваться, но ведет себя неожиданно при последующем выполнении коммуникации. Попробуйте использовать Wireshark с usbmon (или tshark, если у вас нет X-сессии). Имя ttyACM1 обычно возникает из-за повторной идентификации после неправильной коммуникации.
Ответ или решение
Решение проблемы с CDC ACM на пользовательском ядре Linux для Cubieboard2
На Cubieboard2 под управлением Arch Linux с пользовательским ядром могут возникнуть проблемы с использованием устройства USB-CDC ACM, например Arduino. Проблема проявляется в невозможности использования порта /dev/ttyACM0
через приложения minicom
или pyserial
.
Возможные причины и решение проблемы
-
Ошибка конфигурации ядра:
- Проверьте, что все необходимые параметры для поддержки CDC ACM действительно включены в конфигурации ядра. Это может быть, например, включение опции
CONFIG_USB_ACM
в конфигурационном файле. Ваше ядро устаревшее (версия 3.4.61), и возможно, оно не поддерживает все необходимые функции современных устройств. Рекомендуется обновить ядро до более новой версии, если это возможно, и заново проверить конфигурацию.
- Проверьте, что все необходимые параметры для поддержки CDC ACM действительно включены в конфигурации ядра. Это может быть, например, включение опции
-
Проблемы с драйверами:
- Убедитесь, что драйверы загружаются корректно. Используйте команду
dmesg
для просмотра системного журнала сообщений и выявления возможных сбоев, связанных с загрузкой модулей или конфликтами.
- Убедитесь, что драйверы загружаются корректно. Используйте команду
-
Проблема с правами доступа:
- Проверьте права доступа к устройству
/dev/ttyACM0
. Убедитесь, что ваша учетная запись пользователя имеет все необходимые права для работы с этим устройством. Используйтеls -l /dev/ttyACM0
для просмотра прав иchmod
илиchgrp
для их изменения, если это необходимо.
- Проверьте права доступа к устройству
-
Переподключение и переименование устройства:
- Частое переименование устройства (например, с
/dev/ttyACM0
на/dev/ttyACM1
) обусловлено его перерегистрацией из-за ошибки коммуникации. Это может означать аппаратную проблему с проводом или неправильное обращение к устройству излучением (ЕМП).
- Частое переименование устройства (например, с
-
Используйте анализатор USB-трафика:
- Для диагностики проблемы коммуникации используйте Wireshark с usbmon для мониторинга USB-трафика. Это может помочь выявить, где именно происходит сбой в передаче данных.
-
Проверьте устройство на других платформах:
- Так как устройство работает на вашем ноутбуке, рассмотрите возможность смены порта USB или используемого адаптера на Cubieboard2. Возможно, проблема в оборудовании, а не в ядре.
Заключение
На основании вышеизложенного, ваш случай может требовать как программной диагностики, так и проверки аппаратных аспектов. Попробуйте поочередно исключать возможные причины, начиная с проверки версии ядра и конфигурации до анализа физического состояния устройств и портов. Если проблемы продолжаются, можно рассмотреть использование альтернативной аппаратной платформы, более совместимой с вашей задачей.
Ваш опыт и результаты диагностики могут также быть полезны другим, поэтому, пожалуйста, обновите ваш файл конфигурации в соответствии с актуальными рекомендациями и свяжитесь с сообществом, если удастся найти решение.