Boot process
The board starts Linux through ROM, SPL, OpenSBI, and U-Boot. This page explains what each stage does and which files to inspect when boot stops early.
1. ROM and SPL
The on-chip ROM starts after reset. It can accept firmware through the download connection or load SPL from flash.
out/images/spl_app.bin contains SPL in the image format expected by ROM. SPL
initializes the hardware needed for boot and loads the U-Boot FIT image,
out/images/u-boot.itb. The 48 KiB SPL slot starts at raw 0x002000, after the
mandatory 8 KiB FlashEncryption reservation. The FIT starts immediately after
SPL at raw 0x00E000.
2. OpenSBI and U-Boot
SPL enters OpenSBI in machine mode and supplies the address of U-Boot proper. OpenSBI initializes its platform services and starts U-Boot in supervisor mode. It remains available to handle Linux SBI calls after boot.
Boot maps all 16 MiB of raw flash linearly at physical 0x40000000.
The mapped FIT address is 0x4000E000, with the OpenSBI XIP payload at
0x4000E400.
U-Boot starts the kernel with the Linux device tree. The default boot command uses these mapped addresses:
booti 0x40400000 - 0x4005E000
The first address is the kernel and the second is the device tree. The kernel start is aligned to a 4 MiB Sv32 megapage boundary. Preserve that alignment when modifying the XIP layout. Flashing uses the raw offsets listed in Flash layout.
3. Linux and the root filesystem
Linux initializes memory, interrupts, timers, and device drivers, then starts
/init from the root filesystem.
The early init script mounts the persistent JFFS2 partition and combines it with the SquashFS base using OverlayFS. It then restores saved device-tree overlays, loads the selected radio mode, and starts BusyBox init.
If the persistent filesystem fails to mount, the script prints an error and
continues in recovery with the read-only base system. Recovery prepares
volatile /run, /tmp, and /var/log; persistent settings are unavailable.
The early overlay-restore and radio-load steps are skipped on this path.
See Debugging for the checks to run in that case.
4. Services and serial login
BusyBox starts the board services and the serial login. Services run through
rcS, and their output is saved in /run/rcS.log. The login prompt may appear
while those services are still starting.
cat /run/rcS.log
test -e /run/rcS.done && cat /run/rcS.status
Boot files
File |
Stage |
|---|---|
|
ROM-loadable SPL |
|
OpenSBI and U-Boot |
|
Linux hardware description |
|
Linux kernel |
|
Early init, BusyBox, applications, and the Linux radio module |
|
Prelinked flash-XIP radio payload matched to the kernel/module |
For flashing commands, see Flash and first boot.