Hi everyone,
I've been working on an OpenWrt port for the Netgear Orbi RBR50 V2, the cost-reduced NAND variant of the RBR50. This is (to my knowledge) the first-ever OpenWrt installation on V2 hardware. Everything is fully working β persistent squashfs + UBI overlay, all three WiFi radios, Ethernet, LEDs, and sysupgrade.
The code and pre-built images are available on GitHub: https://github.com/minkkisa/openwrt-rbr50v2
Hardware
| Feature | Specification |
|---|---|
| SoC | Qualcomm IPQ4019 (4Γ ARM Cortex-A7) |
| RAM | 512 MB DDR3L |
| Flash | 512 MB SPI NAND (Macronix MX30LF4G18AC) |
| WiFi 2.4 GHz | IPQ4019 integrated (2Γ2 MIMO, ath10k-ct) |
| WiFi 5 GHz (low) | IPQ4019 integrated (2Γ2 MIMO, ath10k-ct) |
| WiFi 5 GHz (high) | QCA9984 PCIe (4Γ4 MIMO, VHT80/160, backhaul) |
| Ethernet | QCA8075 5-port GbE switch (WAN + 3Γ LAN, DSA) |
| LEDs | GPIO 22β27 + TLC59208F I2C ring LED controller |
| USB / Bluetooth | None (removed in V2) |
OpenWrt build info
- Target:
ipq40xx/generic - Version: SNAPSHOT r0-17784ad
- Kernel: 6.12.77
Key differences from the officially supported RBR50 V1
- 512 MB SPI NAND instead of 4 GB eMMC
- LED GPIOs relocated (22β27 vs. V1's 53/54/57/60/63/64)
- I2C SDA/SCL on GPIO 20/21 (V1 uses 58/59, which are QPIC NAND bus on V2)
- No USB, no Bluetooth
- Different NETGEAR_HW_ID:
29765913(V1:29765352)
Critical discovery: fdt_high=0x87000000
This was the key to getting OpenWrt to boot on this device, and it took quite some debugging to find.
DNI's modified U-Boot (based on 2012.07) performs a 128 KB NAND read after bootm. If the device tree happens to be loaded above address 0x87000000, this read silently overwrites the FDT in memory. The result is a kernel crash with absolutely no output after Starting kernel... β making it very hard to diagnose.
The fix is a one-time U-Boot environment variable:
setenv fdt_high 0x87000000
saveenv
Without this, no modern kernel (including the official V1 OpenWrt image) will boot on V2 hardware.
What works
- Persistent installation (squashfs root + UBIFS overlay, ~23 MB writable)
- Ethernet: WAN + 3Γ LAN via QCA8075 DSA switch, 1 Gbps
- WiFi: All 3 radios β AP mode and monitor mode tested
- WiFi DFS: Radar detection working on QCA9984 (ETSI, country FI)
- PCIe: QCA9984 detected and working (Gen.2 x1)
- NAND: 24 partitions, MTD + UBI
- sysupgrade:
nand_do_upgrade, tested initramfs β squashfs - LEDs: GPIO direct + TLC59208F I2C ring LED (via
kmod-leds-tlc591xx) - Board detection: LAN/WAN and LED auto-configuration
- MAC addresses: Read from
boarddata1NAND partition - Tailscale VPN: tested with static ARM binary, userspace networking mode β works well for remote management
Tri-band simultaneous monitor mode
One notable capability of this device: all three radios can run in monitor mode simultaneously, covering the full 2.4 GHz + 5 GHz low + 5 GHz DFS spectrum. I've tested this for 10+ hours continuously with airodump-ng β completely stable, ~115 MB RAM used out of 506 MB, CPU load around 1.5 on 4 cores.
This kind of tri-band concurrent monitoring is uncommon in consumer hardware running OpenWrt.
WiFi radio details
| Radio | Band | Channels | Capabilities |
|---|---|---|---|
| phy0 (QCA9984, PCIe) | 5 GHz high | 100β140 (DFS) | VHT80, VHT160, 80+80, 4Γ4 MIMO |
| phy1 (IPQ4019) | 2.4 GHz | 1β13 | HT20/HT40, 2Γ2 MIMO |
| phy2 (IPQ4019) | 5 GHz low | 36β64 | VHT80, 2Γ2 MIMO |
Installation (requires UART β no alternative)
A USB-UART adapter (3.3V TTL) is mandatory for the first-time installation.
There is no way around this: the fdt_high U-Boot environment variable and a modified bootcmd must be set via the U-Boot console before any OpenWrt kernel will boot. The stock bootcmd uses DNI's load_chk_dniimg which rejects non-Netgear images, and fw_setenv is not available from stock Linux. NMRP recovery alone is not sufficient.
After the one-time U-Boot setup, subsequent upgrades work normally via sysupgrade (no UART needed).
- Connect USB-UART adapter to J01 header (115200 8N1, 3.3V TTL)
- Stop U-Boot autoboot, set
fdt_high=0x87000000andsaveenv - TFTP boot the initramfs image
- Run
sysupgradewith the squashfs image for persistent installation
Full installation guide and pre-built images are in the GitHub repo.
Files for upstream
- New:
target/linux/ipq40xx/dts/qcom-ipq4019-rbr50v2.dts - Modified:
target/linux/ipq40xx/image/generic.mkβ Device/netgear_rbr50v2 - Modified:
target/linux/ipq40xx/base-files/lib/upgrade/platform.shβ nand_do_upgrade - Modified:
target/linux/ipq40xx/base-files/etc/board.d/02_networkβ LAN/WAN config - Modified:
target/linux/ipq40xx/base-files/etc/board.d/01_ledsβ power LED default
I'm planning to submit a PR to the openwrt/openwrt repository. Any feedback on the DTS, build definitions, or the approach in general would be very welcome before I do that.
Thanks!