Помощь с ModemManager и модемом на порту UART

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

У меня есть сотовый модем SARA-R52M10, подключенный к Raspberry Pi CM4, работающему на Ubuntu 24.04 через UART3:

root@GATEWAY-0x00000028:~# ll /dev/ttyAMA3
crw-rw---- 1 root dialout 204, 67 Feb 25 01:21 /dev/ttyAMA3

Я могу получить от него ответы с помощью

screen /dev/ttyAMA3 115200

или запустив

stty -F /dev/ttyAMA3 115200 && cat /dev/ttyAMA3

в одном терминале и

echo -e "AT\r" > /dev/ttyAMA3

в другом.

Но я пытаюсь заставить ModemManager установить с ним связь, и у меня это не получается.

Я запускаю:

echo 'ACTION!="add|change|move|bind", GOTO="mm_sara_r52m10_end"
SUBSYSTEMS=="tty", DEVPATH=="/devices/platform/soc/fe201600.serial/fe201600.serial:0/fe201600.serial:0.0/tty/ttyAMA3"
LABEL="mm_sara_r52m10_end"

# Правило для ModemManager для работы с устройством на ttyAMA3
ACTION=="add|change|move", SUBSYSTEM=="tty", KERNEL=="ttyAMA3", \
    ENV{ID_MM_DEVICE_PROCESS}="1", \
    ENV{ID_MM_TTY_BAUDRATE}="115200", \
    ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1", \
    ENV{ID_MM_TTY_FLOW_CONTROL}="rts-cts"
' > /etc/udev/rules.d/99-sara-r52m10.rules
udevadm control --reload && udevadm trigger

systemctl restart ModemManager
mmcli --scan-modems
mmcli --list-modems

и получаю

успешно запрошено сканирование устройств
Модемы не найдены

И

journalctl -u ModemManager --no-pager --since "$(systemctl show -p ActiveEnterTimestamp ModemManager | cut -d'=' -f2)"

показывает:

Feb 25 01:27:02 GATEWAY-0x00000028 systemd[1]: Starting ModemManager.service - Modem Manager...
Feb 25 01:27:02 GATEWAY-0x00000028 ModemManager[1737]: <msg> ModemManager (версия 1.23.4) запускается в системной шине...
Feb 25 01:27:02 GATEWAY-0x00000028 systemd[1]: Запущен ModemManager.service - Modem Manager.
Feb 25 01:27:09 GATEWAY-0x00000028 ModemManager[1737]: <msg> [base-manager] не удалось проверить поддержку для устройства '/sys/devices/platform/scb/fd580000.ethernet': не поддерживается ни одним плагином
Feb 25 01:27:09 GATEWAY-0x00000028 ModemManager[1737]: <msg> [base-manager] не удалось проверить поддержку для устройства '/sys/devices/platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1': не поддерживается ни одним плагином
Feb 25 01:27:18 GATEWAY-0x00000028 ModemManager[1737]: <msg> [device /sys/devices/platform/soc] создание модема с плагином 'generic' и '1' портами
Feb 25 01:27:18 GATEWAY-0x00000028 ModemManager[1737]: <wrn> [plugin/generic] не удалось захватить порт ttyAMA3: невозможно добавить порт 'tty/ttyAMA3', необработанный тип порта
Feb 25 01:27:18 GATEWAY-0x00000028 ModemManager[1737]: <wrn> [base-manager] не удалось создать модем для устройства '/sys/devices/platform/soc': не удалось найти основной AT порт

Выглядят ли мои правила правильно? Я в них не очень уверен.

Как я могу решить проблему, показанную в последних строках этого вывода, и заставить ModemManager установить связь с моим модемом?

Буду благодарен за любые мысли. Спасибо!

Ответ или решение

Для решения проблемы взаимодействия ModemManager с модемом SARA-R52M10, подключенным к Raspberry Pi CM4 через интерфейс UART, необходимо предпринять следующие шаги.

Теория

ModemManager — это инструмент для управления модемами на системах Linux. Он взаимодействует с модемами через различные интерфейсы, такие как USB и UART, и использует специальный набор правил и плагинов для поддержки каждого устройства. Для успешного подключения ModemManager к модему, необходимо правильно настроить udev-правила, чтобы система могла корректно идентифицировать устройство и обработать его в ModemManager.

Пример

Рассмотрим конфигурацию, предложенную в вашем случае:

  1. udev-правила:
    Вы уже добавили правила для udev, чтобы ModemManager мог работать с устройством на /dev/ttyAMA3. Правила, которые вы используете, в целом корректны, но могут нуждаться в уточнении:

    ACTION=="add|change|move", SUBSYSTEM=="tty", KERNEL=="ttyAMA3", \
       ENV{ID_MM_DEVICE_PROCESS}="1", \
       ENV{ID_MM_TTY_BAUDRATE}="115200", \
       ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1", \
       ENV{ID_MM_TTY_FLOW_CONTROL}="rts-cts"
  2. Логирование ModemManager:
    Ваша команда для проверки логов journalctl показала, что ModemManager не смог обнаружить основной AT порт и отобразил предупреждение, что порт ttyAMA3 не был захвачен из-за "необработанного типа порта".

Решение и Применение

  1. Уточнение udev-правил:
    Убедитесь, что правила достаточно специфичны для вашей модели модема. Возможно, потребуется добавить специфические идентификаторы модема, если они доступны (например, по VID/PID, если это применимо для последовательных портов).

  2. Отладка Serial Port:

    • Убедитесь, что устройство /dev/ttyAMA3 работает корректно вне ModemManager, например, с помощью screen или minicom. Вы уже проверили его с screen, что хорошо.
    • Проверьте права доступа, группе dialout должно быть разрешено взаимодействовать с устройством. Вы можете настроить соответствующие группы и права.
  3. Конфигурация ModemManager:

    • Убедитесь, что ModemManager действительно поддерживает ваш модем. В случае проблем с поддержкой можно рассмотреть следующие шаги:
      • Используйте плагин ‘generic’, как это показано в логах. Это общий плагин, но возможно он не поддерживает особенности вашего модема.
      • Просмотрите документацию ModemManager, возможно вам понадобится настроить специальный плагин или модифицировать существующий.
  4. Перезагрузка и Проверка:

    • Перезапустите службу ModemManager после внесения изменений в настройки и udev-правила: systemctl restart ModemManager.
    • После этого проверьте, распознал ли ModemManager модем с помощью команд mmcli --scan-modems и mmcli --list-modems.
  5. Альтернативные Инструменты:
    Если после всех настроек проблема не устраняется, вы можете рассмотреть использование альтернативных инструментов для управления модемом или заняться написанием своего плагина для более специфичной поддержки вашего продукта.

  6. Обновление ПО:
    Убедитесь, что все пакеты и ядро системы обновлены до последних версий, так как обновления могут содержать исправления для поддержки нового оборудования.

Все вышеизложенные шаги являются основными рекомендациями для настройки взаимодействия с модемом через ModemManager на Linux. Учитывая вашу конфигурацию, придерживайтесь последовательного выполнения этих шагов для достижения наилучшего результата.

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

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