1. 内核基础与架构
- 内核职责
- 进程调度
- 内存管理
- 文件系统
- 设备驱动
- 网络通信
- 系统调用接口
- 内核架构
- 宏内核
- 微内核
- 混合内核
- 内核空间 vs 用户空间
- 特权级别
- 上下文切换
- 系统调用
- 内核源码树结构
/arch
: 体系结构相关代码/drivers
: 设备驱动程序/fs
: 文件系统/include
: 头文件/init
: 内核初始化/kernel
: 核心子系统/mm
: 内存管理/net
: 网络栈
2. 核心子系统
- 进程管理
- 进程描述符
struct task_struct
- 进程状态
- 进程创建 (
fork
,vfork
,clone
) - 进程调度器
- CFS
- 实时调度器
- 内核线程
- 进程描述符
- 内存管理
- 虚拟内存
- 分页与页表
- 物理内存管理: 伙伴系统、SLAB/SLUB分配器
- VMAs
- 页缓存
- 内存回收
- 文件系统
- VFS
- 索引节点
- 目录项缓存
- 具体文件系统: ext4, XFS, Btrfs
- 设备驱动
- 三类设备
- 字符设备
- 块设备
- 网络设备
- 驱动模型
- 设备树
sysfs
,procfs
,debugfs
- 三类设备
- 网络栈
- 套接字
- 协议栈: TCP, UDP, IP
- 网络设备驱动
- Netfilter
3. 内核开发关键技术
- 同步与并发
- 原子操作
- 自旋锁
- 信号量
- 互斥锁
- 完成变量
- RCU
- 中断处理
- 上半部
- 下半部机制
- 软中断
- 任务队列
- 工作队列
- 内核定时器
jiffies
- 定时器API
- 高精度定时器
- 内存分配
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
- 配置选项定义
- 源码编译规则
- 容器与虚拟化支持
- Namespaces
- Cgroups
- KVM