To learn embedded Linux well, we must first solve two important problems:
1. What do you learn?
2. How to learn?
First, solve the first problem.
The system architecture of Embedded Linux includes two parts: Software and Hardware:
Let's take a look at the development process of a mature embedded product:
- 1. Hardware development
- Responsible Person: Hardware Engineer
- Responsible part: add, modify, and delete hardware based on the EVM board
- 2. Port bootloader
- Responsible Person: system engineer or driver Engineer
- Responsible part: Port bootloader to the hardware platform developed in process 1.
- 3. Linux Kernel
- Responsible Person: system engineer or driver Engineer
- Responsible part: port the Linux kernel to the hardware platform developed in process 1.
- 4. Create a root file system
- Responsible Person: System Engineer
- Responsible part: Make the root file system for Kernel startup
- 5.1 business-related applicationsProgram
- Owner: Application Engineer
- Responsible part: development of applications closely related to products
- 5.2 business-related drivers
- Responsible Person: Driver Engineer
- Responsible part: Development of drivers closely related to products, such as touch screen and wireless network card
- 6. Function Testing, performance testing, system integration testing, lab Board (system equipment), and release
After reading the above, you should have a rough understanding of embedded Linux. Let's clarify the knowledge structure and further segment it. Let's take a look at the knowledge structure of "what to learn:
- 1. Embedded Processor and bare metal Program
- 2. Linux System Management
- 3. Linux Application Development
- 4. Linux driver development
- 5. Linux kernel development and system migration
Next, we will collect everything we want to learn:
Processor:
1. ARM processor working mode
2. Arm System registers
3. Arm addressing
4. Arm Assembly Instruction Set
5. Arm environment C language programming
6. Arm interruption and exceptions
7. Ads integrated development environment
8. bare metal Program Development (serial port, LCD, clock, led, button ......)
System Management:
1. customized Linux Installation
2. Linux commands
3. Use samba, NFS, TFTP, and Wireshark
4. shell programming
Application Development:
1. GCC, GDB, and makefile
2. File and Time Programming
3. multi-process and multi-thread programming
4. inter-process communication
5. Network Programming
6. QT graphical Application Development
7. Android graphical Application Development
Kernel development:
1. Linux Kernel configuration and cropping
2. Linux kernel module development
3. Create a root file system
4. Process Subsystem
5. memory subsystem
6. proc file system
7. System Call
8. kernel Timer
9. kernel exception Analysis
Driver development:
1. Character Device Driver
2. Bus, device, Driver Model
3. Hardware Access Technology
4. interrupt handling
5. Input Device Driver
6. Platform driver
7. PCI and USB Drivers
8. NIC Driver
9. Touch Screen driver
10. Serial Port driver
References: Embedded Linux in China