- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
驱动程序开发:从点亮一盏灯到交付一个驱动
内核开发圈流传一句行话:没点过灯,就不算写过驱动。这句话的意思并不是让你去买一块面包板——它说的是一条学习路径:先亲手把一个最小的内核模块装进系统,把开发板上的 LED 注册成字符设备,让用户态的一条命令真正改变物理世界的一颗灯珠,再沿着这条路走到设备节点自动生成、中断被正确处理、设备树描述的硬件被驱动接管。当这盏灯在你的系统里"活"了起来,驱动的全部门槛——内核空间、设备模型、并发、调试——就都已被你跨过一遍。
本教程就是这条路径的完整复盘。全书以一块开发板上的 LED 为主线案例,从最粗粝的手动创建设备节点,一路推进到 udev 自动交付、设备树声明硬件、平台总线完成匹配,再扩展到块设备、网络设备与用户态驱动。每一章都回答同一个问题的不同侧面:一段代码要满足什么条件,硬件才肯承认它是自己的驱动?
这门课讲什么
驱动程序是操作系统派驻在硬件身边的"接口官":应用层发出读写请求,内核把这些请求翻译成寄存器操作、中断响应与内存搬运,而驱动正是这段翻译工作的具体执行者。它一侧踩在可编程的软件世界,另一侧踩在只会认电平与时序的物理世界,两个世界的规则差异,构成了驱动开发全部的难点与趣味。
围绕这条主线,全书分成八个阶段:
- 第一阶段(第 1 章):搞清驱动在系统里的位置。一次
echo命令怎样穿过用户态、系统调用、VFS,最终落到 GPIO 寄存器上;内核空间与用户空间的边界为何存在;LED 为什么被归类为字符设备。 - 第二阶段(第 2 章):动手。写一个最小内核模块,注册字符设备,实现
open与write,让命令行真的点亮 LED,最后把设备节点的生成交给 udev。 - 第三阶段(第 3 章):补硬件课。I/O 内存与
ioremap、中断的顶半部与底半部、DMA 数据搬运,以及 I2C、SPI、PCIe 三种总线各自的脾气。 - 第四阶段(第 4 章):进入现代驱动模型。平台总线如何让 device 与 driver 相认,设备树如何把硬件拓扑写成数据,I2C/SPI 驱动如何借总线之力完成 probe。
- 第五阶段(第 5 章):换设备类型。块设备的请求队列与 bio,网络设备的收发包路径,以及四类驱动模型的横向对照。
- 第六阶段(第 6 章):让驱动变得稳健。同步原语与一个真实的双进程竞态案例、时间与时序、电源管理、安全设计、性能优化。
- 第七阶段(第 7 章):调试。两起排错实录(probe 失败与中断未注册)、静态分析、压力测试、从 oops 日志追到根因。
- 第八阶段(第 8 章):走出内核。构建与跨版本兼容、驱动的发布与维护、UIO/VFIO 用户态驱动方案、Rust 驱动与前沿演进。
全书知识地图

怎样使用本教程
如果你从未接触过内核开发,请按章节顺序推进:第 1、2 章是地基,跳过它们直接学设备树,会在 probe 为什么不被调用这类问题上反复碰壁。如果你已有模块开发经验,可以把第 2 章当复习,直接进入第 3、4 章的硬件交互与设备模型——这两章是从"能跑的玩具驱动"到"可合入主线的驱动"之间的分水岭。
全书代码基于 Linux 内核长期维护版本的开发惯例编写,接口随内核演进可能有细节差异,遇到编译报错时,先查你所用内核版本的头文件与文档,再怀疑教程——这本身就是驱动工程师的日常素养。每章末尾的支柱页给出了可检验的能力清单,建议读完一章后逐条自测:答不上来的,回到对应小节重读。
驱动开发不承诺速成,但馈赠真实:当那盏 LED 在你的命令行下亮起,你就已经站在了软件与硬件的交界处——那里是数字世界与物理世界相互妥协、相互成就的地方,也是这本教程要带你抵达的地方。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...