Raspberry Pi Boot
Mechanism Overview
Understanding booting blobs between U-Boot and Linux
Masafumi Ohta
Japanese Raspberry Pi Users Group
(by ChatGPT)
Raspberry Pi Boot Stages (Pi 4/5)
• 1. ROM Code (SoC): Starts on GPU, loads EEPROM or
bootcode.bin
• 2. bootcode.bin / EEPROM: Initializes RAM and loads
firmware
• 3. start4.elf: GPU firmware loads config.txt and next file
• 4. u-boot.bin or kernel8.img: Either U-Boot or Linux directly
• 5. U-Boot (optional): Loads kernel, DTB, and initramfs
• 6. Linux Kernel: Takes over and starts init process
U-Boot to Linux Transition
• config.txt sets kernel=u-boot.bin
• U-Boot loads Image, *.dtb, and initramfs
• Executes booti or bootm to start Linux
• Passes control with memory addresses
Booting Blobs of Interest
• start4.elf: GPU firmware (proprietary)
• u-boot.bin: ARM64 bootloader
• Image: Linux kernel binary
• *.dtb: Device Tree Blob
• initramfs: Optional initial RAM filesystem
Sample config.txt and U-Boot Script
• [config.txt]
• enable_uart=1
• kernel=u-boot.bin
• arm_64bit=1
• [U-Boot script]
• load mmc 0:1 0x80000 Image
• load mmc 0:1 0x200000 *.dtb
• booti 0x80000 - 0x200000
Tools to Analyze Boot Components
• dtc: Compile/decompile device trees
• file: Detect binary formats
• readelf, objdump: Inspect kernel/U-Boot
• hexdump, xxd: View hex contents
• strings: Extract readable text from binaries

Raspberry Pi Boot Mechanism at OSC Nagoya 2025

  • 1.
    Raspberry Pi Boot MechanismOverview Understanding booting blobs between U-Boot and Linux Masafumi Ohta Japanese Raspberry Pi Users Group (by ChatGPT)
  • 2.
    Raspberry Pi BootStages (Pi 4/5) • 1. ROM Code (SoC): Starts on GPU, loads EEPROM or bootcode.bin • 2. bootcode.bin / EEPROM: Initializes RAM and loads firmware • 3. start4.elf: GPU firmware loads config.txt and next file • 4. u-boot.bin or kernel8.img: Either U-Boot or Linux directly • 5. U-Boot (optional): Loads kernel, DTB, and initramfs • 6. Linux Kernel: Takes over and starts init process
  • 3.
    U-Boot to LinuxTransition • config.txt sets kernel=u-boot.bin • U-Boot loads Image, *.dtb, and initramfs • Executes booti or bootm to start Linux • Passes control with memory addresses
  • 4.
    Booting Blobs ofInterest • start4.elf: GPU firmware (proprietary) • u-boot.bin: ARM64 bootloader • Image: Linux kernel binary • *.dtb: Device Tree Blob • initramfs: Optional initial RAM filesystem
  • 5.
    Sample config.txt andU-Boot Script • [config.txt] • enable_uart=1 • kernel=u-boot.bin • arm_64bit=1 • [U-Boot script] • load mmc 0:1 0x80000 Image • load mmc 0:1 0x200000 *.dtb • booti 0x80000 - 0x200000
  • 6.
    Tools to AnalyzeBoot Components • dtc: Compile/decompile device trees • file: Detect binary formats • readelf, objdump: Inspect kernel/U-Boot • hexdump, xxd: View hex contents • strings: Extract readable text from binaries