udemy 上的一个讲师, 我觉得他的内容顺序特别好, 特此记录下来
  • C 47.5%
  • Python 30.5%
  • Shell 12.7%
  • Makefile 3.2%
  • BitBake 2.9%
  • Other 3.2%
Find a file
2026-10-03 13:04:49 +08:00
docs Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00
labs Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00
scripts Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00
tests Add complete Chinese Linux tutorial with verified hands-on labs 2026-09-26 20:03:36 +08:00
yocto/meta-linux-trainer Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00
.gitignore Add complete Chinese Linux tutorial with verified hands-on labs 2026-09-26 20:03:36 +08:00
1-learn-linux-user-space-debugging.org Add complete Chinese Linux tutorial with verified hands-on labs 2026-09-26 20:03:36 +08:00
2-inside-elf.org Add complete Chinese Linux tutorial with verified hands-on labs 2026-09-26 20:03:36 +08:00
Makefile Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00
README.org Expand Linux tutorial with advanced kernel, Yocto and ARM labs 2026-10-03 13:04:49 +08:00

从用户态调试到 Linux 内核与嵌入式开发

这套教程学什么

这是一套中文、实验驱动的 Linux 开发教程。沿着原仓库的课程主题,从命令行与 C 程序出发, 学习用户态调试、ELF、系统调用、内核模块、字符设备、内存与同步、中断与时间, 最后构建可启动的虚拟 Linux 系统,并用 Yocto 组织应用和镜像。

完成主线后,你应能解释一次文件读写如何进入内核,定位一个程序错误,制作自己的 initramfs,在 QEMU 中加载驱动,并交付有测试记录的用户态—内核态实验项目。 它面向系统软件和嵌入式开发;桌面使用、生产运维、网络协议栈内部实现及真实板卡 BSP 移植只提供必要基础,不宣称覆盖所有 Linux 专业方向。

正文、实验和练习为独立编写。原仓库的付费课程链接仅用于确认选题,不代表获取或复刻了课程内容。 原始目录保存在 历史记录,其中未经核实、与 Linux 无关的链接不作为教程资料。 教程包含 24 章主线和 13 章进阶路线,共 37 章。 进阶路线按原网站公开大纲补入完整字符设备、同步机制、硬件 IRQ、Yocto 系统集成、ARM 启动链和内核调试等内容。 逐门对应及各项的实验边界见 原网站课程补充对照表(2026-10-02)。

从这里开始

先阅读 00 实验环境与学习方法。在仓库根目录执行:

make doctor
make -j2
make check
./build/debug_sum
./build/debug_sum --fixed

最后两行分别得到 sum=50 和 sum=60=。第 04 章将用 GDB 找到这 10 的差值从何而来。 =make check 检查用户态程序行为、教程链接、答案定位、Shell 代码块语法和 Yocto 本地配方输入;不加载模块或下载软件。 只检查文档可执行 =make check-docs=。

完整目录

阶段 章节 学完应能做什么
准备 00 环境与学习方法 建立可复现的环境,记录版本
基础 01 命令行、文件与权限 使用管道、重定向、权限和进程工具
基础 02 C、编译和 Make 理解指针、生命周期和错误处理
用户态 03 进程、文件 I/O 与管道 处理短读写、EOF、fork 和进程回收
用户态 04 GDB 调试 用断点、单步和变量检查定位错误
用户态 05 core dump 与内存错误 用工具验证越界和泄漏的修复
用户态 06 strace 与 ltrace 收集系统调用和库调用证据
运行机制 07 ELF、链接和装载 构造与排查共享库依赖
并发 08 线程、信号与 IPC 选择同步和通信机制
系统基础 09 网络、服务与资源观察 调试本地 TCP 服务,查看日志
内核 10 内核源码与构建 固定版本,在独立目录构建内核
内核 11 模块与生命周期 编译、加载和卸载模块
驱动 12 字符设备与用户接口 实现有边界约定的二进制邮箱
内核 13 用户态与内核内存管理 区分地址、分配策略与所有权
内核 14 内核同步 根据上下文选择锁并分析死锁
硬件 15 设备模型、MMIO、DMA 与设备树 理解驱动绑定和硬件资源
内核 16 中断与延迟执行 区分中断上下文与工作队列
内核 17 系统调用与 ABI 追踪 read 路径,设计兼容接口
内核 18 时间子系统 选择时钟,处理周期计时
嵌入式 19 QEMU 与最小根文件系统 启动自己的 Linux 和驱动
嵌入式 20 Yocto:镜像、配方、层与 SDK 构建镜像、加入应用、生成 SDK
质量 21 用户态与内核测试 编写边界测试,运行 KUnit
诊断 22 内核日志、ftrace 与 GDB 建立故障证据链
项目 23 综合项目与结课验收 交付设备、客户端、镜像和报告

推荐学习顺序为:=00—10 → 19 → 11—18 → 20—23=。 第 19 章先准备客体,后面的模块实验才能运行;第一次读到它时,完成启动与验收后返回第 11 章。 有 C/Linux 基础的读者可用 00—03 章验收题自测后从 04 开始。 每次学习完成一个实验并保存观察记录;进度以能解释结果为准。

主线之后进入 A01—A13 进阶目录。其中 A02—A06 使用同一套自动内核验收, A08—A09 扩展 Yocto 层,A10 构建 ARM64 的 U-Boot → Linux → ext4 启动链,A11—A13 提供测试、调试及板级路线。

版本与实验约定

命令默认从仓库根目录执行;标注“客体”的命令在 QEMU Linux 内执行。 主线使用 x86-64 Linux 主机和 x86-64 客体,用户态工具脚本需要 Python 3.8 或更新版本。 ARM 主机的交叉编译需要另行配置工具链和目标 BusyBox,不直接套用本教程的本机 gcc 命令。 教学内核固定为 Linux 6.12,Yocto 示例使用 Scarthgap 系列,并要求记录实际 commit。 选用这些版本是为了让讲解与接口对应,不将其称为当前最新版本。 安装命令以 Ubuntu/Debian 为例。WSL2 可完成大多数用户态实验;模块运行使用 QEMU 自己启动的内核。 完成第 19 章构建后,执行 make check-guest 可自动验证设备、模块生命周期、ftrace 和周期工作。

章节中的 Shell、GDB 提示符和客体终端是不同会话。标注“预期失败”的命令需要观察错误码, 不要把整章当成遇错即停的脚本一次执行。=make clean= 会删除整个 =build/=,包括内核源码、镜像和实验日志。 需要保留的笔记与报告请放在该目录之外。

本仓库仅把验证记录中列明的项目标为已实测。真实板卡需要对应硬件资料, 第 15 章提供资源分析练习,不给未经硬件核实的寄存器写入命令。 进阶实验已验证的范围与 Yocto 完整镜像/SDK、实体板等尚未执行的项目,见 补充验证记录。