04 · Linux 内核与驱动开发
这是嵌入式 Linux 的核心模块:理解内核框架,并能为外设编写驱动。
子主题
| 文件 | 内容 | 必学程度 |
|---|---|---|
| 01-kernel-overview.md | 内核概览(源码结构、编译、版本、内核态 vs 用户态) | ★★★ |
| 02-kernel-modules.md | 内核模块(Makefile、加载、参数、导出符号) | ★★★ |
| 03-process-scheduler.md | 进程调度(CFS、实时调度、优先级、组调度) | ★★★ |
| 04-memory-management.md | 内存管理(页表、伙伴系统、slab、vmalloc、用户页缓存) | ★★★ |
| 05-vfs.md | 虚拟文件系统(VFS、inode、dentry、file、文件系统注册) | ★★★ |
| 06-interrupt.md | 中断与异常(top half、bottom half、tasklet、workqueue、threaded IRQ) | ★★★ |
| 07-kernel-sync.md | 内核同步(spinlock、mutex、rcu、seqlock、原子操作) | ★★★ |
| 08-device-tree.md | 设备树(Device Tree、binding、overlay) | ★★★ |
| 09-char-device.md | 字符设备驱动(file_operations、register_chrdev、cdev) | ★★★ |
| 10-block-device.md | 块设备驱动(bio、request、blk-mq) | ★★ |
| 11-network-driver.md | 网络设备驱动(netdev、skb、NAPI) | ★★ |
| 12-platform-driver.md | Platform 驱动模型(device、driver、probe、remove) | ★★★ |
| 13-dma.md | DMA 与缓存一致性(dma-mapping、cache flush) | ★★ |
| 14-i2c-driver.md | I2C 驱动(i2c_adapter、i2c_client、i2c_driver) | ★★★ |
| 15-spi-driver.md | SPI 驱动(spi_master、spi_device、spi_message) | ★★ |
| 16-pinctrl-gpio.md | pinctrl 与 GPIO 子系统 | ★★★ |
| 17-power-management.md | 电源管理(runtime PM、suspend/resume) | ★★ |
| 18-debugging.md | 内核调试(printk、dynamic debug、ftrace、perf、bpf) | ★★★ |
学习目标
完成本模块后,你应该能够:
- 理解内核五大子系统(调度、内存、VFS、网络、进程间通信)
- 编写一个完整的内核模块
- 编写一个字符设备驱动并从用户态测试
- 在设备树中描述硬件并编写对应的 platform 驱动
- 编写一个 I2C 设备驱动
- 处理中断、DMA、缓存一致性问题
- 使用 printk、ftrace、perf 等工具调试内核
推荐资源
- 书籍:《Linux Device Drivers, 3rd Edition》(LDD3,老但经典)、《Linux Kernel Development》(Robert Love)、《深入理解 Linux 内核》
- 内核文档:
Documentation/下大量文档 - 源码:直接读内核源码
- 实验:QEMU + vexpress / Raspberry Pi 树莓派
进入下一模块
05-system-build/README.md — 系统构建与 Bootloader