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