这门课解决什么工作场景
内核开发是 Linux 生态中最深也最窄的赛道。多数应用层开发者对“进程怎么来的、内存怎么分”只停留在概念,一旦遇到性能瓶颈或需要编写字符驱动、总线驱动,便无从下手。本课程直面这一痛点,不教怎么用工具,而是从源码层面拆解内核运行机制。它解决的核心问题是:当你需要理解系统底层行为、裁剪定制内核以适应特定硬件,或编写内核模块驱动设备时,具备独立分析和修改代码的能力。适合希望在嵌入式开发、系统编程领域深耕,或想从应用层向上穿透至 OS 原理的工程师。
适合什么基础、建议先看哪几块
prerequisite 要求较高:你需要熟练掌握 C 语言指针与结构体,熟悉 Linux 基本命令和 Shell 脚本,并最好已有驱动开发或系统编程的初步经验。完全零基础者直接上手会很吃力。
建议学习路径如下:
第一章《Linux 内核介绍》是必经之路。重点攻克 01_03 节“源码架构分析”和 01_04 节“编译裁剪内核”,这是建立全局观的关键。只有理解内核模块的加载卸载机制(01_05 至 01_06 节),才能安全地进行后续实践。
第二章《进程管理和调度》是重中之重。进程描述符(02_01 节)和调度算法核心实现(02_07 节)是理解系统行为的基础。若时间有限,优先精读 02_01 至 02_05 节,掌握进程生命周期;对调度感兴趣者可深入 02_07 至 02_11 节,理解 CFS 和实时调度策略。
第三章《内存管理》内容极深,建议前两步扎实后再进入。从页表结构入手,逐步理解虚拟内存映射机制。
学完能独立做什么、资料怎么配合练习
完成全部核心章节后,你应该能够:
- 独立阅读并修改主流 Linux 内核版本(如 4.x/5.x)的源码;
- 编写简单的字符设备驱动或内核模块,实现 IOCTL 交互;
- 使用 ftrace、perf 等工具分析进程调度和内存分配行为;
- 根据硬件需求裁剪内核配置,生成精简内核镜像。
资料包中的课件适合课前预习和课后复盘,帮助梳理复杂的概念框架。代码部分务必动手编译:先在一台虚拟机(推荐 Ubuntu 20.04/22.04)中搭建内核编译环境,按照课程指引下载源码、配置 menuconfig、编译并安装自定义内核。切勿只看不练——内核开发是手艺活,只有在报错和调试中反复打磨,才能真正内化知识。建议搭配《Linux 内核设计与实现》一书作为理论补充,形成“源码+文档”的双轨学习闭环。
课程介绍
01章 Linux内核介绍 01_01节Linux内核工程师介绍 01_02节linux系统介绍 01_03节_Linux内核源码架构分析 01_04节如何编译裁剪内核和补丁内核 01_05节_Linux内核模块编程准备 01_06节_实战Linux内核模块编程 02章 进程管理和进程调度 02_01节_Linux内核中进程描述符 02_02节_linux内核进程关键结构 02_03节_系统进程创建流程 02_04节_系统进程执行过程 02_05节_系统进程销毁过程 02_06节_实时分析系统所有cpu运行队列中进程内存数据 02_07节_linux调度算法核心实现 02_08节_linux内核实现多处理器调度 02_09节_linux内核调度操作接口 02_10节_linux内核调度参数指标 02_11节_linux系统实时进程 03章 内存管理 03_01节_linux内核页机制 03
课程目录
01章 Linux内核介绍 01_01节Linux内核工程师介绍 01_02节linux系统介绍 01_03节_Linux内核源码架构分析 01_04节如何编译裁剪内核和补丁内核 01_05节_Linux内核模块编程准备 01_06节_实战Linux内核模块编程 02章 进程管理和进程调度 02_01节_Linux内核中进程描述符 02_02节_linux内核进程关键结构 02_03节_系统进程创建流程 02_04节_系统进程执行过程 02_05节_系统进程销毁过程 02_06节_实时分析系统所有cpu运行队列中进程内存数据 02_07节_linux调度算法核心实现 02_08节_linux内核实现多处理器调度 02_09节_linux内核调度操作接口 02_10节_linux内核调度参数指标 02_11节_linux系统实时进程 03章 内存管理 03_01节_linux内核页机制 03_02节_linux内核区域机制 03_03节_linux内存分配流程 03_04节_linux内核高速缓存实现 03_05节_slab,slob,slub之间区别 03_06节_linux内存池 03_07节_linux内核高内存映射 03_08节_PerCPU原理及实验 03_09节_进程虚拟地址空间布局 03_10节_磁盘文件如何映射到虚拟地址空间 03_11节_linux虚拟地址空间核心结构体剖析 03_12节_进程虚拟地址空间域间 03_13节_缺页机制 03_14节_匿名页机制 03_15节_页的写时拷贝 03_16节_内核页错误处理 03_17节_用户和内核空间数据传递核心函数 04章 系统调用接口 04_01节_系统调用架构及流程 04_02节_汇编分析系统调用参数传递 04_03节_系统调用内核实现实验 05章 中断和中断处理 05_01节_Linux内核中断程序架构 05_02节_linux内核中断服务程序序流程 05_03节_Linux内核中断服务实验 05_04节_linux内核中断控制操作 06 章下半部,工作队列 06_01节linux内核下半部介绍 06_02节_linux内核Softirqs,Tasklets,Work_Queues 06_03节_linux内核下半部机制如何选择 07章内核数据同步机制 07_01节_内核中为什么要实现数据同步 07_02节_内核同步方式--PerCPU 07_03节_内核同步方式--原子操作及自旋锁 07_04节_内核同步方式--信号量 07_05节_内核同步方式--RCU及内存屏障 07_06节_内核同步方式--读写自旋转锁及读写信号量 07_07节_内核同步方式--完成变量,大内锁,顺序锁 08章时间管理 08_01节_时钟和定时器电路实现 08_02节_低分辨率定时器实现 08_03节_高分辨率定时器实现 08_04节_高精度定时器在低(高)分辨率模式下实现 08_05节_动态时钟 08_06节_定时器相关的内核系统调用 09章虚拟文件系统 09_01节_虚拟文件系统架构 09_02节_虚拟文件系统通过公共模型 09_03节_文件系统设计思想及数据恢复实验 09_04节_文件系统模型实验分析 09_05节_文件系统磁盘数据实验分析 09_06节_虚拟机文件系统操作接口 09_07节_虚拟文件系统核心数据结构 09_08节_ingben公司文件系统实验(1) 09_09节_ingben公司文件系统实验(2) 09_10节_文件系统模型分析 09_11节_文件系统如何和进程交互 10章块设备IO层 10_01节_块设备架构剖析 10_02节_IO架构剖析 10_03节_IO实验及设备文件剖 10_04节_字符设备处理流程驱动 10_05节_块设备通用架构分析 10_06节_磁盘设备处理流程驱动实验 10_07节_磁盘IO调度实验 11章内核缓存及同步 11_01节_linux内核通过缓存 11_02节_数据同步 11_03节_页面回收和换出 12章内核模块 12_01节_内核模块用法 12_02节_内核源码树中提交模块 13章设备模型 13_01节_linux内核设备模型 13_02节_linux设备模型实验 13_03节_sysfs文件系统介绍及实验 14章内核网络设计和实现 14_01节_网络协议介绍及socket通讯实验 14_02节_内核网络模型架构实验 14_03节_2层协议栈和3层协议栈数据发送和接受流程实验 14_04节_4层协议栈数据发送和接受流程以及协议栈运行环境初始化 14_05节_内核内部网络通信机制及实验 15章内核优化 15_01节_CPU优化 15_02节_进程优化 15_03节_中断号优化 15_04节_linux内存优化 15_05节_Linux高速缓存优化 15_06节_Linux磁盘IO子系统优化 15_07节_linux调度算法优化 15_08节_如何找出linux网络性能瓶颈 15_09节_linux网络子系统优化 15_10节_优化进程间通信 16章常用开发内核工具 16_01节_通过探针(Probe)技术调试内核 16_02节_动态跟踪内核函数执行 16_03节_用户态模式下动态调试内核 16_04节_linux内核panic定位分 16_05节_Gdb和Kgdb,Kdb调试 16_06节_如何快速定位linux内核问题 16_07节_定位linux内核实验分析 17章项目培训 17_01节_国内某地建设银行Linux服务器内核崩溃项目培训1 17_02节_国内某地建设银行Linux服务器内核崩溃项目培训2 17_03节_国内某地建设银行Linux服务器内核崩溃项目培训3 17_04节_国内某地建设银行Linux服务器内核崩溃项目培训4 18章职业发展培训 18_01节_linux内核就业指导






