lpac-build

July 26, 2026 · View on GitHub

OpenWrt packaging + CI for our patched lpac (2.3.x + AT-driver robustness PRs + FM350 fixes), so eSIM works reliably on USB modems like the Fibocom FM350-GL via lpac's native AT driver.

What this builds

.apk (OpenWrt 25.12.5, apk-based) and .ipk (OpenWrt 24.10.7, opkg-based) for the main architectures where people run USB LTE/5G modems:

TargetArchTypical devices
mediatek/filogicaarch64_cortex-a53WH3000 & new WiFi6 routers with USB
rockchip/armv8aarch64NanoPi R2S/R4S/R5S
bcm27xx/bcm2711aarch64_cortex-a72Raspberry Pi 4
armsr/armv8aarch64_genericVMs / containers / generic ARM64
armsr/armv7armgeneric ARM32
ramips/mt7621mipsel_24kcXiaomi / GL.iNet / Netgear
ath79/genericmips_24kcolder MIPS routers with USB
x86/64x86_64mini-PC / VM routers

Source

The lpac source is pulled by git from fildunsky/lpac at tag v2.3.0-fm350 (estkme-group/lpac main + curated PRs #422/#443/#446/#447/#448/#449/#451/#452/#453

  • a LPAC_DRIVER_HOME loader patch). Change PKG_SOURCE_VERSION in openwrt/Makefile to build a different tag.

Packaging notes

2.3.x splits lpac into shared libs + dlopen'd driver plugins found via ELF RUNPATH, which OpenWrt strips. So: the loader honors LPAC_DRIVER_HOME, plugins ship under /usr/lib/lpac/driver/, libs under /usr/lib/, and the /usr/bin/lpac wrapper exports LPAC_DRIVER_HOME=/usr/lib/lpac.

APDU backends

  • 25.12.5 (.apk): AT + QMI + UQMI + MBIM + stdio

  • 24.10.7 (.ipk): AT + UQMI + MBIM + stdio (native QMI off — see below)

  • AT — modems that expose AT+CCHO/CGLA on a serial port (Fibocom FM350-GL, etc.).

  • QMI — native QMI eUICC access via libqmi (through qmi-proxy, shares the channel with the data session). Qualcomm SDX55 modems in a QMI composition.

  • UQMI — QMI eUICC access via the uqmi CLI (no glib dep). Fallback / covers SDX55 (Foxconn T99W175 / Thales MV31-W / Dell DW5930e) where libqmi is unavailable.

  • MBIM — native MBIM eUICC access via libmbim (through mbim-proxy). For modems running an MBIM composition.

  • stdio — the app's own APDU bridge over stdio.

glib2 / native QMI+MBIM note. libqmi/libmbim pull in glib2, whose meson build in the OpenWrt SDK used to leak host zlib/pcre2 (-I/usr/include, host libz.a in the target). The fix is to install glib2's target deps as feed packages (feeds install libqmi libmbim pulls them). With that, native QMI+MBIM cross-build cleanly on 25.12. 24.10 keeps native QMI OFF: its libqmi is 1.34.0 but lpac's driver needs qmi-glib >= 1.35.5; UQMI (the uqmi CLI, no libqmi) still covers SDX55 there. MBIM has no such version floor and builds on both.

Build

Push a v* tag (or run the workflow manually) — GitHub Actions builds every target for both releases and, on a tag, publishes a Release with all .apk / .ipk files.

Install on the router:

  • OpenWrt 25.12.x: apk add --allow-untrusted lpac-*.apk
  • OpenWrt 24.10.x: opkg install lpac-*.ipk