Включение последовательных сетевых устройств с помощью ModemManager
При включении ModemManager я не вижу свой FONA SIM808 с последовательным интерфейсом в списке доступных модемов, хотя я могу заставить его работать с pppd
,
Если я запускаю ModemManager с service stop ModemManager && ModemManager --debug
Я вижу, что он сканирует прошлые последовательные устройства при поиске модемов, но для каждого устройства, которое я вижу:
modem-manager: (tty/ttyO4): port's parent platform driver is not whitelisted
Глядя на исходный код, я вижу, что он проверяет устройство на наличие udev
флаг ID_MM_PLATFORM_DRIVER_PROBE
, Если этот флаг не существует, последовательный порт не будет сканироваться. Он также проверяет наличие ID_MM_CANDIDATE
флаг, чтобы увидеть, если это поддерживаемый порт дальше, так что я знаю, что он по крайней мере может прочитать это.
Поэтому я добавил этот флаг как новое правило в новый файл /etc/udev/rules.d/78-mm-uart4-enable.rules
ACTION=="add", KERNEL=="ttyO4", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"
После перезагрузки я вижу это в udevadm info /dev/ttyO4
P: /devices/ocp.3/481a8000.serial/tty/ttyO4
N: ttyO4
E: DEVNAME=/dev/ttyO4
E: DEVPATH=/devices/ocp.3/481a8000.serial/tty/ttyO4
E: ID_MM_CANDIDATE=1
E: ID_MM_PLATFORM_DRIVER_PROBE=1
E: MAJOR=247
E: MINOR=4
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=30104
Но я все еще получаю ту же ошибку от modem-manager
хотя у меня явно установлен флаг. Как мне белый список ttyO4
правильно?
1 ответ
В исходном коде первая проверка на ID_MM_CANDIDATE
делается на порту (т.е. /dev/ttyO4
). После этого ModemManager извлечет устройство физической платформы (сам последовательный порт), которое мы видим /devices/ocp.3/481a800.serial
, а затем проверьте это для ID_MM_PLATFORM_DRIVER_PROBE
флаг.
Если вместо udev
правило изменено на
ACTION=="add", KERNEL=="481a800.serial", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"
тогда ModemManager правильно увидит флаг на родительском устройстве.
# udevadm info /sys/devices/ocp.3/481a8000.serial
P: /devices/ocp.3/481a8000.serial
E: DEVPATH=/devices/ocp.3/481a8000.serial
E: DRIVER=omap_uart
E: ID_MM_PLATFORM_DRIVER_PROBE=1
E: MODALIAS=of:NserialT<NULL>Cti,omap3-uart
E: OF_COMPATIBLE_0=ti,omap3-uart
E: OF_COMPATIBLE_N=1
E: OF_FULLNAME=/ocp/serial@481a8000
E: OF_NAME=serial
E: SUBSYSTEM=platform
E: USEC_INITIALIZED=990701
Теперь устройство отображается в mmcli -L
а также nmcli device status
,