1. 内核基础与架构
- 内核职责
- 进程调度
- 内存管理
- 文件系统
- 设备驱动
- 网络通信
- 系统调用接口
- 内核架构
- 内核空间 vs 用户空间
- 内核源码树结构
/arch
: 体系结构相关代码/drivers
: 设备驱动程序/fs
: 文件系统/include
: 头文件/init
: 内核初始化/kernel
: 核心子系统/mm
: 内存管理/net
: 网络栈
2. 核心子系统
- 进程管理
- 进程描述符
struct task_struct
- 进程状态
- 进程创建 (
fork
, vfork
, clone
) - 进程调度器
- 内核线程
- 内存管理
- 虚拟内存
- 分页与页表
- 物理内存管理: 伙伴系统、SLAB/SLUB分配器
- VMAs
- 页缓存
- 内存回收
- 文件系统
- VFS
- 索引节点
- 目录项缓存
- 具体文件系统: ext4, XFS, Btrfs
- 设备驱动
- 三类设备
- 驱动模型
- 设备树
sysfs
, procfs
, debugfs
- 网络栈
- 套接字
- 协议栈: TCP, UDP, IP
- 网络设备驱动
- Netfilter
3. 内核开发关键技术
- 同步与并发
- 中断处理
- 内核定时器
- 内存分配
kmalloc
/ kfree
vmalloc
/ vfree
get_free_pages
- 内核调试
printk
oops
分析gdb
+ kgdb
strace
/ ltrace
SystemTap
ftrace
- KASAN, UBSAN
4. 开发流程与社区
- 获取源码
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
- 配置与编译
make menuconfig
make -jN
- 交叉编译
- 代码风格
- 遵循
Linux Kernel Coding Style
- 提交补丁
git format-patch
- 邮件列表提交
- 回应评审意见
5. 重要概念与机制
- 模块机制
insmod
, rmmod
, modprobe
- 模块初始化与退出
- Syscall
- Kconfig 与 Makefile
- 容器与虚拟化支持