megi's PinePhone Development Log RSS

2025–10–02: Luckfox Pico Mini

A year ago, I discovered a tiny, Linux-capable ARM SBC — the Luckfox Pico Mini, based on the Rockchip RV1103. The board measures just 28×21 mm, and the SoC features a single Cortex-A7 core @ 1.2 GHz and 64 MiB of RAM. There are two variants of the board: one with, and one without, 128 MiB of NAND flash. Both variants also include a microSD card slot and a selection of GPIOs:

The manufacturer provides a modified Rockchip BSP that supports the board. Using their SDK, it's relatively straightforward to build an image for it. However, as is often the case with Rockchip's offerings, the BSP is outdated and unmaintained — based on Linux kernel 5.10.110, which I'm generally not interested in.

Unfortunately, there’s no publicly available datasheet for the RV1103 or its larger sibling, the RV1106, making low-level programming for this SoC more difficult than with other, more open Rockchip chips. Furthermore, there's currently no support for RV1103 in mainline Linux or U-Boot.

That said, the RV1103 appears to follow Rockchip’s newer architecture (similar to the RK35×x series), and many of its peripheral blocks already have partial support in the mainline Linux kernel. This made adding minimal support relatively straightforward.

While it's possible to boot mainline Linux using the 7-year-old U-Boot version that Rockchip ships, I generally dislike U-Boot due to its complexity. Instead, I opted to write my own very minimal bootloader, which is just 8 KiB in size. It reuses the media access routines from the Rockchip boot ROM and includes a simple button/LED UI that allows selecting between three multi-boot options or a fourth option to enter USB mask ROM mode. It relies on three GPT partitions per boot option.

Surprisingly, even the 64 MiB version of the board can run (or crawl) Arch Linux ARM, provided that you enable some form of swap on the microSD card. However, a more practical setup is to run a static BusyBox build along with a few essential utilities — such as the Dropbear SSH server for “remote” access over the USB gadget Ethernet interface.

Boot time is around 3 seconds to a fully configured, interactive system over USB. This makes the board a great choice for creating small USB Linux devices, leveraging the Linux USB gadget stack. I'm considering using it as a lightweight security device — for example, a FIDO2 authenticator, secret key storage, or a custom CA certificate generator. It's cheap, has sufficient storage for such tasks, and runs a standard Linux stack, providing access to a wide range of libraries and tools.

The software stack for the board can be kept extremely simple and clean: a mainline Linux kernel with a few small patches, a minimalist bootloader, and any headless ARMv7 userland that works within the 64 MiB RAM constraint. With these components, everything the board offers — except the camera interface and video encoders — is already working.

There's also new Lyra line of similar tiny SBCs with more cores and more RAM, which I also tried adding support for, but have not tested, yet.

I'll likely publish my bootloader code, after a few cleanups, once I get back to playing with this board. :) The fun thing about the bootloader is that because it uses boot ROM's own routines for storage access, and Rockchip bootrom is fairly similar across all Rockchip SoCs, it should be fairly easily portable across all Rockchip SoCs. It's also quite feature-less, on the other hand, but that simplicity can be a feature itself.

Combined with Rockchip boot ROM security features, it could maybe one day make for a very easy to review secure bootloader for Linux, for this tiny SBC. The SoC has a cryptograhic accelerator, so calculating hashes and verifying signatures can be implemented by special HW blocks, and SW can focus on being small, reviewable, and valid.