Skip to main content

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

  1. System-on-Chip (SoC) BROM: Hard-coded bootloader in the SoC reads from the SD card.
  2. bootcode.bin: (RPi 1/2/3 only) Initializes SDRAM and loads the GPU firmware. Note: RPi 4/5 uses an on-board EEPROM instead.
  3. start.elf: The GPU firmware. It reads config.txt and loads the ARM kernel into RAM.
  4. 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:

ModelDefault Kernel Filename
RPi 1 (A/B/B+) & Zerokernel.img
RPi 2 (B)kernel7.img
RPi 3 (B/B+)kernel8.img (64-bit) or kernel7l.img (32-bit LPM)
RPi 4kernel8.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

Resources