Вопрос или проблема
У меня есть сотовый модем 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.
Пример
Рассмотрим конфигурацию, предложенную в вашем случае:
-
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"
-
Логирование ModemManager:
Ваша команда для проверки логовjournalctl
показала, что ModemManager не смог обнаружить основной AT порт и отобразил предупреждение, что портttyAMA3
не был захвачен из-за "необработанного типа порта".
Решение и Применение
-
Уточнение udev-правил:
Убедитесь, что правила достаточно специфичны для вашей модели модема. Возможно, потребуется добавить специфические идентификаторы модема, если они доступны (например, по VID/PID, если это применимо для последовательных портов). -
Отладка Serial Port:
- Убедитесь, что устройство
/dev/ttyAMA3
работает корректно вне ModemManager, например, с помощьюscreen
илиminicom
. Вы уже проверили его сscreen
, что хорошо. - Проверьте права доступа, группе
dialout
должно быть разрешено взаимодействовать с устройством. Вы можете настроить соответствующие группы и права.
- Убедитесь, что устройство
-
Конфигурация ModemManager:
- Убедитесь, что ModemManager действительно поддерживает ваш модем. В случае проблем с поддержкой можно рассмотреть следующие шаги:
- Используйте плагин ‘generic’, как это показано в логах. Это общий плагин, но возможно он не поддерживает особенности вашего модема.
- Просмотрите документацию ModemManager, возможно вам понадобится настроить специальный плагин или модифицировать существующий.
- Убедитесь, что ModemManager действительно поддерживает ваш модем. В случае проблем с поддержкой можно рассмотреть следующие шаги:
-
Перезагрузка и Проверка:
- Перезапустите службу ModemManager после внесения изменений в настройки и udev-правила:
systemctl restart ModemManager
. - После этого проверьте, распознал ли ModemManager модем с помощью команд
mmcli --scan-modems
иmmcli --list-modems
.
- Перезапустите службу ModemManager после внесения изменений в настройки и udev-правила:
-
Альтернативные Инструменты:
Если после всех настроек проблема не устраняется, вы можете рассмотреть использование альтернативных инструментов для управления модемом или заняться написанием своего плагина для более специфичной поддержки вашего продукта. -
Обновление ПО:
Убедитесь, что все пакеты и ядро системы обновлены до последних версий, так как обновления могут содержать исправления для поддержки нового оборудования.
Все вышеизложенные шаги являются основными рекомендациями для настройки взаимодействия с модемом через ModemManager на Linux. Учитывая вашу конфигурацию, придерживайтесь последовательного выполнения этих шагов для достижения наилучшего результата.