Have you ever imagined what happens when you press the Power ON button on your PC? How does the system boot after hitting the Power ON and all the components involved in the process? No? Let’s see this now!

Bootloaders are the first software to run when a device powers on. This piece of code is responsible for initializing hardware and loading the operating system (OS). On PCs, this is handled by BIOS/UEFI before loading bootloaders like GRUB. In embedded systems, U-Boot and BareBox are famous bootloaders for Linux systems.

Multi-Stage Boot Process

In embedded Linux systems, limited resources require a staged approach:

  1. Primary Loader (Boot ROM) – Minimal code in the SoC that configures basics (e.g., clocks) and locates the next stage on storage media. This code is present in ROM and only provided by vendor.
  2. Secondary Loader (SPL/FSBL/PBL) – A small piece of bootloader that can execute in the SRAM embedded on the chip. It initializes external dynamic RAM (DRAM) and other essential hardware so larger programs (such as main bootloader and kernel) can execute in DRAM. Often a stripped-down version of U-Boot or BareBox.
  3. Main Bootloader – Typically U-Boot or BareBox. The main purpose of any bootloader is to provide the means for loading kernel from multiple mediums such as eMMC, external SD cards, USB storage, and internet. It also provides options to check multiple mediums to find kernel without human intervention, making system loading reliable.

Bootloader Responsibilities

Bootloaders prepare the hardware (clocks, memory, peripherals), locate and load the kernel, and pass boot parameters (including the device tree) before handing off execution. They often support:

  • Interactive commands
  • Scripting
  • Recovery modes
  • Firmware updates
  • Secure boots

U-Boot: The Universal Bootloader

U-Boot is the most common bootloader for embedded Linux due to its:

  • Broad hardware support across architectures
  • Two-stage design (SPL + U-Boot proper) for systems with limited internal memory
  • Interactive shell, scripting, and rich peripheral/file system support
  • Configurable environment variables stored in non-volatile memory

Alternatives and Related Firmware

BareBox is a very common alternative of U-Boot in embedded systems due to its smaller footprint, two-stage design (pre-bootloader PBL and BareBox proper), and interactivity. It provides a Linux-like command shell and allows developers to run shell scripts in BareBox terminal, making development easier.

UEFI is used by newer NVIDIA Tegra Jetpack versions as a bootloader. Previous versions of Tegra Jetpack also used U-Boot-Tegra as bootloader. However, GRUB and EFI are

Powered By WordPress