驱动开发的起点:从内核解剖到字符设备
很多开发者卡在内核驱动这一块,不是因为 C 语言不够熟,而是因为没有建立“内核视角”。你写的代码不再运行在用户态的舒适区,而是直接操纵硬件、中断和内存映射。这门课解决的核心问题,正是帮你跨过从应用开发到底层驱动的鸿沟。它假设你已经熟练运用 C 语言,并具备 Linux/Unix 系统编程的基础,如果你还在纠结指针和结构体,或者对 shell 命令不熟悉,建议先把这些补齐再回来。课程并不从零教你 Linux 怎么安装,而是直接切入内核的组织结构与驱动编写机制。你会看到,内核不是黑盒,而是一套严谨的子系统架构,理解这一点,后续写代码才能有据可依。
实战路径:贯穿启动到设备的全链路
课程内容沿着一条清晰的实战主线展开,不是零散的知识点堆砌。起始部分是 Bootloader 与内核的配置编译,包括环境变量设置、内核裁剪以及文件系统的制作。这一步看似基础,却是理解整个嵌入式 Linux 系统如何跑起来的钥匙。紧接着是烧写环节,让你亲手把编译好的产物部署到目标设备上,这种“看得见结果”的反馈对于建立信心至关重要。随后进入内核源码的深水区:Makefile 和 Kconfig 的编写逻辑、内核目录功能解析、以及如何高效查看内核源码。掌握了这些工具和方法,你就拥有了阅读庞大开源代码库的能力。
在驱动编写的核心章节,课程聚焦于字符设备驱动的开发。这不仅仅是写一个 demo,而是涵盖了非阻塞 IO、阻塞 IO、异步 IO 以及 IO 复用等关键接口。很多开发者在应用层见过 select/poll/epoll,但在驱动层如何实现它们往往是一笔带过,这里会给出完整的实现逻辑。此外,中断机制是驱动开发的另一大难点,包括中断共享、中断上下半部的处理,这些都是实际工作中避不开的高频考点和实战难点。通过 LCD、触摸屏、传感器、键盘等常见设备的驱动编写案例,你将把这些理论转化为可运行的代码。
学习预期与配套建议
学完这门课后,你应当能够独立分析 Linux 内核结构,编写基本的字符设备驱动,并处理中断等异步事件。你不再是对着内核源码发呆的门外汉,而是能够定位问题、修改配置、编写代码的初级驱动工程师。为了达到这个目标,建议先看前几块关于内核组织和 Makefile/Kconfig 的内容,打好地基再动土建楼。在练习环节,务必跟随视频一边听一边敲代码,驱动开发是实践学科,看懂不代表会写。资料包中的代码示例和配置文件要配合讲解反复调试,特别是中断和 IO 模型部分,建议在虚拟机或开发板上实际验证效果,这样才能真正内化为你的能力。
课程介绍
适合人群: 熟练使用C语言并了解Linux/Unix系统编程者 你将会学到: 学习linux内核的组织结构,提供的编写驱动的机制,学习利用内核的子系统编写驱动的框架流程,并编写常见设备的驱动,比如:LCD、触摸屏、三轴加速传感器、键盘、灯、数据采集之模拟信号的抽样等。这里会通过实战方式,一边讲一边写代码的授课方式,一步步带你成为底层高级linux驱动工程师。 核心内容 1. 学习bootloader的命令、环境变量设置、内核的裁剪配置编译、文件系统的制作; 2. Bootloader、内核、文件系统的烧写; 3. linux内核的目录组织及功能、Makefile、Kconfig的作用及编写; 4. 内核源码的查看工具及方式、设备驱动的分类、字符设备驱动的编写; 5. 学习非阻塞型IO、阻塞型IO、异步IO、IO复用等驱动接口; 6. 学习内核的中断的机制、中断共享、中断的上下半部等; 7. 学习GPIO子系统、INPUT子系统的代码框架及编程接口,编写驱动流程; 8. 学习驱动模型、platform总线、spi总线、i2c总线的代码框架及驱动编写流程; 9. 学习内核延时、定时器、高精度定时器;设备树、同步机制、内核线程等技术; 10. 学习驱动程序的调试技术、proc文件的生成技术点、内核数据结构等; 11. 学习常见设备如网卡、USB、声卡等驱动的移植过程。
课程目录
1627285e-514b-4e83-b1f5-455de656bfdc.png 2025-1-18 12:51 上传 课程介绍: 适合人群: 熟练使用C语言并了解Linux/Unix系统编程者 你将会学到: 学习linux内核的组织结构,提供的编写驱动的机制,学习利用内核的子系统编写驱动的框架流程,并编写常见设备的驱动,比如:LCD、触摸屏、三轴加速传感器、键盘、灯、数据采集之模拟信号的抽样等。这里会通过实战方式,一边讲一边写代码的授课方式,一步步带你成为底层高级linux驱动工程师。 核心内容 1. 学习bootloader的命令、环境变量设置、内核的裁剪配置编译、文件系统的制作; 2. Bootloader、内核、文件系统的烧写; 3. linux内核的目录组织及功能、Makefile、Kconfig的作用及编写; 4. 内核源码的查看工具及方式、设备驱动的分类、字符设备驱动的编写; 5. 学习非阻塞型IO、阻塞型IO、异步IO、IO复用等驱动接口; 6. 学习内核的中断的机制、中断共享、中断的上下半部等; 7. 学习GPIO子系统、INPUT子系统的代码框架及编程接口,编写驱动流程; 8. 学习驱动模型、platform总线、spi总线、i2c总线的代码框架及驱动编写流程; 9. 学习内核延时、定时器、高精度定时器;设备树、同步机制、内核线程等技术; 10. 学习驱动程序的调试技术、proc文件的生成技术点、内核数据结构等; 11. 学习常见设备如网卡、USB、声卡等驱动的移植过程。 课程目录: 1内核驱动开发概述[01:31:42] 2内核源码查看方法[30:38] 3内核和文件系统的烧写[31:12] 4根文件系统的制作[27:28] 5内核编译组织结构[30:16] 6Kconfig文件语法[14:12] 7Kconfig文件语法[40:48] 8Kconfig和Makefile之间的关系[25:44] 9系统调用函数实现的本质[49:35] 10内核中实现并添加亮灭led的系统调用函数[53:55] 11应用层测试内核中添加的系统调用函数实现led的亮灭[13:30] 12驱动模块的编写技术[53:05] 13驱动模块的编写技术[01:15:10] 14系统调用和驱动模块的串讲[27:06] 15内核双向循环链表的思想机制[59:27] 16内核操作双向循环链表的接口精讲及应用实例[01:05:17] 17内核中动态申请内存空间的接口[01:05:21] 18设备驱动的分类、设备文件和内核驱动之间的关联[47:53] 19古老的字符设备驱动注册接口及代码实例[51:31] 20系统调用和内核驱动之间的调用过程[51:21] 21LED字符设备驱动[01:16:36] 22LED之字符设备驱动的第二种注册方式及app编写[25:21] 23一套驱动支持多个设备的内核缓存设备驱动编写技术[01:21:20] 24内核缓存设备驱动的测试app编写[09:46] 25小节复习[15:25] 26内核缓存设备驱动之进程阻塞[39:01] 27内核缓存设备驱动之IO复用poll接口实现[18:38] 28poll驱动接口之应用层select测试[40:19] 29poll驱动接口之应用层poll测试[12:41] 30poll驱动接口之应用层epoll测试[20:54] 31混杂字符设备驱动注册方法之led驱动[17:20] 32高级字符设备驱动之ioctl接口实现led操作[37:49] 33利用gpio子系统操作led驱动[39:54] 34小节复习[24:30] 35内核中断请求接口[26:13] 36双边沿触发按键中断注册[24:18] 37中断共享[15:24] 38中断下半部之tasklet实现机制[32:38] 39中断下半部之workqueue实现机制[26:45] 40定制linux内核的启动logo[33:09] 41应用层互斥锁的使用[32:22] 42应用层自旋锁的使用[08:33] 43避免死锁[07:57] 44内核加锁机制之信号量[56:50] 45内核加锁机制之互斥锁和自旋锁[23:39] 46自旋锁解决进程和中断之间的竞争[22:43] 47自旋锁解决进程和中断下半部之间的竞争[15:23] 48原子操作[50:22] 49获取鼠标键盘触摸屏等输入设备数据app编写[01:02:04] 50利用input子系统编写功能键设备驱动[58:47] 51input子系统关于单点触控触摸屏数据的上报[49:03] 52input子系统关于多点触控触摸屏数据的上报[12:34] 53驱动模型思想机制及涉及接口[34:53] 54驱动模型之总线、设备、驱动思想[59:50] 55platform总线机制[39:04] 56小节复习[25:49] 57platform总线匹配规则实例[31:43] 58platform之资源获取实例[35:39] 59SOC各种控制器的设备对象和驱动对象之组织框架[57:57] 60pwm驱动蜂鸣器驱动[59:22] 61测试蜂鸣器驱动之app[15:39] 62小节复习[29:52] 63adc控制器的内核驱动框架结构[01:02:07] 64基于ADC的定位器电压值抽样驱动及app编写[43:33] 65I2C控制器的内核驱动框架分析[01:28:22] 665点触控触摸屏驱动编写一[01:18:47] 675点触控触摸屏驱动编写二[01:06:12] 68基于I2C控制器的从机驱动扩展[40:24] 69为5点触控触摸屏驱动编写Kconfig[05:29] 70操作LCD之frambuffer的APP程序一[55:15] 71操作LCD之frambuffer的APP程序二[36:20] 72内核获取bootloader的bootargs环境变[17:44] 73LCD驱动框架分析一[51:55] 74LCD驱动框架分析二[29:02] 75proc文件创建之LED驱动[40:34] 76proc文件创建之内核缓存设备驱动[20:15] 77proc文件系统之可读写文件的创建[38:06] 78内核系统时间的获取[34:25] 79复习一[52:31] 80复习二[08:54]




