Welcome to follow my Douyin account “CodeAllen Embedded“
Continuously sharing short videos on embedded learning and planning
Feel free to message me for communication!
Original Image ~ CodeAllen
Hello everyone, I am CodeAllen (Kang Ge), today is June 3, 2023. In the previous article, I introduced the learning path for microcontroller direction, and I received a lot of positive feedback from students.
Previous article link: Learning Embedded Microcontrollers from Beginner to Expert
Following the theme of today’s article, I will share an article I previously wrote on Zhihu about the learning path for embedded Linux, which is also an important direction for microcontroller engineers to progress.
Because the public account does not support hyperlinks well, you can click the “Read the Original” at the end of the article to jump to Zhihu for reading.
Before starting the main text, I still recommend my one-on-one consulting service for embedded systems:
One-on-One Guidance for Embedded Software Engineers
In fact, for embedded development, whether in the direction of microcontrollers or Linux, the difficulty cannot be said to be very high. However, from the feedback of many students, it seems that the knowledge threshold of embedded systems is very high. From my learning experiences over the years, I have roughly understood some reasons.
Embedded systems differ from other purely software directions. There is no very specific learning path. Some training classes seem to have specific paths, but they are actually overly redundant. In three to four months, they aim to cover the embedded technology stack, which is obviously not a good method. Yet, many students still enjoy this and, after failing, conclude that they are not diligent enough or complain that the embedded path is difficult and long.
I summarize the learning path for embedded systems with a few keywords: Core Knowledge + Practical Ability + Long-Term Accumulation, to encourage everyone.
First, let me share a summary mind map. Since technology is constantly changing, I will update it periodically based on actual situations. You can click the “Read the Original” at the end of the article to jump to Zhihu for reading.

Although the learning path for embedded Linux seems much more complex than microcontrollers, using analogy learning methods is also completely feasible, which I will elaborate on later. If you have any questions, feel free to add me on WeChat for communication.
For embedded Linux, C language is still the most important. Below are some learning concepts and resources I provide, which I will continuously update over time, so please keep following!
Below, I will share in the order of the mind map:

This part is an introductory operation of Linux, which is also an entry point for newcomers to learn.
The goal is to have a basic understanding of the Linux system and know what Linux is.
You need to install a Linux system on your computer. I recommend installing a virtual machine and then installing the Linux system within the virtual machine.
You can refer to my articles for installation steps:
CodeAllen: Installation Method for Ubuntu on Virtual Machine
CodeAllen: Quick Installation of VMware Tool on Virtual Machine
CodeAllen: Changing Download Sources for Ubuntu, a Must for Domestic Users
“Linux Command Line and Shell Scripting Cookbook (3rd Edition)”
“Linux and Unix Shell Programming Guide”

As mentioned above, for embedded Linux development, C language is core, while data structures are the soul of software development.As for C++, it plays an advanced role in embedded systems and is a stepping stone to high-paying positions later on, but it is not a must. Therefore, students with extra capacity can take a look.
Learning Embedded Linux C Language is based on mastering Basic C Language, which is a further in-depth study. Therefore, it requires more practice, and you should try to operate on the Linux system and debug, as C language is the art of debugging, which is an essential skill.
Code as much as possible. To master embedded C language, one cannot focus solely on C itself. Algorithms, architectural methods, etc., are very important.
“The C Programming Language: A Modern Approach”
“High-Quality C/C++ Programming Guide”
“Deep Dive into C Language”
“Embedded Systems Programming”
“C Language Embedded Systems Programming Practice”
Data Structures and Theoretical Foundations:
“Data Structures (C Language Version)”
“Introduction to Algorithms”

Advanced Section:
This advanced section is actually entering the practical phase of embedded Linux, which is also the focus of future work. Therefore, this part of knowledge is intertwined. Although I have divided it into three parts based on my understanding, many of these need to be learned together.
The learning paths for this knowledge diverge somewhat, but there are also common points:
Proficient in using Linux -> Linux System Programming Development
Proficient in using Linux -> Driver Development and Linux Kernel Development
Of course, there are many details here that are difficult to explain in a summary manner; you can only experience them during your learning process.
Linux Application Development:
“Advanced Programming in the UNIX Environment”
“Detailed Development of Embedded Linux Applications”
“Advanced Programming in the UNIX Environment (APUE)”
“Advanced Programming in Linux” Yang Zongde
“Principles and Practical Development of Embedded ARM Systems” Yang Zongde
“Understanding Computer Systems in Depth”
“Operating Systems: Principles and Design”
Linux Network Development:
“UNIX Network Programming (UNP)”
Linux Driver Development:
“Linux Device Drivers (LDD)”
“ARM Architecture and Programming” Du Chunlei
“Detailed Development of Linux Device Drivers” Song Baohua
“Complete Analysis of the Linux Kernel”
“Advanced Programming in the UNIX Environment”
“In-Depth Understanding of the Linux Kernel”
“Embedded Systems” Mao Decao
“Scenario Analysis of Linux Kernel Source Code” Mao Decao and Hu Ximing
“Linux Kernel Programming”
END
What are some good companies in the embedded industry?
Characteristics of data structures in embedded software
Learning Embedded Microcontrollers from Beginner to Expert
Why do I feel like I can’t do anything after finishing C language?
Tutorial on Installing and Using Dev C++
Learning Embedded Microcontrollers from Beginner to Expert
Embedded Resources:
Sharing of God-level Makefile documents
What websites do experts in microcontrollers and embedded systems browse?
Introduction and Update of STM32CubeIDE – V1.10.0
Compiler sharing for C/C++ beginners
Sharing of materials from entry to advanced in QT
Resource sharing for design patterns based on C++
Ultimate Memory Technology Guide for Advanced Experts
About Me:
About Me
One-on-One Guidance for Embedded Software Engineers
Some outlook on embedded development positions
SMART – 5 Methods to Achieve Target Tasks
The Five Stages of a Programmer from Novice to Expert
Desktop sharing of programmers
Private WeChat, please be sure to note “Public Account Fan“

Long press to recognize the QR code to add friends
Search or scan to follow “CodeAllen Embedded“
Watch hardcore embedded learning videos and live broadcasts
❤ If you finished reading the article, please give a thumbs up before you go! ❤