Linux 设备驱动是内核开发里最贴近硬件的一层,也是很多做嵌入式、工控、IoT 的工程师绕不开的槛。这门课解决的不是“背几个函数”的问题,而是让你理解设备驱动在内核里的位置:字符设备、块设备、I/O 端口、内存映射、DMA、电源管理,以及驱动模块怎么被内核装载和卸载。学完你面对一块新的外设芯片,至少知道该往哪个方向查资料、怎么写一个能加载的模块、怎么处理中断和内存访问。
先判断自己适不适合
这门课不适合完全没接触过 C 语言和 Linux 命令行的新手。你需要具备的基础是:会用 gcc 编译普通程序,理解指针、结构体、内存分配,能在 Linux 下操作文件、查看内核日志。如果你写过简单的应用层程序,但对内核模块没有概念,那就正好从“设备驱动简介”和“内核 module 的装载与执行”开始看。这两块把驱动的基本框架讲清楚了:一个模块怎么入口、怎么注册、怎么卸载,以及内核如何管理这些模块。如果你已经写过一些模块,只是想补硬件细节,可以直接跳到 I/O port 和 I/O memory 以及 DMA 部分。
建议先看哪几块
第一次学,别急着看后面的扩展知识。建议按这个顺序:先看“设备驱动简介”,弄清楚字符设备、块设备和调试手段的区别;再看“内核 module 的装载与执行”,搞明白 insmod、rmmod 背后发生了什么;然后看“设备驱动编译、加载相关”,这部分会带你处理实际编译中常见的头文件路径、Makefile 和版本匹配问题。这三块是地基,地基不牢,后面的高级细节只会越看越懵。
等你能自己写一个最简单的字符设备驱动并成功加载,再进入“高级细节”系列。这些内容分别讲 I/O 端口、内存映射、DMA、固件加载和电源管理。每一块都是独立主题,不需要一口气看完,遇到具体硬件时再回头查对应章节。最后的“设备驱动例子”和“扩展知识”适合你在完成前面的练习之后,用来对照真实驱动的写法,看看别人怎么处理错误、怎么组织代码结构。
学完能独立做什么
这门课学完,你能独立完成的事情包括:为一块简单的字符设备(比如 GPIO 按键、LED 灯、串口芯片)编写可加载的内核模块,实现 open、read、write、release 等基本操作;处理 I/O 端口或内存映射,避免直接访问硬件地址带来的崩溃;在需要搬运大量数据时,正确使用 DMA 而不是靠 CPU 反复拷贝;理解电源管理接口,让设备在空闲时进入低功耗状态;以及遇到系统崩溃时,知道如何从 dmesg 和 crash 信息里定位是驱动代码的问题还是硬件时序的问题。
但要注意,驱动开发不是只看视频就能学会的。这门课的资料里有很多示例和讲解,你需要配合自己的实验环境来练:准备一台 Linux 虚拟机或开发板,按照课程里的思路,从最简单的 hello world 模块开始,逐步加上设备号、file_operations、中断处理。每看完一个专题,就动手改一个现成的驱动例子,故意制造错误,观察内核的报错信息。只有真正把模块加载到内核里,看到自己的代码控制了硬件,才算把知识变成能力。
课程目录
课程目录15 集
- 1 编写设备驱动的经验一 (26:42).mp4
- 2 编写设备驱动的经验二 (22:20).mp4
- 3 编写设备驱动的经验三 (27:46).mp4
- 4 设备驱动编译、加载相关 (25:20).mp4
- 5 内核module的装载与执行 (21:47).mp4
- 6 设备驱动简介(字符设备、块设备、调试)、高级细节 (24:14).mp4
- 7 高级细节 (24:56).mp4
- 8 I/O port和I/O memory (26:53).mp4
- 9 高级细节(DMA) (28:33).mp4
- 10 高级细节(firmware) (26:08).mp4
- 11 高级细节(动态电源管理、电源管理) (22:52).mp4
- 12 设备驱动例子 (20:54).mp4
- 13 扩展知识一 (32:40).mp4
- 14 扩展知识二 (27:06).mp4
- 15 关于crash、硬件狗、参考文档 (13:38).mp4






