Buildroot builder for an initramfs-only ARM64 image that runs the flipperos-installer — the on-device installer for Rockchip RK3576 (Flipper One) boards.
The build produces a standalone initramfs archive in two forms:
output/images/rootfs.cpio— uncompressedoutput/images/rootfs.cpio.zst— zstd-compressed (kernel must supportCONFIG_RD_ZSTD)
There is no kernel and no bootloader here — just the initramfs the kernel unpacks and runs.
This repository is a Buildroot BR2_EXTERNAL tree (external.desc name:
FLIPPEROS) with Buildroot itself vendored as a submodule:
.
├── Makefile # out-of-tree wrapper around the submodule
├── external.desc / Config.in / external.mk
├── configs/
│ └── flipperos_installer_defconfig
├── package/
│ └── flipperos-installer/ # the installer package (cargo-package)
│ ├── Config.in
│ └── flipperos-installer.mk
├── board/flipperos/
│ └── rootfs-overlay/
│ ├── etc/inittab # BusyBox init: mounts, rcS/udev, run installer
│ └── usr/bin/flipperos-installer-launch # ctty + frontend select + exec
└── buildroot/ # submodule, pinned at release 2026.05.1
A normal Buildroot host: make, gcc, git, wget, cpio, bc, rsync,
unzip, plus network access (Buildroot downloads sources, and the installer's
Cargo dependencies are vendored at download time).
# One-time: fetch the Buildroot submodule (if cloned without --recurse-submodules)
git submodule update --init buildroot
# Configure (auto-loads the defconfig) and build the initramfs
make
# Images:
ls output/images/ # rootfs.cpio rootfs.cpio.zstThe toplevel Makefile forwards every target to the pinned Buildroot submodule,
building out-of-tree into ./output with this directory attached as
BR2_EXTERNAL. So any Buildroot target works:
make menuconfig # tweak the config
make savedefconfig # write changes back to configs/
make flipperos-installer-rebuild # rebuild just the installer
make clean # clean the output/build tree
make distclean # remove ./output entirely
make O=/tmp/build # override the output directory| Component | Provided by | Why |
|---|---|---|
flipperos-installer |
package/flipperos-installer (Cargo) |
the installer, default tui + gui features |
| BusyBox | BR2_PACKAGE_BUSYBOX |
shell + core applets used by /init |
| libinput, libxkbcommon, fontconfig, freetype | selected by the package | GUI (Slint / LinuxKMS, software renderer) link deps |
| eudev (libudev) | BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV |
/dev management + input hotplug for the GUI |
| btrfs-progs | selected by the package | mkfs.btrfs |
| parted | selected by the package | partprobe |
| util-linux (basic set) | selected by the package | blkdiscard (mount/umount/chroot come from BusyBox) |
The GUI uses Slint's software renderer with the backend-linuxkms-noseat
backend, so no Mesa/OpenGL or libdrm-dev stack is required at link time.
The image uses BusyBox init (BR2_INIT_BUSYBOX). For an initramfs Buildroot
installs a pre-init /init that mounts devtmpfs and execs /sbin/init. BusyBox
init then reads our /etc/inittab (from the overlay): it mounts
proc/sys/devpts, runs rcS (which starts udevd and coldplugs devices),
then respawns flipperos-installer-launch on the console.
The launcher (usr/bin/flipperos-installer-launch in the overlay):
- resolves the real console device from
/sys/class/tty/console/active(/dev/consoleitself cannot be a controlling terminal) and binds the installer's stdio to it, so the TUI gets a working/dev/tty; - picks the frontend from the kernel command line —
installer=both(default),tui,gui, orshell(drop to a prompt); - runs
flipperos-installer --no-dry-run. Because the inittab entry isrespawn, init restarts the installer if it exits.
Note: the installer runs with
--no-dry-run, i.e. it performs a real, destructive install on boot. Edit the launcher if you want a dry-run image.If the on-device display has no configured KMS pipeline (kernel logs
rockchip-drm … Cannot find any crtc), the GUI cannot start — boot withinstaller=tuito use the serial console until the display is fixed.
- Buildroot: git submodule pinned at release 2026.05.1
(
https://github.com/buildroot/buildroot.git). To move to another release:cd buildroot && git fetch --tags && git checkout <tag>, then commit the updated submodule pointer. - flipperos-installer: tracks the upstream
devbranch (FLIPPEROS_INSTALLER_VERSION = dev), with itsflipctl-fontssubmodule fetched automatically (_GIT_SUBMODULES = YES).
- Building a single frontend: set
FLIPPEROS_INSTALLER_CARGO_INSTALL_OPTS = --no-default-features --features tuiin the package.mk(e.g. for a slim serial-only image). - Toolchain: Buildroot 2026.05.1 ships Rust 1.96.1 (
host-rust-binby default), which satisfies the installer's rustc 1.95 / GUI MSRV 1.92. If you bump the installer to a newer MSRV, move the Buildroot pin forward for a newerhost-rustc.