Welcome to our first article in the Embedded Linux Development Series from Mpiric Software. Embedded Linux development is a robust and extraordinarily flexible area of application and is the foundation of many consumer and technical customer devices-from the smart router in your home to the sophisticated infotainment centre in your automobile.
At Mpiric we know that having a solid base to build on is integral in mastering the technology. In this first article we will take apart the concept of Embedded Linux Development, look at its basic architecture and ease you into understanding the technology.
The Essence of Embedded Linux Development
To start, Embedded Linux Development refers to the specialized process of implementing and utilizing the Linux operating system for embedded systems. An embedded system is a computer in an electrical or mechanical system that is assigned a dedicated purpose. Compared to the generalized Linux distributions you might use on your desktop or servers, an embedded Linux system is designed and built for a sole purpose and specific hardware.
It is a version of Linux that runs “light,” specific to only doing the task at hand, in as efficient way possible under limited resource restrictions on memory, storage, and processing power. Embedded Linux Development strives to implement the smallest operating system that is reliably predictable to only do one thing.

Why is Embedded Linux Development So Popular?
Open-source and cost-effective: The open-source nature of the Linux Kernel means you have no licensing fees. This dramatically decreases the cost of a product, making Embedded Linux Development appealing to both small and large applications.
Flexibility and customization: Developers have a lot of flexibility and control over the whole system. Developers can choose only the components and drivers that they actually need, allowing the system to be as customized and small as possible. This is an enormous benefit to Embedded Linux Development and is something Mpiric Software takes advantage of for their clients.
Rich Ecosystem and Community: The Linux ecosystem is extensive and mature. Many drivers, tools, and software libraries exist that accelerate development tremendously. In addition, there is a large online community that is very supportive of Embedded Linux Development.

Stability and Security: The Linux kernel is well-known for its stability and robustness. Its open-source code is reviewed and audited continually by a worldwide network of developers which leads to ongoing security patches and a more secure product in the end. Focus on security is an important aspect of Embedded Linux Development for Mpiric Software.
Broad Hardware Support: The kernel is built to run on many different CPU architectures, ARM and MIPS for example.
The Pillars of Embedded Linux: A Deep Dive into Architecture

The Bootloader: The System’s First Breath
The bootloader is the first software that executes when an embedded system gets powered up. The bootloader needs to carry out some important operations in order to prepare the system to run. This includes hardware initialization, memory set up, and most importantly, loading the Linux kernel and transmitting the accompanying root filesystem into memory.
U-Boot (Universal Bootloader) is a widely-accepted open-source bootloader for Embedded Linux Development. U-Boot is very flexible and works with a wide range of hardware.
The Linux Kernel: The Central Brain

The root filesystem is the set of files and directories that the kernel needs to load. In the case of Embedded Linux Development, the filesystem is very minimal. It will contain the libraries, executables, and configuration files that are necessary for the device to carry out its specific task.
A very popular way to create a compact root filesystem is with BusyBox, which bundles lots of common Linux commands into a single executable, allowing for significant savings in space.
Putting it All Together: User Space
The last layer is the user space, which is on top of the kernel and the root filesystem. This is where all of the applications and services that define the purpose of the device exist. For example, in the case of a router, the user space would have the networking applications, and in the case of a smart display, it would have the graphical user interface.
The entire cycle of Embedded Linux Development leads to the successful operation of the user space applications on the target hardware.
Frequently Asked Questions (FAQ)
Q1: What is the major difference between Embedded Linux and desktop Linux?
The major difference is purpose and size. Desktop Linux is general-purpose; it’s an operating system designed for a wide variety of tasks and has a large footprint. Embedded Linux is a purpose-built, highly-customized, and stripped-down version of the OS, developed for specific hardware and one single dedicated function, which has typically limited resources.
Q2: Why is the Linux kernel so popular for embedded systems?
It’s popular because it’s open-source (no licensing fees), highly customizable, stable, and secure. There are a large number of existing drivers and tools in the ecosystem, which can really shorten the development time.
Q3: What is the bootloader’s role in an embedded system?
The bootloader is the first piece of software that will run when the device is powered on. Its job is to initialize the hardware, configure the system memory, and load both the Linux kernel and root filesystem into memory, in order to start the operating system.
Q4: Is Embedded Linux an RTOS?
By default, standard Linux is not a real-time operating system. While it is exceedingly stable, it doesn’t guarantee that a task will finish at a precise and predictable time. For applications that need strict real-time performance (for example, industrial robotics) developers will have to use kernel-specific patches; such as the PREEMPT_RT.
Q5: What is the root filesystem, and why is it so small in Embedded Linux?
The root filesystem is the group of files and directories the kernel requires to run. It is kept small because it minimizes the size of the footprint system, memory and storage usage, boot time, etc. The root filesystem only contains the libraries and applications that are necessary for the device’s specific purpose.