Vanilla OpenWrt 25.12 on GL-X3000 (Spitz AX) with RM520N 5G working via MHI + ModemManager

Hi all,

Sharing a working vanilla OpenWrt 25.12 build for the GL-X3000 (Spitz AX). Linux kernel 6.12.79, no GL.iNet patches, with the Quectel RM520N-GL 5G modem working end-to-end. Posting in case anyone else wants off the stock GL.inet image.

What works

  • 5G modem over MHI + ModemManager (proto modemmanager on the WAN
    interface). No QMI, no umbim watchdog, no carrier-aggregation hacks — just the upstream MM stack against /dev/wwan0mbim0 +/dev/wwan0at0.
  • WiFi (mt7916), wired LAN/switch.
  • The four signal-bar LEDs on the front panel, driven off PCC/SCC NR-RSRP from the modem, using a custom daemon I developed.
  • Telegraf metrics push, WiFi per-station collector, the usual LuCI bundle (attended-sysupgrade, package-manager, etc.).
  • adb + fastboot baked into the firmware.

How to flash

Use the precompiled image I’m using myself if you trust me: Release Jeeves r1 — OpenWrt 25.12 for GL-X3000 with working RM520N · vjt/openwrt-glinet-x3000 · GitHub - otherwise feel free to clone the repo and follow the instructions on how to prepare and build.

If you build it yourself, use the sysupgrade image via the stock U-Boot web recovery (power off, hold reset, plug in, browse to 192.168.1.1). Replacing the stock bootloader with OpenWrt U-Boot is not required - the build runs fine on the stock BL2 + FIP. Only do it if you want serial console + TFTP recovery. Back up your stock preloade andfip partitions over SSH before touching them either way.

The two things that took the longest to figure out

  1. PCIe runtime PM kills the modem. On this hardware, when the PCIe link enters D3hot the RM520N firmware crashes with CmpltTO errors and an AER cascade. Only a host reboot recovers it. Workaround applied: pcie_port_pm=off in the kernel cmdline. Without this, the modem dies within minutes.
  2. ModemManager grabs every ttyUSB. ModemManager upstream auto-claims any tty that looks like a modem AT port, which means you can't run your own AT+QGMR from /dev/ttyUSB2 — MM is already there. I’ve patched the MM tty hotplug script to honour
    /etc/modemmanager/ignore-tty so a per-host allow-list keeps those ttys free for ad-hoc tooling.

What’s missing?

The main thing missing from this build vs stock is the GL.iNet web UI - replaced with plain LuCI. After switching, I see no change in throughput or radio signal telemetry. Everything works as before, but I can now customize this machine as I please :-).

Happy to answer questions / take patches / blames / insults (lol).

Cheers,
~vjt

2 Likes

Hi,

Thank you for sharing your customized vanilla OpenWRT firmware, along with the notes and considerations for others who may compile or use vanilla OpenWRT.

This will be very helpful for others using vanilla OpenWRT.

Thank you @will.qiu and GL.inet for allowing your users to tinker :-). For me being able to run vanilla is very important, and one of the main drivers to get an X3000 :-).

Cheers!

1 Like