如果你写过字符设备驱动,能编译出 .ko 并 insmod 成功,但被问到"中断上半部和下半部到底怎么分"、"自旋锁和互斥锁在中断上下文里为什么不能随便换"时答不上来,这门课就是冲这些缺口去的。它不是从零讲 C 语言和 Linux 命令的入门课,默认你已经能看懂内核源码目录结构、能独立编译模块,接下来要补的是内核里那些"能跑通但说不清"的部分。
先确认你缺的是哪一块
内核驱动开发的坑往往不在"写不出来",而在"写出来之后不敢改"。下面这些场景,中两条以上就说明该系统过一遍了:
- 申请中断时知道要填 handler,但分不清 request_irq 的 flags 里 IRQF_SHARED 和 IRQF_TRIGGER_* 各自解决什么问题;
- 驱动里用了自旋锁,但说不清它保护的是数据还是代码路径,也不知道为什么持锁期间不能睡眠;
- 看过 wait_queue 和 completion 的代码,但换到自己写的驱动里就不知道选哪个;
- 知道有 workqueue 和 tasklet,但面对一个具体的中断处理需求,判断不出该延迟到哪种上下文执行;
- 改过驱动里的 open/release/ioctl,但 file_operations 与内核对象生命周期的对应关系一直模糊。
这些问题的共同点是:它们都落在"内核机制"和"驱动写法"的交叉处。只背 API 记不住,只看内核源码又太散,需要一个把机制和代码放在一起讲的中间层。
课程覆盖的核心线索
课程沿两条线推进:一条是内核提供的并发与异步机制,另一条是驱动如何把这些机制用对。中断部分不只讲注册注销,更强调上半部要快、下半部怎么选;锁的部分把原子操作、自旋锁、信号量、互斥体放在同一张对比表里,重点讲清各自适用的上下文和睡眠语义;文件系统相关的内容则把 VFS 层与具体驱动的接口对上,帮助你理解用户态一次 read/write 到底经过了哪些内核路径。
这几块拼起来,正好对应驱动开发中最容易被面试和线上问题问住的地方。比如一个中断频繁触发的设备,handler 里做多少事、剩下的交给谁、共享数据用什么保护——这不是三个独立知识点,而是一个必须整体决策的设计问题。
看完应该能回答的问题
判断有没有学到位,不看记了多少 API,看能不能把这些说清楚:
- 为什么中断上下文里不能调用可能睡眠的函数?如果非要做耗时操作,有哪几种延迟执行方式,各自的上下文是什么?
- 自旋锁和互斥体在同一段临界区代码里能不能互换?换错会出什么问题?
- 一个驱动同时被多个进程 open,你的私有数据结构应该挂在哪里,什么时候释放?
- 用户态 write 返回成功,数据是不是一定已经写到硬件了?中间可能经过哪些缓存层?
- 模块卸载时,怎样保证没有中断处理程序还在引用你即将释放的内存?
能答上大部分,说明你补的不是零散知识,而是一套能落到代码里的判断依据。
怎么用这份资料
建议边看边在自己机器上跑:写一个最简单的字符设备,注册一个中断,然后用并发读写去压它,观察加锁和不加锁的差别。课程里的机制讲解只有落到你自己敲的代码上才变成能力。如果手头没有真实硬件,用内核里的虚拟设备或 QEMU 环境也能完成大部分练习。
配套练习不必多,但每个机制至少要自己写一遍、故意写错一次、再改对。比如把该用自旋锁的地方换成互斥体,看内核报什么错——这种错误信息比任何讲解都记得牢。
51CTO - Linux内核驱动开发视频课程
深入内核,掌握驱动开发
编辑点评
系统学习Linux内核驱动开发,从基础到进阶,涵盖中断、锁、文件系统等多个方面。
⭐ 编辑推荐
本课程深入浅出地讲解Linux内核驱动开发,适合有志于在操作系统领域深入发展的开发者。
课程亮点
课程目录
51CTO-Linux内核驱动开发视频课说明.png [493.5 KB] 37.中断共享.mp4 [39.3 MB] 41.应用层互斥锁的使用.mp4 [76.8 MB] 02.内核源码查看方法.mp4 [48.9 MB] 34.小节复习.mp4 [63.6 MB] 56.小节复习.mp4 [41.9 MB] 58.platform之资源获取实例.mp4 [58.8 MB] 65.I2C控制器的内核驱动框架分析.mp4 [206.7 MB] 55.platform总线机制.mp4 [90.6 MB] 54.驱动模型之总线、设备、驱动思想.mp4 [172.2 MB] 57.platform总线匹配规则实例.mp4 [58.3 MB] 70.操作LCD之frambuffer的APP程序一.mp4 [118.3 MB] 77.proc文件系统之可读写文件的创建.mp4 [117.5 MB] 66.5点触控触摸屏驱动编写一.mp4 [216.3 MB] 74.LCD驱动框架分析二.mp4 [111.4 MB] 53.驱动模型思想机制及涉及接口.mp4 [105.5 MB] 68.基于I2C控制器的从机驱动扩展.mp4 [134.1 MB] 67.5点触控触摸屏驱动编写二.mp4 [198.1 MB] 75.proc文件创建之LED驱动.mp4 [106.8 MB] 76.proc文件创建之内核缓存设备驱动.mp4 [63.1 MB] 32.高级字符设备驱动之ioctl接口实现led操作.mp4 [102.7 MB] 09.系统调用函数实现的本质.mp4 [139.3 MB] 45.内核加锁机制之互斥锁和自旋锁.mp4 [67.6 MB] 51.input子系统关于单点触控触摸屏数据的上报.mp4 [152.7 MB] 35.内核中断请求接口.mp4 [66.4 MB] 04.根文件系统的制作.mp4 [40.2 MB] 24.内核缓存设备驱动的测试app编写.mp4 [23.5 MB] 22.LED之字符设备驱动的第二种注册方式及app编写.mp4 [85.7 MB] 62.小节复习.mp4 [88.7 MB] 71.操作LCD之frambuffer的APP程序二.mp4 [104.0 MB] 17.内核中动态申请内存空间的接口.mp4 [177.8 MB] 33.利用gpio子系统操作led驱动.mp4 [135.8 MB] 21.LED字符设备驱动.mp4 [217.9 MB] 28.poll驱动接口之应用层select测试.mp4 [132.3 MB] 43.避免死锁.mp4 [16.9 MB] 03.内核和文件系统的烧写.mp4 [57.7 MB] 20.系统调用和内核驱动之间的调用过程.mp4 [149.9 MB] 29.poll驱动接口之应用层poll测试.mp4 [37.7 MB] 25.小节复习.mp4 [40.3 MB] 69.为5点触控触摸屏驱动编写Kconfig.mp4 [19.8 MB] 01.内核驱动开发概述.mp4 [148.2 MB] 05.内核编译组织结构.mp4 [45.9 MB] 38.中断下半部之tasklet实现机制.mp4 [93.3 MB] 47.自旋锁解决进程和中断下半部之间的竞争.mp4 [45.5 MB] 40.定制linux内核的启动logo.mp4 [113.0 MB] 72.内核获取bootloader的bootargs环境变量.mp4 [63.4 MB] 73.LCD驱动框架分析一.mp4 [143.5 MB] 61.测试蜂鸣器驱动之app.mp4 [43.1 MB] 13.驱动模块的编写技术.mp4 [176.3 MB] 59.SOC各种控制器的设备对象和驱动对象之组织框架.mp4 [123.2 MB] 52.input子系统关于多点触控触摸屏数据的上报.mp4 [43.6 MB] 14.系统调用和驱动模块的串讲.mp4 [50.4 MB] 15.内核双向循环链表的思想机制.mp4 [151.4 MB] 64.基于ADC的定位器电压值抽样驱动及app编写.mp4 [108.7 MB] 50.利用input子系统编写功能键设备驱动.mp4 [155.8 MB] 23.一套驱动支持多个设备的内核缓存设备驱动编写技术.mp4 [212.4 MB] 36.双边沿触发按键中断注册.mp4 [69.8 MB] 39.中断下半部之workqueue实现机制.mp4 [66.4 MB] 19.古老的字符设备驱动注册接口及代码实例.mp4 [144.7 MB] 44.内核加锁机制之信号量.mp4 [157.1 MB] 16.内核操作双向循环链表的接口精讲及应用实例.mp4 [189.9 MB] 60.pwm驱动蜂鸣器驱动.mp4 [161.5 MB] 30.poll驱动接口之应用层epoll测试.mp4 [56.1 MB] 46.自旋锁解决进程和中断之间的竞争.mp4 [63.6 MB] 49.获取鼠标键盘触摸屏等输入设备数据app编写.mp4 [163.4 MB] 48.原子操作.mp4 [113.5 MB] 10.内核中实现并添加亮灭led的系统调用函数.mp4 [148.2 MB] 80.复习二.mp4 [20.3 MB] 11.应用层测试内核中添加的系统调用函数实现led的亮灭.mp4 [32.2 MB] 26.内核缓存设备驱动之进程阻塞.mp4 [102.8 MB] 08.Kconfig和Makefile之间的关系.mp4 [86.3 MB] 18.设备驱动的分类、设备文件和内核驱动之间的关联.mp4 [101.2 MB] 42.应用层自旋锁的使用.mp4 [18.4 MB] 79.复习一.mp4 [113.3 MB] 78.内核系统时间的获取.mp4 [91.5 MB] 27.内核缓存设备驱动之IO复用poll接口实现.mp4 [57.0 MB] 07.Kconfig文件语法.mp4 [104.2 MB] 31.混杂字符设备驱动注册方法之led驱动.mp4 [47.8 MB] 63.adc控制器的内核驱动框架结构.mp4 [157.3 MB] 12.驱动模块的编写技术.mp4 [153.8 MB] 06.Kconfig文件语法.mp4 [16.8 MB]
适合人群
- Linux内核开发者
- 操作系统爱好者
- 嵌入式系统工程师
学习收获
祝您学习愉快!
学有所成,前程似锦!






