VOOZH about

URL: https://thenewstack.io/the-major-components-of-an-embedded-linux-system/

⇱ The Major Components of an Embedded Linux System - The New Stack


TNS
SUBSCRIBE
Join our community of software engineering leaders and aspirational developers. Always stay in-the-know by getting the most important news and exclusive content delivered fresh to your inbox to learn more about at-scale software development.
REQUIRED
It seems that you've previously unsubscribed from our newsletter in the past. Click the button below to open the re-subscribe form in a new tab. When you're done, simply close that tab and continue with this form to complete your subscription.
The New Stack does not sell your information or share it with unaffiliated third parties. By continuing, you agree to our Terms of Use and Privacy Policy.
Welcome and thank you for joining The New Stack community!
Please answer a few simple questions to help us deliver the news and resources you are interested in.
REQUIRED
REQUIRED
REQUIRED
REQUIRED
REQUIRED
Great to meet you!
Tell us a bit about your job so we can cover the topics you find most relevant.
REQUIRED
REQUIRED
REQUIRED
REQUIRED
REQUIRED
Welcome!

We’re so glad you’re here. You can expect all the best TNS content to arrive Monday through Friday to keep you on top of the news and at the top of your game.

What’s next?

Check your inbox for a confirmation email where you can adjust your preferences and even join additional groups.

Follow TNS on your favorite social media networks.

Become a TNS follower on LinkedIn.

Check out the latest featured and trending stories while you wait for your first TNS newsletter.

PREV
1 of 2
NEXT
VOXPOP
As a JavaScript developer, what non-React tools do you use most often?
Angular
0%
Astro
0%
Svelte
0%
Vue.js
0%
Other
0%
I only use React
0%
I don't use JavaScript
0%
Thanks for your opinion! Subscribe below to get the final results, published exclusively in our TNS Update newsletter:
NEW! Try Stackie AI
From clobbered drafts to real-time sync
Apr 14th 2026 10:00am, by David Moore
TypeScript 6.0 RC arrives as a bridge to a faster future
Mar 14th 2026 9:00am, by Darryl K. Taft
Mastra empowers web devs to build AI agents in TypeScript
Jan 28th 2026 11:00am, by Loraine Lawson
2020-06-26 08:16:46
The Major Components of an Embedded Linux System
contributed,sponsor-linux-foundation-training,sponsored,sponsored-post-contributed,
Edge Computing / Linux / Open Source

The Major Components of an Embedded Linux System

This article provides an overview of the major components of a Linux system and describes the interactions between these components.
Jun 26th, 2020 8:16am by John Bonesio
👁 Featued image for: The Major Components of an Embedded Linux System
Feature image via Pixabay.
Linux Foundation Training sponsored this post.
This is part of a series on using Linux for embedded systems. For a list of other articles in this series, check out the introductory post.
John Bonesio
John is a Linux Instructor at The Linux Foundation.

This article provides an overview of the major components of a Linux system and describes the interactions between these components. It will explain terms and describe details that may seem very basic, as it doesn’t assume a lot of prior expertise.

Every Linux system has a number of major components. One of these components, the bootloader, is technically outside of Linux and often isn’t talked about. The rest of the components are all software elements that together create the full Linux system. These components are:

  • Bootloader
  • Kernel
  • Root filesystem
  • Services
  • Applications/Programs

Bootloader

When the computer is powered on, after performing some initial setup, it will load a bootloader into memory and run that code. (The term “boot” comes from the phrase “pick yourself up by your bootstraps.” It’s kind of a joke because you, of course, can’t pick yourself up by the bootstraps). The bootloader’s main job is to find the operating system’s binary program, load that binary into memory, and run the operating system. In our case, this is the Linux kernel.

The bootloader is done at this point, and all of its code and data in RAM are usually overwritten by the operating system. The bootloader won’t run again until the computer is reset or power cycled again.

The Linux Foundation is the world’s leading home for collaboration on open source software, hardware, standards, and data. Linux Foundation projects are critical to the world’s infrastructure including Linux, Kubernetes, Node.js, ONAP, Hyperledger Foundation, PyTorch, RISC-V, and more.
Learn More
The latest from Linux Foundation Training

The bootloader in embedded systems is different from a typical laptop, desktop or server computer. A typical PC usually boots into what we call the BIOS first and then runs Grub as the bootloader. Embedded Linux systems boot using Das-UBoot or U-Boot for short as the bootloader.

Kernel

Once the bootloader loads the Linux kernel into memory and runs it, the Kernel will begin running it’s startup code. This startup code will initialize the hardware, initialize system critical data structures, initialize the scheduler, initialize all the hardware drivers, initialize filesystem drivers, mount the first filesystem, and launch the first program, among other things.

The Linux kernel’s main job is to start applications and provide coordination among these applications (or programs, as they’re usually called in Linux). The Linux kernel doesn’t know about all programs that are supposed to run. So the Linux kernel starts only one program and lets that program launch all the other programs that are needed. This very first program is called the init program, or sometimes just “init” for short. Note that this first program doesn’t need to be in a file called “init”, but often it is.

If the kernel can’t find the init program, the kernel’s purpose is gone and the kernel crashes.

The main difference in the Linux kernel for embedded systems is that it is built to run on a different CPU architecture. Otherwise, the way the kernel operates is consistent with a typical PC, which is one of its strengths.

Filesystem

In Linux, the kernel loads programs into memory separately, and the kernel expects these programs to be stored on some medium organized into files and directories. This organization of files and directories is called a filesystem. As is true of many operating systems, Linux has filesystems on media — the data actually stored on a storage medium, and filesystem drivers — the code that knows how to interpret and update the filesystem data on the medium.

In Linux, this medium is often a hard disk. However, embedded systems often don’t have a hard drive, so the medium can be other hardware devices like SD cards, flash memory, or even RAM to name a few.

Unlike Windows, Linux filesystems get associated with a directory rather than a drive letter. Filesystems can be associated with any directory, even one that is several layers down in a path. This associating a filesystem with a directory is called “mounting.” Linux first starts with an empty directory called / (slash). During Linux startup, the top most filesystem gets associated with (or mounted to) this directory, and all the contents of that filesystem appear under /. This topmost filesystem is called the root filesystem.

Linux systems expect the root filesystem to be laid out a certain way. So this filesystem is special and can’t just be some random set of directories and files. This is where directories like bin, sbin, etc, and more come from.

We’ll cover filesystems in more detail in a future article. The main point here is that Linux looks for this first program, this init program, to reside in the filesystem. The root filesystem needs to be created in advance and be mounted to ‘/’ before the kernel can launch the init program.

Because embedded systems have different hardware constraints, often Linux embedded systems use special filesystem formats rather than the typical EXT3, EXT4, btrfs, or xfs used on desktop or laptop computers.

Services

When the kernel finds, loads and runs the init program, that program then is responsible for bringing up the rest of the system. At this point, the kernel is no longer actively running and remains to coordinate the sharing of hardware among all of the running programs.

A number of different init programs are available. Regardless of which init program is chosen, this program will launch all of the necessary services and applications that are needed for the system to be useful. This set of services includes setting up networking, mounting additional filesystems, setting up a graphical environment, and more.

Under Linux, services are just programs that run in the background. Linux folks traditionally call these services daemons or daemon programs, though I see this terminology less frequently these days.

Applications/Programs

The init program is also responsible for starting regular programs. These programs do have user interaction. Embedded systems often have just a few user programs, sometimes just one. In an embedded system, this set of programs make the device do what it’s supposed to do, for example, display maps and waypoints, listen to microphones, or display a list of recorded tv shows. The possibilities are endless.

Summary

So in summary, in broad strokes, when an embedded computer starts, the Linux system will perform these steps:

  • jump into the bootloader
  • jump into the kernel
  • mount the root filesystem
  • load and run init
  • load and run background services (or daemons)
  • load and run applications

Each of these steps invokes a component that is needed in the system.

The Linux Foundation is the world’s leading home for collaboration on open source software, hardware, standards, and data. Linux Foundation projects are critical to the world’s infrastructure including Linux, Kubernetes, Node.js, ONAP, Hyperledger Foundation, PyTorch, RISC-V, and more.
Learn More
The latest from Linux Foundation Training
TRENDING STORIES
John is a Linux Instructor at The Linux Foundation.
Read more from John Bonesio
Linux Foundation Training sponsored this post.
SHARE THIS STORY
TRENDING STORIES
TNS owner Insight Partners is an investor in: Pragma, Root.
SHARE THIS STORY
TRENDING STORIES
TNS DAILY NEWSLETTER Receive a free roundup of the most recent TNS articles in your inbox each day.
The New Stack does not sell your information or share it with unaffiliated third parties. By continuing, you agree to our Terms of Use and Privacy Policy.