
Table of Contents
- 1. About the Author
- 1.1 Author’s Contact Information
- 1.2 Support
- 2. Required Knowledge and Tools
- 2.1 Knowledge Points to Master
- 2.2 Knowledge Points to Understand
- 3. What You Can Learn from This Series of Blogs
- 3.1 Features of This Blog Series
- 3.2 21-Day Learning Goals
- 3.3 21-Day Learning Content
- 3.4 Learning Schedule
- 3.5 Learning Outcomes
- 4. Some Experiences
- 4.1 Learning Time
- 4.2 Learning Methods
Everyone experiences a painful period when breaking through their technical bottlenecks. Only with firm belief and perseverance can we look back and feel enlightened about the technologies and knowledge we once found difficult to understand. This is the greatest sense of achievement brought by growth and progress.
1. About UP
UP has been engaged in <span>Linux</span> kernel and driver development for over nine years, is a <span>Linux</span> kernel enthusiast, and works in the smart automotive industry for a publicly listed company, focusing on <span>Linux</span> low-level software development. Writing blogs has been a consistent practice for the author over the years, both to consolidate knowledge and to keep pace with the development of the <span>Linux</span> kernel. Therefore, the author relies on the <span>RK3568</span> platform for research on related <span>Linux</span> kernel drivers and the <span>Android</span> framework.
1.1 Author’s Contact Information
Add the author on WeChat to participate in activities.
1.2 Support
- If readers have specific interests in certain
<span>Linux</span>kernel areas, they can contact the author, who will do their best to study the code and produce blog posts.
1.3 Activity Description
After joining the knowledge base, you will be added to the study group, with the first week of learning starting on September 8.
More content can be accessed by joining the Linux system knowledge base package (tutorials + videos + Q&A).
Add me on WeChat to receive a large discount coupon for the Linux comprehensive course~
2. Required Knowledge and Tools
<span>RK3568</span> platform kernel driver development is not as simple as developing in <span>C</span> language; it requires a certain investment of learning and time, as well as a foundational knowledge base, some of which must be mastered while others only need to be understood.

2.1 Knowledge Points to Master
<span>C</span>Language: The foundational language of the<span>Linux</span>kernel is<span>C</span>, so we must master it.- Data Structures: The kernel is filled with data structures like linked lists.
- Hardware Basics: During driver development, we will encounter various hardware, so you need to be able to read hardware schematics.
- English Reading Skills: We often need to refer to chip datasheets to find relevant register addresses, so understanding English chip manuals is necessary.
2.2 Knowledge Points to Understand
<span>C++</span>Object-Oriented Concepts: The core idea of device management in the<span>Linux</span>kernel is object-oriented, with the foundation being the<span>Kobject</span>(object) structure, so we only need to understand this object-oriented concept.<span>git</span>Code Management Tool: The mainstream code management tool is git, and we only need to understand a few simple commands.- Hardware Debugging Tools: Although there are hardware engineers in the company to help, as a driver engineer, it is essential to understand the use of common tools like multimeters, oscilloscopes, and logic analyzers.
3. What You Can Learn from the Linux Knowledge Base
3.1 Features of This Knowledge Base Activity
- Rich Visual Content: The
<span>Linux</span>kernel is vast and complex, and any thick<span>Linux</span>kernel book can be tedious. Therefore, the author includes mind maps in the blog to clarify the intricate relationships of the<span>Linux</span>kernel subsystems.
- Practical Approach: Most of the content corresponds to a practical example, allowing for applied learning.
3.2 21-Day Learning Goals
The learning process after starting work must be integrated with actual work, extending from the knowledge used in work to areas previously unencountered, gradually building your knowledge network. This knowledge base also serves as a record of experiences during work debugging.
Based on my experience, I will introduce the initial learning sequence.
- Week 1: Learning Kernel Device Trees: Mastering kernel hardware
<span>HW</span>configuration. - Week 2: Learning Kernel Debugging Techniques: Mastering kernel debugging methods.
- Week 3: Learning Kernel Driver Subsystems: Mastering drivers for I2C, SPI, and other bus subsystems.
3.3 21-Day Learning Content
Week 1
- The Origin of Device Trees
- Illustrated Use of Kernel Device Trees
- Parsing Device Tree Binary Files (DTB)
- Converting DTB Information to device_node Structure
- Device and Driver Matching Process under DTS Architecture
- Kernel Processing of Device Trees
- Introduction to Device Tree Parsing Functions
- Basic Debugging Methods for DTB
- Introduction to the Process of Obtaining DTB Pointer During Kernel Boot
Week 2
- How to Use Dynamic Debug for Debugging
- How to Use dump_stack to Analyze Function Call Relationships
- Debugging Guide for Sleep/Wake Standby
- How to Create a proc Node for Upper Layer App Debugging
- Directly Reading/Writing Registers for Debugging with devmem
- Linux Kernel Printk
- Debugging with debugfs
Week 3
- GPIO Subsystem
- Pinctrl Subsystem Overview
- SPI Subsystem
- I2C Subsystem
- UART Subsystem
- Input Subsystem
3.4 Learning Schedule
Group Q&A and Learning in WeChat.
- Monday to Friday, 7 PM – 9 PM
- Saturday, 9 AM – 11 AM
- Sunday, 9 AM – 11 AM
3.5 Learning Outcomes
Technical Notes: 3 articles, with one summary output each weekend.
4. Some Experiences
4.1 Learning Time
- During the week, make sure to keep good records, then summarize them on the weekend.
- In the morning, read code and organize the code framework.
As long as you are willing to accumulate, you can get started in two months, master it in two years, and achieve great success in five years.
4.2 Learning Methods
- It is not good to work in isolation; it is better to share your summaries, which will motivate you more.
- Mastering dump_stack to analyze function call relationships will make analyzing code frameworks much easier.