This article will briefly organize some knowledge about Embedded Linux, providing reference for those who, like me, want to progress from microcontrollers to Embedded Linux.
With the increasing number of Embedded Linux tutorials, I believe many friends studying microcontrollers have started experimenting with it~
1. Understanding Linux

Some friends studying microcontrollers may already have some basic knowledge of Linux, but there are also friends who have never used Linux, and some beginners may not have heard of Linux. To accommodate these friends, let’s briefly understand Linux:
2. Understanding Embedded Linux
When learning Embedded Linux, we need to focus on the following major areas:
(1) BootLoader
The BootLoader is a piece of code that runs before the operating system to boot the OS. There are many open-source BootLoaders, such as RedBoot and U-Boot, among which U-Boot is the most commonly used. The source code for U-Boot is quite large:
Our focus is to learn how to modify the U-Boot provided by the chip manufacturer and adapt it to our board:
When we talk about U-Boot porting, we usually refer to the process of modifying the U-Boot provided by the chip manufacturer to adapt it to our board.
(2) Linux Kernel
The Linux kernel is an open-source monolithic Unix-like operating system kernel. The Linux kernel we need to learn to port is also the one provided by the chip manufacturer. The kernel source directory is as follows:
(3) Root Filesystem
The root filesystem (rootfs) is the first filesystem mounted when the kernel starts, where the kernel code image file is stored.
The system boot program will load some basic initialization scripts and services into memory to run after mounting the root filesystem.
The importance of the root filesystem is similar to that of the system disk on our computer; without this system disk, we cannot install our system. The root filesystem has a root directory /, which contains many subdirectories:
The root filesystem requires a special framework to create, such as BusyBox, Yocto, Buildroot, etc.
(4) Linux Drivers
Linux drivers should be the starting point and focus of our learning Embedded Linux. The above three parts have already created a complete Embedded Linux environment for us.
With such an environment, our Linux drivers can be installed on top of it. Linux drivers:
There are three major types of drivers in Linux: character device drivers, block device drivers, and network device drivers.
Device Tree: A file that describes the device tree. This DTS file uses a tree structure to describe the board-level devices, such as the number of CPUs, memory base address, devices connected to the IIC interface, devices connected to the SPI interface, etc.
(5) Linux Applications
In Linux: everything is a file. In C programming, we know that file operations involve opening files, reading and writing files, and closing files.
Learning Embedded Linux is much more difficult than learning microcontrollers; not only has the content increased, but just getting familiar with the development environment (Linux environment, cross-compiler, Makefile, etc.) involves quite a bit of content.
In terms of depth, it is significantly deeper than microcontrollers. For example, learning STM32 used IDE compilation, while Embedded Linux involves compiling directly with a compiler or using compilation scripts.
From my experience of starting and giving up, starting with Linux drivers and applications is a good approach. Don’t jump straight into the three giants mentioned above, or you might easily go from beginner to giving up…
Be prepared for hardship; many issues can drive you crazy. For example, when you follow a tutorial, the final result may differ, and many problems may arise. This is very normal.
Sometimes, a problem may seem isolated, but it can lead to other issues that need to be resolved patiently.
For instance, when I compiled the Linux kernel previously, I encountered the following issue:
According to the problem description, I was missing something called lzop, so I installed it as instructed, only to encounter another issue:
Then I had to look online for solutions, trying them one by one until I finally resolved it:
My experimental method was exactly the same as the tutorial, including the development environment provided by the tutorial. Even with identical operations, issues can still arise, so if you have to set up your environment, the chances of errors increase.
Regardless, don’t give up so easily.
The knowledge of Embedded Linux is not limited to what has been mentioned above, but it basically includes our main learning content. The above only covers some superficial conceptual knowledge; later we will learn and share more in-depth and detailed knowledge together.

This article is reprinted with permission from the “Embedded Miscellaneous” WeChat public account. Reprinting is for learning reference only and does not represent our endorsement of its views. We also do not bear any copyright responsibility for its content, text, or images.
3. Summary of a recently designed PCB, where a two-layer board turned out to be more difficult to design than a multi-layer board.