Boot Flow
From BootROM to userspace, step by step
Boot Flow
This page walks through what happens between power-up and the login prompt. The timings come from real boot logs captured on 16/06/2024 (total ≈ 24 s cold boot).
1. BootROM
The Allwinner BootROM is the first thing to run. It looks for a valid SPL header on the SPI NAND (offset 0x0000). If the f1c200s BOOT button is held during reset, the BootROM enters FEL mode instead — the device then appears as a USB peripheral and the host can push code into RAM using sunxi-fel.
2. U-Boot SPL
The SPL is the first stage U-Boot loader. On this board it has to be specially formatted for SPI NAND, because the mainline SPL on the f1c200s does not natively support reading a second-stage payload from SPI NAND.
The mknandboot.sh script (in mds_external/board/mds_network_player/) splits and re-packs u-boot-with-spl.bin so that:
- The BootROM can read and execute the SPL.
- The SPL can locate
u-boot.binat the expected offset and load it.
Expected SPL output:
U-Boot SPL 2026.04
DRAM: 64 MiB
Trying to boot from sunxi SPI
spi0_nand_reset()
Found U-Boot image
load() success 0
spl_spi_try_load() success
3. U-Boot
U-Boot brings up the device, applies the saved environment and prepares to load the kernel.
U-Boot 2026.04 Allwinner Technology
CPU: Allwinner F Series (SUNIV)
Model: La Manufacture du Son - Network Streamer
DRAM: 64 MiB
The environment lives in mds_external/board/mds_network_player/uboot.env. It typically:
- Attaches the
fotaandrootfsUBI partitions. - Loads
/boot/uImagefrom the rootfs (or from the fota recovery if requested). - Loads the device tree
suniv-f1c200s-mds-network-streamer-v1.0.dtb. - Boots via
bootmusing a FIT image (image.its).
Why FIT? The plain
bootmcommand refused legacy kernel images on this U-Boot build (Wrong Image Type for bootm command). Switching to FIT made things work.
4. Kernel
The kernel boots with a command line like:
ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rootwait rw console=ttyS0,115200
Notable bring-up messages:
Booting Linux on physical CPU 0x0
Linux version 6.9.2 ... (Buildroot 2024.02.2 / musl)
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ)
OF: fdt: Machine model: MDS Network Streamer v1.0
spi-nand spi0.0: Winbond SPI NAND was found.
spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
4 fixed-partitions partitions found on MTD device spi0.0
0x000000000000-0x000000100000 : "boot"
0x000000100000-0x000001000000 : "fota"
0x000001000000-0x000004800000 : "rootfs"
0x000004800000-0x000008000000 : "data"
ALSA device list:
#0: On-board SPDIF
UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs"
VFS: Mounted root (ubifs filesystem) on device 0:15.
5. Userspace
The Buildroot rootfs uses BusyBox init. Once mounted:
g_etherexposes a USB Ethernet gadget at192.168.2.2.- The SPDIF ALSA device is available as
card 0. - Login is available over the serial console and over SSH on the USB Ethernet (user
root, passwordroot).
Common pitfalls
System reset not supported on this platformwhen runningresetin U-Boot — make sure the watchdog reset support is enabled in the U-Boot defconfig.Wrong Image Type for bootm command— switch to a FIT image (seeimage.its).LEB size mismatchwhen mounting a UBIFS image generated by Buildroot — see SPI NAND Partitioning for the exact LEB size that has to match.