Learning Path for ARM and Embedded Linux

Welcome to follow my Douyin account “CodeAllen Embedded
Continuously sharing short videos on embedded learning and planning
Feel free to message me for communication!
Learning Path for ARM and Embedded Linux
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
Introduction
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.
Main Text
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.

Learning Path for ARM and Embedded Linux

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:

Learning Path for ARM and Embedded Linux

Purpose:
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.
Method:
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
Books:
“Linux Command Line and Shell Scripting Cookbook (3rd Edition)”
“Linux and Unix Shell Programming Guide”

Learning Path for ARM and Embedded Linux

Purpose:
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.
Method:
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.
Book Recommendations:
C Language:
“The C Programming Language: A Modern Approach”
“C Primer Plus”
“High-Quality C/C++ Programming Guide”
“Deep Dive into C Language”
“C and Pointers”
“C Traps and Pitfalls”
“Expert C Programming”
“Embedded Systems Programming”
“C Language Embedded Systems Programming Practice”
Data Structures and Theoretical Foundations:
“Data Structures (C Language Version)”
“Algorithms”
“Introduction to Algorithms”

Learning Path for ARM and Embedded Linux

Advanced Section:

Purpose:
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.
Method:
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.
Books:
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)”
“TCP/IP Illustrated”
Linux Driver Development:
“Linux Device Drivers (LDD)”
“ARM Architecture and Programming” Du Chunlei
“Detailed Development of Linux Device Drivers” Song Baohua
Linux Kernel:
“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

Embedded Technology:

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

Learning Path for ARM and Embedded Linux

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
Learning Path for ARM and Embedded Linux
❤ If you finished reading the article, please give a thumbs up before you go!

Leave a Comment