使用ModemManager启用串行网络设备

启用ModemManager时,我没有在可用的调制解调器列表中看到基于串口的SIM808 FONA,即使我能够使用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看到了这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列入白名单?

在源代码中, 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:NserialTCti,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