A bootloader is the first piece of software executed when a computer or embedded system is powered on. Its main task is to initiate the process of loading the operating system into memory and to prepare hardware components for operation. Although a bootloader functions in both general-purpose computers and embedded systems, its operation differs depending on the architecture. In Linux-based embedded systems in particular, the bootloader must be installed and configured by the user.
General Definition and Function
The bootloader is a small program executed during the startup process of a computer by the BIOS, enabling the operating system to be loaded into RAM. It is usually stored in the first sector of bootable devices (MBR – Master Boot Record). The BIOS reads this sector to initiate the bootloader. In some systems, a two-stage structure is used: a primary bootloader that merely initiates the more advanced secondary bootloader.
In embedded systems where no BIOS exists, the bootloader directly undertakes the initialization process. In these systems, the bootloader initializes not only the operating system but also hardware components.
Bootloader Process in Embedded Systems
In embedded systems, the bootloader carries out all the initial configurations required for the operating system to run. These systems commonly use ARM architectures. The bootloader process typically consists of the following steps:
- ROM Bootloader (RBL): Hardware-embedded in the CPU, it is the very first code executed when the system powers on.
- SPL (Secondary Program Loader): A small bootloader that runs in internal RAM and initializes basic peripherals (RAM, QSPI, etc.).
- U-Boot: Loaded into RAM by the SPL, it initializes more advanced peripherals (Ethernet, USB, etc.) and loads the Linux kernel image into RAM.
This process applies to boards such as the BeagleBone Black, which is based on TI’s AM335x processor. The setup of external RAM must be carried out by the SPL, as the RBL can only operate with fixed internal structures. Therefore, the SPL serves as an intermediate stage designed for the specific needs of the hardware.
U-Boot: A Common Bootloader in Embedded Systems
U-Boot (Universal Bootloader) is an open-source bootloader widely used in embedded systems. Developed by Denx, it supports multiple architectures such as ARM, MIPS, and x86, and has become the de facto standard for embedded Linux systems.
The core functions of U-Boot include:
- Initializing hardware components (UART, Ethernet, USB, etc.)
- Loading the Linux kernel or another OS image into RAM
- Loading kernel images from different file systems, QSPI Flash, or over the network
- Performing advanced tasks such as debugging, firmware updates, and error handling
Further information on U-Boot is available via the Denx Wiki.
Security and Advanced Features
In embedded systems, the bootloader is not only an initializer but also a security barrier. Modern bootloaders support advanced features such as:
- Update Interfaces: Allowing software updates and debugging via communication protocols such as UART, USB, and Ethernet.
- Security: Enforcing the execution of only authorized firmware files through digital signatures or encryption methods.
- Error Handling: Rejecting the loading of corrupted or unauthorized firmware, or triggering recovery mechanisms.
- OTA (Over-the-Air) Updates: Some bootloaders support remote and secure software updates.
These advanced features are critical in ensuring reliability and system integrity, particularly in domains such as automotive, IoT, and medical devices.

