In embedded Linux systems, the boot loader is primarily used to initialize the hardware to the point where the kernel can be started.
In addition, the boot loader is also an important tool for the bring-up of new hardware: since the bootloader does not have any concurrency or interrupts, and provides direct access to hardware, it is also popular with hardware developers.
In modern systems, we use the freedesktop.org bootloader specification in Barebox to find the components of a Linux system to be booted (device tree, kernel, root file system). Systems with a redundancy boot concept and field upgrade support use the bootloader to determine which of the multiple images should be started.
Barebox also offers many security features, which are required for verified boot.