A purpose-built ImmortalWRT distribution for the Banana Pi R3 Mini
Engineered around the Fibocom FM350 5G modem, with first-class modem management,
automatic APN detection, eSIM support, and an end-to-end CI pipeline.
BananaWRT is a specialised OpenWRT / ImmortalWRT distribution for the Banana Pi R3 Mini (MediaTek MT7986A), tailored around the Fibocom FM350 5G NR modem.
Where upstream ImmortalWRT stops, BananaWRT layers:
- Turn-key modem integration — autodetected APNs, ATC proto, eSIM/LPAC toolchain, SMS & band tools.
- Multi-version CI pipeline — several ImmortalWRT version lines build in parallel from the same code base.
- Reproducible on-device upgrades — the
bananawrt-updateFOTA flow serves signed builds fromrepo.superkali.me. - A single
./compile.shentry point — the same orchestrator runs locally and in CI, with caching fordl/,feeds/,ccacheandstaging_dir/.
| Component | Specification |
|---|---|
| SoC | MediaTek MT7986A (Filogic 830) — 4× ARM Cortex-A53 @ 2.0 GHz |
| RAM | 2 GB DDR4 |
| Storage | 8 GB eMMC · 128 MB SPI-NAND · M.2 Key-M for NVMe |
| Ethernet | 2× 2.5 GbE (Airoha EN8811H) |
| Wi-Fi | Wi-Fi 6 dual-band (MediaTek MT7976C, 574 / 2402 Mbps) |
| Expansion | M.2 Key-B USB 3.0 (5G) · M.2 Key-M PCIe 2.0 x2 (NVMe) |
| Power | 12 V 1.67 A USB-C PD |
Important
BananaWRT targets FM350 modems running firmware 81600.0000.00.29.23.xx or newer.
Firmware archive: share.superkali.me/s/7SxD8MpKYEigFKF.
AT commands are exposed on /dev/ttyUSB1 and /dev/ttyUSB3.
| Property | Value |
|---|---|
| Technology | 5G NR Sub-6 · LTE · WCDMA |
| Peak throughput | 4.67 Gbps DL / 1.25 Gbps UL |
| 5G bands | n1/2/3/7/25/28/30/38/40/41/48/66/77/78/79 |
| LTE bands | b1/2/3/4/7/25/30/32/34/38/39/40/41/42/43/48/66 |
| Interface | M.2 Key-B (USB 3.1 Gen 1 / PCIe Gen 3 x1) |
Three officially built variants ship today. Each one is an independent version line with its own config/, patches and CI caller, and every build publishes to repo.superkali.me:
| Channel | Upstream | Track | Cadence | Audience |
|---|---|---|---|---|
| Stable | immortalwrt/immortalwrt tag (currently 24.10.5) |
stable |
Monthly | Production deployments |
| Nightly | immortalwrt/immortalwrt tag (currently 25.12.0-rc2) |
nightly |
Weekly | Early testing of upcoming releases |
| MTK-vendor | SuperKali/immortalwrt-mt798x-rebase branch 25.12-linkup |
mtk-vendor |
Weekly | Devices that benefit from MediaTek proprietary Wi-Fi drivers + HNAT + USB offload |
Channel metadata lives in config/<version_line>/version.json. Adding a new channel is a matter of dropping a directory and a caller workflow — the reusable pipeline adapts.
Firmware and artefacts are hosted on repo.superkali.me, served via a standard autoindex plus a machine-readable firmware-index.json for the OTA client.
| Asset | URL |
|---|---|
| Firmware images | repo.superkali.me/bananawrt/firmware/ |
| Custom packages | repo.superkali.me/releases/ |
| Build SDKs | repo.superkali.me/bananawrt/sdk/ |
| Signing keys | repo.superkali.me/bananawrt/keys/ |
GitHub Releases carry the release notes; the binaries themselves live on repo.superkali.me to keep the GitHub archive slim.
- Pick a build that matches your board and channel under the firmware listing.
- Follow the official Banana Pi R3 Mini flashing procedure from the Banana Pi wiki. Pay attention to boot mode (eMMC vs SNAND) — BananaWRT artefacts follow the ImmortalWRT naming convention (
*-emmc-*,*-snand-*). - Connect to LuCI at
http://192.168.1.1, configure your root password, then insert the FM350 SIM and pick a profile.
# Interactive OTA (firmware + release notes)
bananawrt-update fota
# Custom-packages only (no reboot)
bananawrt-update packages
# Preview without touching the device
bananawrt-update fota --dry-runThe OTA client reads /etc/bananawrt_release, queries firmware-index.json, and lists:
- Upgrades within the current track;
- Builds of other tracks sharing the same version line;
- Cross-version upgrades (e.g.
v24.10 → v25.12-mtk-vendor), which require explicit confirmation and perform a factory reset.
EOL channels keep serving existing users until they migrate — the OTA client flags them prominently.
BananaWRT ships a single orchestrator, compile.sh, that drives both local and CI builds. Full details — pipeline stages, repository layout, version.json schema, coding guidelines — live in DEVELOPMENT.md.
./compile.sh # interactive dialog menu
./compile.sh --version-line v25.12 --track nightly # non-interactive
./compile.sh --help # full referenceContributions are welcome across the full stack:
- Bug reports — include kernel version,
/etc/bananawrt_release, reproduction steps. - Channel additions — drop
config/<new_line>/{track}/.config+ aversion.json+ a caller workflow. Seev25.12-mtk-vendoras a worked example. - Documentation — from improved user guides to architecture notes.
See DEVELOPMENT.md for the full developer guide. Please follow the existing commit message style (type(scope): subject) and keep each pull request focused on a single concern.
If BananaWRT saves you time, a ⭐️ on the repository helps more than you might think.
Milestone: at 200 ⭐️ the remaining premium BananaWRT packages are released publicly. Financial sponsorship is available via the Sponsor button at the top of the page — the star count is purely a way of recognising community interest.
BananaWRT is built on top of ImmortalWRT and inherits the licensing of each component (predominantly GPL-2.0). Original BananaWRT code (scripts, workflows, configs) is released under the MIT License unless otherwise noted in the file header.