There are many ways to boot a system after applying the operating voltage. The importance of a boot loader for the system's behaviour, but even more for the user's first impression of a system, is very often heavily underestimated.
Not only has the boot loader the purpose of initializing the hardware correctly and preparing the entire system for the start of the operating system. It also is, and this is often not recognized, an essential part of an update concept for the entire system. In addition, the boot loader is supposed to take care of many other requirements. From the start-up screen to monitoring interfaces to ... whatever users can think of. And it is a core component when it comes to boot time.
Many of these requirements can be solved with well-known bootloaders like Uboot, Redboot or others. We know the above-mentioned "common" boot loaders and also use them repeatedly in customer projects. And, of course, we adapt these bootloaders to your project and your requirements.
However, in order to meet the increased demands on the capabilities of a boot loader, the tasks it has to solve and other requirements such as boot time, we rely on a concept of Initial Program Loader (IPL) and a "mini" Linux kernel, i.e. the boot loader is kept as tiny as possible while a large part of the required logic is outsourced to the operating system.
This approach offers two advantages:
Today's embedded devices are complex in many ways. Complex in terms of their own capabilities, but also in terms of communication with their environments. And there are more and more requirements in the context of IoT (Industry 4.0).
The topic of boot time is becoming increasingly important. Very often, this topic comes up when switching from a microcontroller to a newer SOC. Because then you realise that the new controller is significantly more powerful, but the boot time has deteriorated considerably (because an operating system is required).