web-dev-qa-db-ja.com

ModemManagerでシリアルネットワークデバイスを有効にする

ModemManagerを有効にすると、pppdで動作させることができても、使用可能なモデムのリストにシリアルベースのSIM808 FONAが表示されません。

service stop ModemManager && ModemManager --debugでModemManagerを起動すると、モデムを検索するときに過去のシリアルデバイスをスキャンしますが、すべてのデバイスが表示されます。

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
CJxD

ソースコードでは、ID_MM_CANDIDATEの最初のチェックはport(つまり/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はparentデバイスのフラグを正しく表示します。

# 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に表示されます。

2
CJxD