1- # 嵌入式 Linux 内核一个月学习计划
1+ # PenguinLab — 30 天嵌入式 Linux 内核学习计划
22
3- ## 你的背景画像
3+ 面向有 C 语言和嵌入式基础(STM32 / FreeRTOS)的工程师,通过 QEMU + 真机(i.MX6ULL / 全志 H618)实践,掌握 Linux 内核驱动开发、内核移植定制和性能调优。
44
5- | 维度 | 现状 |
6- | ------| ------|
7- | C 语言 | 高级(内存管理 / 多线程) |
8- | Linux 使用 | 较为熟悉 |
9- | 嵌入式经验 | STM32 裸机 + FreeRTOS + Yocto/Buildroot + DTS |
10- | 目标硬件 | imx6ull + 全志 H618 |
11- | 开发环境 | WSL2 |
12- | 每日时间 | 1–2 小时 |
13- | 核心目标 | 驱动开发 / 内核移植定制 / BSP / 性能调优 |
5+ ## 快速开始
6+
7+ ### 1. 克隆仓库
8+
9+ ``` bash
10+ git clone --recursive https://github.com/your-username/PenguinLab.git
11+ cd PenguinLab
12+
13+ # 如果已克隆但未初始化子模块
14+ git submodule update --init third_party/linux third_party/busybox
15+ ```
16+
17+ ### 2. 安装工具链
18+
19+ ``` bash
20+ # ARM32
21+ sudo apt install gcc-arm-linux-gnueabihf
22+
23+ # ARM64(可选)
24+ sudo apt install gcc-aarch64-linux-gnu
25+
26+ # QEMU
27+ sudo apt install qemu-system-arm
28+
29+ # CMake(用于用户态示例)
30+ sudo apt install cmake
31+ ```
32+
33+ ### 3. 构建内核 + 根文件系统
34+
35+ ``` bash
36+ # 构建 ARM64 内核
37+ ./scripts/linux-action-scripts.sh config_and_build \
38+ ARCH=arm64 LINUX_DEFCONFIG=defconfig
39+
40+ # 构建最小 rootfs
41+ ./scripts/rootfs-minimal-maker.sh --static all
42+ ```
43+
44+ ### 4. 启动 QEMU
45+
46+ ``` bash
47+ ./scripts/qemu-run.sh run
48+ ```
49+
50+ 内核启动后在 QEMU shell 里操作。退出 QEMU:` Ctrl+A X ` 。
1451
1552## 目录结构
1653
1754```
18- linux-kernel-study/
19- ├── README.md ← 你在这里
20- ├── 书单_Booklist.md ← 理论 + 实战书单,含章节定位
21- ├── week1/ ← 内核解剖 & 构建体系
22- │ ├── day01-02_环境搭建与源码导览.md
23- │ ├── day03-04_Kconfig与Kbuild.md
24- │ ├── day05-06_内核核心数据结构.md
25- │ └── day07_QEMU跑起来.md
26- ├── week2/ ← 内核模块 & 字符驱动
27- │ ├── day08-09_内核模块基础设施.md
28- │ ├── day10-11_字符设备驱动.md
29- │ ├── day12-13_Platform_Driver模型.md
30- │ └── day14_sysfs与debugfs.md
31- ├── week3/ ← Device Tree 深度 & 中断子系统
32- │ ├── day15-16_DTS深度与overlay.md
33- │ ├── day17-18_中断子系统全链路.md
34- │ ├── day19-20_Clock与Pinctrl框架.md
35- │ └── day21_驱动上真机.md
36- ├── week4/ ← BSP 实战 & 性能调优
37- │ ├── day22-23_H618内核定制.md
38- │ ├── day24-25_ftrace与kprobe.md
39- │ ├── day26-27_内存管理基础.md
40- │ └── day28-30_综合项目_I2C驱动.md
41- └── quick_ref/
42- └── 常用命令速查.md
55+ PenguinLab/
56+ ├── tutorial/ # Week 1 教程(环境搭建、Kconfig、数据结构、QEMU)
57+ ├── todo/ # Week 2–4 学习计划(内核模块、驱动、DTS、BSP)
58+ ├── example/ # 可构建的示例代码
59+ │ ├── kernel_base_ds/ # 侵入式链表实现 + 12 个测试用例
60+ │ ├── kernel_module/ # 最小内核模块、符号导出
61+ │ └── chardev/ # 字符设备驱动 + 用户态测试
62+ ├── scripts/ # 自动化脚本
63+ │ ├── linux-action-scripts.sh # 内核配置与交叉编译
64+ │ ├── qemu-run.sh # QEMU ARM 仿真
65+ │ ├── rootfs-minimal-maker.sh # BusyBox 最小根文件系统
66+ │ └── linux-submodule.sh # 子模块管理
67+ ├── document/ # 参考文档
68+ │ ├── booklist.md # 13 本书推荐(含章节定位和阅读时机)
69+ │ └── qemu-reference.md # QEMU 速查手册
70+ ├── third_party/ # 第三方子模块
71+ │ ├── linux/ # Linux 内核 6.19.y
72+ │ └── busybox/ # BusyBox
73+ ├── .clang-format # 代码格式化配置
74+ └── .clangd # clangd LSP 配置(内核源码导航)
4375```
4476
45- ## 每周目标一览
77+ ## 学习路线
4678
4779| 周次 | 主题 | 里程碑 |
4880| ------| ------| --------|
@@ -53,7 +85,11 @@ linux-kernel-study/
5385
5486## 使用建议
5587
56- - 每天** 先读对应 ` .md ` 的" 要了解什么" 部分** (10–15 分钟),再动手
57- - 命令块 ` ``` ` 内的内容可以直接复制到终端执行
58- - 每个文件末尾有** 延伸阅读** ,标注了书名 + 具体章节,遇到卡壳时查
88+ - 每天** 先读对应教程的「 要了解什么」 部分** (10–15 分钟),再动手
89+ - 命令块中的内容可以直接复制到终端执行
90+ - 每个文件末尾有** 延伸阅读** ,标注了书名 + 具体章节
5991- 打 ✅ 标记完成的练习项,方便复盘进度
92+
93+ ## 许可证
94+
95+ MIT License — 详见 [ LICENSE] ( LICENSE )
0 commit comments