web-dev-qa-db-fra.com

Activation des périphériques réseau série avec ModemManager

Lors de l'activation de ModemManager, mon FONA SIM808 basé sur un port série ne figure pas dans la liste des modems disponibles, bien que je puisse le faire fonctionner avec pppd.

Si je lance ModemManager avec service stop ModemManager && ModemManager --debug, je constate qu'il balaye les périphériques série antérieurs lors de la recherche de modems, mais pour chaque périphérique affiché:

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

En regardant le code source, je vois qu'il vérifie le périphérique pour le drapeau udev _ ID_MM_PLATFORM_DRIVER_PROBE. Si cet indicateur n'existe pas, le port série ne sera pas analysé. Il vérifie également le drapeau ID_MM_CANDIDATE pour voir s'il s'agit d'un port pris en charge plus haut, alors je sais qu'il est au moins capable de le lire.

J'ai donc ajouté cet indicateur en tant que nouvelle règle dans un nouveau fichier /etc/udev/rules.d/78-mm-uart4-enable.rules

ACTION=="add", KERNEL=="ttyO4", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"

Après le redémarrage, je vois ceci dans 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

Mais je reçois toujours la même erreur de modem-manager même si le drapeau est clairement défini. Comment ajouter de la liste blanche ttyO4 correctement?

1
CJxD

Dans le code source, la première vérification de ID_MM_CANDIDATE est effectuée sur le port (c.-à-d. /dev/ttyO4). Après cela, ModemManager récupérera le périphérique de la plate-forme physique (le port série lui-même) dont on peut voir qu'il est /devices/ocp.3/481a800.serial, puis le vérifier pour l'indicateur ID_MM_PLATFORM_DRIVER_PROBE.

Si à la place, la règle udev est modifiée en

ACTION=="add", KERNEL=="481a800.serial", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"

alors ModemManager verra correctement l'indicateur sur le périphérique 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

Le périphérique apparaît maintenant dans mmcli -L et nmcli device status.

2
CJxD