使用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 -L
和nmcli device status
。