UART modem with ModemManager - no plugin selected

EDIT: moved debug log output into a code block

Hey all,

I am trying to set up ModemManager v1.22 so that it communicates with a Cinterion EXS62-W modem via UART. The hardware connection looks to be set up correctly and I can manually write AT commands to the modem and receive its responses. For ModemManager, I set up a udev rule and tried a couple of variations. I especially varied the suggested ModemManager plugin.

In general, ModemManager is able to communicate with the modem (/dev/ttymxc1) and correctly identifies it to be AT-command capable. However, ModemManager does not seem to be able to select a plugin. When debugging ModemManager, the output to “sudo ModemManager --debug 2>&1 | grep “ttymxc1”“ is:

ModemManager[9620]: <dbg> [1764768417.528425] [ttymxc1] port contents loaded:
ModemManager[9620]: <dbg> [1764768417.530123] [ttymxc1]   bus: platform
ModemManager[9620]: <dbg> [1764768417.533938] [ttymxc1]   device: /sys/devices/platform/soc/2100000.bus/21e8000.serial
ModemManager[9620]: <dbg> [1764768417.534793] [ttymxc1]   driver: imx-uart
ModemManager[9620]: <dbg> [1764768417.535513] [base-manager] adding port ttymxc1 at sysfs path: /sys/devices/platform/soc/2100000.bus/21e8000.serial/tty/ttymxc1
ModemManager[9620]: <dbg> [1764768417.539467] [filter] (tty/ttymxc1) port allowed: device is allowlisted
ModemManager[9620]: <dbg> [1764768417.540279] [base-manager] port ttymxc1 is first in device /sys/devices/platform/soc/2100000.bus/21e8000.serial
ModemManager[9620]: <dbg> [1764768417.543542] [ttymxc1/probe] port type hint detected in udev tag: ID_MM_PORT_TYPE_AT_PRIMARY
ModemManager[9620]: <dbg> [1764768417.547040] [ttymxc1/probe] port type hints loaded: AT yes, QMI no, MBIM no, QCDM no, AUDIO no, GPS no
ModemManager[9620]: <dbg> [1764768417.548007] [plugin-manager] task 0: port grabbed: ttymxc1
ModemManager[9620]: <dbg> [1764768417.549619] [plugin-manager] task 0,ttymxc1: new support task for port
ModemManager[9620]: <dbg> [1764768417.553979] [plugin-manager] task 0,ttymxc1: deferred until min wait time elapsed
ModemManager[9620]: <dbg> [1764768419.792533] [plugin/altair-lte] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.794496] [plugin/ericsson-mbm] port ttymxc1 filtered by udev tags
ModemManager[9620]: <dbg> [1764768419.795204] [plugin/nokia-icera] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.798066] [plugin/motorola] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.798759] [plugin/d-link] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.801774] [plugin/option-hso] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.802654] [plugin/linktop] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.803447] [plugin/tp-link] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.807193] [plugin/intel] port ttymxc1 filtered by subsystem
ModemManager[9620]: <dbg> [1764768419.808069] [plugin/dell] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.809042] [plugin/motorola] port ttymxc1 filtered by udev tags
ModemManager[9620]: <dbg> [1764768419.812405] [plugin/option] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.813249] [plugin/wavecom] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.814476] [plugin/anydata] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.817900] [plugin/broadmobi] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.818806] [plugin/fibocom] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.819158] [plugin/x22x] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.819920] [plugin/haier] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.823264] [plugin/novatel] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.823919] [plugin/simtech] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824088] [plugin/thuraya] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824174] [plugin/zte] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824246] [plugin/samsung] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824308] [plugin/novatel-lte] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824367] [plugin/foxconn] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824432] [plugin/gosuncn] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.824494] [plugin/huawei] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824557] [plugin/pantech] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824618] [plugin/qcom-soc] port ttymxc1 filtered by subsystem
ModemManager[9620]: <dbg> [1764768419.824678] [plugin/sierra-legacy] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.824735] [plugin/sierra] port ttymxc1 filtered by drivers
ModemManager[9620]: <dbg> [1764768419.824792] [plugin/longcheer] port ttymxc1 filtered by vendor/product IDs
ModemManager[9620]: <dbg> [1764768419.824867] [plugin-manager] task 0,ttymxc1: found '8' plugins to try
ModemManager[9620]: <dbg> [1764768419.824917] [plugin-manager] task 0,ttymxc1: will try with plugin 'via'
ModemManager[9620]: <dbg> [1764768419.824962] [plugin-manager] task 0,ttymxc1: will try with plugin 'telit'
ModemManager[9620]: <dbg> [1764768419.825004] [plugin-manager] task 0,ttymxc1: will try with plugin 'nokia'
ModemManager[9620]: <dbg> [1764768419.825044] [plugin-manager] task 0,ttymxc1: will try with plugin 'u-blox'
ModemManager[9620]: <dbg> [1764768419.825085] [plugin-manager] task 0,ttymxc1: will try with plugin 'quectel'
ModemManager[9620]: <dbg> [1764768419.825126] [plugin-manager] task 0,ttymxc1: will try with plugin 'iridium'
ModemManager[9620]: <dbg> [1764768419.825165] [plugin-manager] task 0,ttymxc1: will try with plugin 'cinterion'
ModemManager[9620]: <dbg> [1764768419.825205] [plugin-manager] task 0,ttymxc1: will try with plugin 'generic'
ModemManager[9620]: <dbg> [1764768419.825297] [plugin-manager] task 0,ttymxc1: started
ModemManager[9620]: <dbg> [1764768419.825364] [plugin-manager] task 0,ttymxc1: checking with plugin 'via'
ModemManager[9620]: <dbg> [1764768419.825505] [plugin/via] probes required for port ttymxc1: 'at, at-vendor, at-product, qcdm'
ModemManager[9620]: <dbg> [1764768419.825614] [ttymxc1/probe] no QCDM/QMI/MBIM probing in possible AT port
ModemManager[9620]: <dbg> [1764768419.825665] [ttymxc1/probe] port is not QCDM-capable
ModemManager[9620]: <dbg> [1764768419.825707] [ttymxc1/probe] port is not QMI-capable
ModemManager[9620]: <dbg> [1764768419.825748] [ttymxc1/probe] port is not MBIM-capable
ModemManager[9620]: <dbg> [1764768419.825799] [ttymxc1/probe] launching port probing: 'at, at-vendor, at-product'
ModemManager[9620]: <dbg> [1764768419.826017] [plugin-manager] task 0: still 1 running probes (1 active): ttymxc1
ModemManager[9620]: <dbg> [1764768419.838046] [ttymxc1/at] opening serial port...
ModemManager[9620]: <dbg> [1764768419.839541] [ttymxc1/at] setting up baudrate: 115200
ModemManager[9620]: <dbg> [1764768419.840613] [ttymxc1/at] flow control explicitly requested for device is: none
ModemManager[9620]: <dbg> [1764768419.842619] [ttymxc1/at] device open count is 1 (open)
ModemManager[9620]: <dbg> [1764768419.845063] [ttymxc1/at] --> 'AT<CR>'
ModemManager[9620]: <dbg> [1764768420.054279] [ttymxc1/at] <-- 'AT'
ModemManager[9620]: <dbg> [1764768420.059628] [ttymxc1/at] <-- '<CR><CR><LF>OK<CR><LF>'
ModemManager[9620]: <dbg> [1764768420.060977] [ttymxc1/probe] port is AT-capable
ModemManager[9620]: <dbg> [1764768420.063176] [ttymxc1/at] --> 'AT+CGMI<CR>'
ModemManager[9620]: <dbg> [1764768420.765647] [ttymxc1/at] <-- 'AT+CGMI'
ModemManager[9620]: <dbg> [1764768420.768873] [ttymxc1/at] <-- '<CR>'
ModemManager[9620]: <dbg> [1764768420.776458] [ttymxc1/at] <-- '<CR><LF>Cinterion<CR><LF>'
ModemManager[9620]: <dbg> [1764768420.778743] [ttymxc1/at] <-- '<CR><LF>OK<CR><LF>'
ModemManager[9620]: <dbg> [1764768420.779863] [ttymxc1/probe] vendor probing finished
ModemManager[9620]: <dbg> [1764768420.780990] [ttymxc1/at] --> 'AT+CGMM<CR>'
ModemManager[9620]: <dbg> [1764768421.481819] [ttymxc1/at] <-- 'AT+CGMM'
ModemManager[9620]: <dbg> [1764768421.487656] [ttymxc1/at] <-- '<CR>'
ModemManager[9620]: <dbg> [1764768421.492943] [ttymxc1/at] <-- '<CR><LF>EXS62-W<CR><LF><CR><LF>O'
ModemManager[9620]: <dbg> [1764768421.494630] [ttymxc1/at] <-- 'K<CR><LF>'
ModemManager[9620]: <dbg> [1764768421.496594] [ttymxc1/probe] product probing finished
ModemManager[9620]: <dbg> [1764768421.497871] [plugin/via] port ttymxc1 filtered by vendor/product strings
ModemManager[9620]: <dbg> [1764768421.499113] [plugin-manager] task 0,ttymxc1: checking with plugin 'telit'
ModemManager[9620]: <dbg> [1764768421.500831] [plugin/telit] probes required for port ttymxc1: 'at, at-vendor, qcdm'
ModemManager[9620]: <dbg> [1764768421.501048] [ttymxc1/probe] no QCDM/QMI/MBIM probing in possible AT port
ModemManager[9620]: <dbg> [1764768421.501120] [ttymxc1/probe] port is not QCDM-capable
ModemManager[9620]: <dbg> [1764768421.501171] [ttymxc1/probe] port is not QMI-capable
ModemManager[9620]: <dbg> [1764768421.501214] [ttymxc1/probe] port is not MBIM-capable
ModemManager[9620]: <dbg> [1764768421.501255] [ttymxc1/probe] port probing finished: no more probings needed
ModemManager[9620]: <dbg> [1764768421.501430] [ttymxc1/at] device open count is 0 (close)
ModemManager[9620]: <dbg> [1764768421.501506] [ttymxc1/at] closing serial port...
ModemManager[9620]: <dbg> [1764768421.504320] [ttymxc1/at] serial port closed
ModemManager[9620]: <dbg> [1764768421.504727] [ttymxc1/at] forced to close port
ModemManager[9620]: <dbg> [1764768421.505175] [plugin/telit] port ttymxc1 filtered by vendor strings
ModemManager[9620]: <dbg> [1764768421.510509] [plugin-manager] task 0,ttymxc1: checking with plugin 'nokia'
ModemManager[9620]: <dbg> [1764768421.510894] [plugin/nokia] probing of port ttymxc1 deferred until result suggested
ModemManager[9620]: <dbg> [1764768421.511287] [plugin-manager] task 0,ttymxc1: deferring support check until result suggested
ModemManager[9620]: <dbg> [1764768421.546433] [plugin-manager] task 0: still 1 running probes (0 active): ttymxc1
ModemManager[9620]: <dbg> [1764768421.546567] [plugin-manager] task 0,ttymxc1: deferred task completed, no suggested plugin
ModemManager[9620]: <dbg> [1764768421.546621] [plugin-manager] task 0,ttymxc1: finished in '3.997026' seconds
ModemManager[9620]: <dbg> [1764768421.546715] [plugin-manager] task 0,ttymxc1: not supported by any plugin
ModemManager[9620]: <dbg> [1764768421.546807] [device /sys/devices/platform/soc/2100000.bus/21e8000.serial] fully ignoring port ttymxc1 from now on

The log suggests that ModemManager simply does not know which plugin to choose. Do you have any ideas on how to trouble-shoot this? Are there other settings that I could try?

@drew.tx, during our call on Monday you suggested that I could mention you here directly. :slight_smile:

Best, Tom

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I’d be glad to help! Could you let me know which OS and version you are using? To get this information, please run the tdx-info command on your device and share the output. You can find more details about this command at Getting Device Information with Tdx-Info | Toradex Developer Center

From your debug output, I can see that ModemManager is correctly detecting your Cinterion EXS62-W modem via UART and identifying it as AT-command capable(1). The modem is responding to AT commands with vendor “Cinterion” and model “EXS62-WO”, but the plugin selection process is failing.

Analysis of the Issue

Your logs show that ModemManager goes through its plugin detection process but ultimately concludes “not supported by any plugin”(1). The key issue appears to be in the plugin filtering process where various plugins are being filtered out by different criteria (vendor/product IDs, drivers, subsystem, etc.).

Troubleshooting Steps

Based on the Toradex documentation for ModemManager(1)(2), here are some approaches to resolve this:

1. Check Your udev Rules

Since you mentioned setting up udev rules, ensure they properly identify your modem. The documentation shows that ModemManager uses udev tags for port type detection(1)(2).

2. Force Plugin Selection

You may need to explicitly force the Cinterion plugin. ModemManager provides mechanisms to override plugin detection when the automatic process fails(1).

3. Verify Hardware Setup

Ensure your UART connection is properly configured. The documentation emphasizes that commands may vary according to your modem and cellular provider(1).

Platform-Specific Guidance

Once you provide your platform information via tdx-info, I can give you more specific guidance on:

  • Device tree configuration for your UART interface
  • Platform-specific ModemManager configuration
  • Carrier board considerations for your setup

The ModemManager documentation notes that Torizon OS provides ModemManager out-of-the-box(1), so the solution may involve platform-specific configuration rather than software installation.

Best regards,
Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hi @trunner

Thanks for creating this ticket. Hopefully we can use it to get you squared away.

I don’t know that modem in particular but Google’s AI engine claims it should be supported by the “built-in QMI (Qualcomm Modem Interface) or MBIM (Mobile Broadband Interface Model) control protocol plugins”. It also seems to need the qcserial module to be loaded.

Can you provide the output from the following commands:

$ sudo tdx-info
$ sudo lsmod

Drew

Hey Drew,

thanks for responding. :slight_smile:

The output for tdx-info is:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.108-7.4.0-00057-g451f1e35226f #1-Torizon PREEMPT Mon Jun 30 14:11:55 UTC 2025
Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.0/torizon/7e5c20d6c7027f2e4d9706932237a8eb89ea6b21337483802fe836e381591c80/0
Distro name:              NAME="Torizon OS Upstream"
Distro version:           VERSION_ID=7.4.0-build.28
Distro variant:           VARIANT="Docker"
Hostname:                 colibri-imx6ull-emmc-08641060
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Colibri iMX6ULL 1GB (eMMC) on Colibri Evaluation Board V3
Toradex version:          0062 V1.1D
Serial number:            08641060
Processor arch:           armv7l
------------------------------------------------------------

The output for lsmod is:

Module                  Size  Used by
xt_nat                 12288  4
xt_tcpudp              16384  4
xt_conntrack           12288  2
xt_MASQUERADE          16384  2
nf_conntrack_netlink    32768  0
xfrm_user              36864  1
iptable_nat            12288  2
xt_addrtype            12288  2
iptable_filter         12288  1
ip_tables              20480  2 iptable_filter,iptable_nat
x_tables               32768  8 xt_nat,ip_tables,iptable_filter,xt_tcpudp,xt_MASQUERADE,iptable_nat,xt_addrtype,xt_conntrack
br_netfilter           24576  0
bridge                200704  1 br_netfilter
stp                    12288  1 bridge
llc                    12288  2 bridge,stp
mcp251x                20480  0
can_dev                40960  1 mcp251x
imx_pxp                24576  0
videobuf2_dma_contig    16384  1 imx_pxp
v4l2_mem2mem           32768  1 imx_pxp
mxs_dcp                20480  0
videobuf2_memops       16384  1 videobuf2_dma_contig
videobuf2_v4l2         24576  2 imx_pxp,v4l2_mem2mem
videobuf2_common       57344  5 imx_pxp,videobuf2_dma_contig,videobuf2_memops,v4l2_mem2mem,videobuf2_v4l2
vf610_adc              12288  0
industrialio_triggered_buffer    12288  1 vf610_adc
kfifo_buf              12288  1 industrialio_triggered_buffer
industrialio           81920  3 vf610_adc,industrialio_triggered_buffer,kfifo_buf
ci_hdrc_imx            16384  0
usbmisc_imx            24576  1 ci_hdrc_imx
ci_hdrc                53248  2 ci_hdrc_imx
imx_sdma               28672  2
virt_dma               16384  1 imx_sdma
nvmem_snvs_lpgpr       12288  0
phy_mxs_usb            16384  2
spi_imx                24576  0
snd_soc_fsl_asrc       28672  0
usb_conn_gpio          16384  0
roles                  16384  2 usb_conn_gpio,ci_hdrc
cfg80211              712704  0
uio_pdrv_genirq        16384  0
uio                    16384  1 uio_pdrv_genirq
openvswitch           126976  0
nsh                    12288  1 openvswitch
nf_conncount           16384  1 openvswitch
nf_nat                 40960  4 xt_nat,openvswitch,xt_MASQUERADE,iptable_nat
libcomposite           65536  0
fuse                  102400  1
nfnetlink              16384  3 nf_conntrack_netlink

I’ve had different results when researching how ModemManager would interact with the modem. To me it seemed as if ModemManager should determine that QMI and MBIM should not be supported and hence communicate via AT commands.

I’ve noticed that my test modem does not have the most recent firmware installed. I’ll upgrade the firmware and follow-up on this, if it makes any difference.

Best,

Tom

Hi Tom,

If you manually insert the module/driver into the kernel does that make any difference?

$ sudo modprobe qcserial

Hey Drew,

thanks for the suggestion.

I’ve updated the modem’s firmware and now I can’t communicate via UART directly and therefore can’t really test ModemManager properly for the time being… I’ll investigate some more, maybe some connector got damaged.

However, the modem still works via a USB-to-serial converter (/dev/ttyUSB0), which I used to try your suggestion. I don’t think that it worked, though. From my understanding, your command tells the OS to dynamically load the qcserial driver, right? I get the following output:

ModemManager[14382]: <dbg> [1765357892.971594] [ttyUSB0/probe] no QCDM/QMI/MBIM probing in possible AT port
ModemManager[14382]: <dbg> [1765357892.971644] [ttyUSB0/probe] port is not QCDM-capable
ModemManager[14382]: <dbg> [1765357892.971687] [ttyUSB0/probe] port is not QMI-capable
ModemManager[14382]: <dbg> [1765357892.971727] [ttyUSB0/probe] port is not MBIM-capable
ModemManager[14382]: <dbg> [1765357892.971774] [ttyUSB0/probe] launching port probing: 'at, at-vendor, at-product'

I am not even sure if this is supposed to work when bridging the CoM and the modem with a USB-to-serial converter. Still, do you know if it is possible to enforce this driver via udev rules or something similar?

In the meantime I’ll try to diagnose the UART communication issues.

Best,

Tom

Hi Tom,

You are definitely beyond my understanding of this setup now. At the risk of pointing a finger at someone else, have you contacted Cinteriion support? They will have better understanding.

Drew

Ok, thanks for your support.