Linux 设备驱动模型是内核里最容易被“会用”但“说不清”的一块。很多开发者能照着写字符设备驱动,但一旦涉及设备树、总线匹配、热插拔事件,就只剩模糊印象。这门课不是从零教你写驱动,而是把驱动模型本身拆开讲:它为什么存在、各个结构体之间怎么串联、内核如何通过 kobject 和 sysfs 把设备信息暴露给用户态。
这门课解决什么场景
工作中最典型的困惑是:设备驱动加载后,为什么会在 /sys 下生成对应目录?为什么注册一个 platform_driver 就能和 device 自动匹配?为什么插拔 USB 时用户态能收到 uevent?这些问题背后是同一套机制。课程用三节内容,分别对应模型的三个层次:kobject 与 kset 是对象和集合的底层抽象,bus、device、uevent 解决设备如何被枚举和通知,device_driver、class、辅助 API 则回答驱动如何绑定设备、如何组织成可访问的接口。学完你就能把“写一个 probe 函数”这个动作,还原成内核中一整套对象生命周期管理。
适合什么基础,先看哪几块
适合已经写过至少一种字符设备驱动、对内核模块编译和加载不陌生的人。如果你还完全不理解 file_operations 和 register_chrdev,建议先补基础再来看这门课。资料本身是按顺序推进的,但不必一次看完。建议先看第一节,重点是理解 kobject 的引用计数和 kset 的分组作用——这是后面所有环节的根基。看完后可以手动在开发板上读取 /sys 下的目录结构,对照课程讲的内容。然后看第二节的 bus 和 device,注意 device 是怎么被添加到总线上的,以及 uevent 的触发条件。第三节的 driver 和 class 可以放在最后,结合一个你写过的驱动,观察它注册后系统里多出了哪些 class 和 device 节点。
学完能独立做什么,资料怎么配合练习
学完后,你能够独立分析一个陌生驱动在系统里的注册流程,能解释为什么某些驱动在设备树匹配成功后才会调用 probe,也能自己编写一个简单的总线驱动,让自定义设备与驱动完成匹配。更重要的是,当驱动加载异常时,你可以通过 /sys 和 dmesg 快速定位是对象创建失败还是绑定失败,而不是盲目打印调试。资料里的每一节都配有示例代码,但不要只看。建议准备一块带 Linux 内核的开发板或虚拟机,每看完一节,就在内核源码里找到对应的结构体定义,用 grep 追踪它的调用链。尤其要动手写一个小模块,创建自己的 kobject 和 kset,观察 sysfs 的变化。把三节内容对应的示例都跑通后,再回头读一遍,你会看到一条从对象到总线再到驱动的完整路径。
课程目录
1 设备驱动模型主要考虑的问题、kobject、kset (24:07).mp4 2 bus、device、uevent (30:48).mp4 3 device_driver、class、辅助API (22:01).mp4






