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:
- 1× SPI
- 6× PWM
- 3× UART
- 1× I²C
- 2× 12-bit ADC (one shared with an onboard button)
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.