meta-pantavisor just gained support for the Orange Pi i96 — the tiny RDA8810PL (ARM Cortex-A5) board in the 96Boards IoT Edition form factor. It joins the supported-machines list as 96boards-orangepi-i96, landed in pantavisor/meta-pantavisor#449.
A modern stack on abandoned silicon
The interesting part of this port is what it does not use. The official Orange Pi sources for this SoC — shared with the Orange Pi 2G-IOT — are OrangePiRDA_kernel, a Linux 3.10 tree, and OrangePiRDA_uboot, a 2012-era U-Boot. Both have been effectively frozen for years and no longer build with a current toolchain, and the old meta-96boards layer that wrapped them is abandoned. So the board now boots a modern stack instead:
- the vendor SPL (DDR and clock init) chain-loads a U-Boot 2024.01 stage-2,
- which boots linux-yocto 6.6 carrying an RDA8810PL patch series: clocks/resets, the IFC dmaengine, MMC, I²C, the combo power controller, the mdcom/msys blocks, machine restart, and the
rdawlanWiFi driver ported to cfg80211.
None of the official tree’s code ships in the image — the only vendor piece reused is the SPL blob that does DDR and clock init. The old trees still earned their keep during the bring-up, though: they are the register-level reference for this SoC, and the port’s WiFi driver was compared against the vendor’s line by line when chasing hardware quirks.
The BSP lives in its own layer, meta-orangepi-i96, which the KAS config fetches automatically — meta-pantavisor carries just the integration.
All of it is verified on hardware, on an image built from the merged commit: the board boots, mounts storage, brings up wlan0, associates with WPA2 and rejoins the network unattended after a reboot. Since the board has no WiFi MAC in NVRAM, the driver derives a stable one from the SD card’s CID — the address travels with the card.
Building and flashing
./kas-container build kas/build-configs/release/96boards-orangepi-i96-scarthgap.yaml
The bootloader is a hybrid (vendor SPL + modern U-Boot) that sits at a raw offset ahead of the partition table, so a helper assembles the flashable image from the deploy artifacts:
DEPLOY=<build>/tmp-scarthgap/deploy/images/orangepi-i96 \
BL=bootloader.rda \
OUT=orangepi-i96.img \
sh recipes-bsp/u-boot/files/mk-sd-image.sh
The board is also selectable from the Kconfig build menu, and CI builds it alongside the other machines on manual and release-tag workflows.
Things to know before you boot one
- The serial console runs at 921600 baud, not 115200 — the boot ROM prints at that rate, so a terminal at 115200 shows garbage or nothing. Conveniently, PVR 053 just added the flag for exactly this:
pvr device tty -d /dev/ttyUSB0 -b 921600. - There is no Ethernet — WiFi is the only network path. Provision it with
pvwificonnect-cli(bumped to v1.8.1 along the way, fixing five CLI provisioning defects), or withimprov-serialfor a device that has never been configured. - First boot is slow on purpose — Pantavisor verifies the SHA-256 of every object in the trail, which takes a few minutes on a single Cortex-A5 core. Later boots skip most of it.
- Two hardware features do not work: Bluetooth and WiFi AP mode. Both were reproduced on the vendor’s own Debian image with vendor tools, so neither is a gap in this port — the board guide and the BSP layer’s
MODEM-WIFI-PORT.mddocument the evidence in detail.
Get started
The full walkthrough — console, building, the SD image helper, WiFi provisioning and the known limitations — is in the board guide in the meta-pantavisor docs (docs/getting-started/how-to-install/boards/orangepi-i96.md), with the board row in the supported-devices table.
If you have one of these boards gathering dust in a drawer — this is a nice weekend to give it a second life. Questions welcome below!