课程大纲:
一、进入 Linux 的精彩世界
1、Linux 的特点、版本演进与发展方向
2、GNU 与 GPL
3、Linux 系统组成、启动流程
4、开发环境构建
5、GNU 工具链
6、文件系统组成
二、Linux 内核进程调度
1、进程生命周期
2、进程调度算法
3、进程调度时机
4、Linux实时性
5、SMP、CPU 热插拔与负载均衡
6、Cgroups
三、Linux 内核内存管理
1、MMU 系统
2、page 与 zone
3、buddy 系统
4、slab、kmalloc
5、进程的内存消耗
6、page cache 与 swap
7、内存泄露剖析
四、Linux 内核文件系统
1、虚拟文件系统
2、inode、dentry、file 和 superblock
3、文件系统与 block 层
五、内核编程主要 API 剖析
1、同步与并发
2、等待队列
3、内核延时
4、内存申请和释放
5、定时器与高精度定时器
6、中断顶底半部
—— 软中断
—— tasklet
—— 工作队列
—— threaded_irq
7、中断及软中断负载均衡
8、Linux内核线程
9、IO 与内存访问
10、DMA 与 cache 一致性
六、Linux 内核模块
1、内核模块 init 和 exit
2、输入参数
3、输出参数
七、Linux 内核调试方法
1、printk
2、Oops 和 panic
3、initcall_debug
4、suspend/resumedebug
5、earlyprintk与 low level debug
6、使用仿真器
7、proc 和 sys
8、grabserial
9、soft 和hard lockup
八、Linux 设备驱动模型
1、Linux设备分类
2、Sys,总线,设备和驱动
3、热插拔
4、电源管理
5、udev
九、设备驱动并发控制与 I/O 模型
1、Linux 字符设备驱动结构
2、Linux 设备驱动中的并发控制
3、Linux 设备驱动中的阻塞与非阻塞 I/O
4、Linux 多路复用 I/O
5、Signal IO 与 AIO
6、用户空间 I/O 与多线程设计原则
7、C10K 问题
十、Linux 复杂设备驱动
1、设备驱动分层框架
2、platform 驱动
3、基于 I2C/SPI/USB 等总线的驱动
4、块设备驱动与块 I/O 调度
5、网络设备驱动
十一、将 Linux 移植到一个新的 SoC
1、early_printk
2、L2 cache
3、OS timer
4、clk tree
5、GPIO
6、pinmux
7、IRQ chip
8、DMA
9、MACH_INIT
10、设备树(device tree)
11、社区维护
课程周期:
24课时(45分/课时)