Raspberry Pi Boot Process & Configuration
The Raspberry Pi boot process is unique compared to traditional x86 systems. It starts with the GPU initializing the system before the ARM CPU is brought online.
Boot Sequence Overview
- System-on-Chip (SoC) BROM: Hard-coded bootloader in the SoC reads from the SD card.
bootcode.bin: (RPi 1/2/3 only) Initializes SDRAM and loads the GPU firmware. Note: RPi 4/5 uses an on-board EEPROM instead.start.elf: The GPU firmware. It readsconfig.txtand loads the ARM kernel into RAM.kernel.img: The ARM CPU starts executing the kernel code.
Kernel Naming Conventions
The bootloader looks for specific kernel filenames depending on the Raspberry Pi model:
| Model | Default Kernel Filename |
|---|---|
| RPi 1 (A/B/B+) & Zero | kernel.img |
| RPi 2 (B) | kernel7.img |
| RPi 3 (B/B+) | kernel8.img (64-bit) or kernel7l.img (32-bit LPM) |
| RPi 4 | kernel8.img (64-bit) or kernel7l.img (32-bit) |
Conditional Configuration (config.txt)
You can use filters in config.txt to apply settings to specific models or based on hardware conditions.
[pi4]
# Settings specific to Raspberry Pi 4
arm_boost=1
[all]
# Settings for all models
disable_splash=1
Example: Alpine Linux config.txt
Alpine Linux often uses specific kernel and initramfs paths defined in config.txt:
disable_splash=1
boot_delay=0
gpu_mem=256
[pi0]
kernel=boot/vmlinuz-rpi
initramfs boot/initramfs-rpi
[pi3+]
kernel=boot/vmlinuz-rpi2
initramfs boot/initramfs-rpi2
[all]
include usercfg.txt