使用 ModemManager 启用串行网络设备

使用 ModemManager 启用串行网络设备

启用 ModemManager 时,尽管我能够让它工作,但我在可用调制解调器列表中看不到我的基于串行的 SIM808 FONA pppd

如果我启动 ModemManager,service stop ModemManager && ModemManager --debug我会看到它在搜索调制解调器时会扫描过去的串行设备,但对于我看到的每个设备:

modem-manager: (tty/ttyO4): port's parent platform driver is not whitelisted

查看源代码,我发现它会检查设备中的标志udevID_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_DEVICE_PROCESS}="1"

然后 ModemManager 将正确看到父母设备(注意:ID_MM_PLATFORM_DRIVER_PROBE 不再存在)。

# 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 -Lnmcli device status

相关内容