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 modemmanageron 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
- PCIe runtime PM kills the modem. On this hardware, when the PCIe link enters D3hot the RM520N firmware crashes with
CmpltTOerrors and an AER cascade. Only a host reboot recovers it. Workaround applied:pcie_port_pm=offin the kernel cmdline. Without this, the modem dies within minutes. - ModemManager grabs every
ttyUSB. ModemManager upstream auto-claims any tty that looks like a modem AT port, which means you can't run your ownAT+QGMRfrom/dev/ttyUSB2— MM is already there. I’ve patched the MM tty hotplug script to honour
/etc/modemmanager/ignore-ttyso 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