人工精选5.3.字符设备驱动高级-linux驱动开发第3部分
先弄清楚:这门课解决什么问题 很多做嵌入式底层的人,能照着网上的例子写出一个最简单的字符设备,insmod 也能看到模块加载成功,但一旦发现设备节点没有自动生成、或者要去操作具体硬件寄存器时,就完全卡住了。这门课就是专门补这个缺口的。它不讲怎么搭环境,也不讲基础语法,而是直接面对两个真实的开发场景:
会员 · 按档位
游客按标价购买,不享受上表折扣。
支付成功后自动发放网盘链接,链接失效可找客服免费补
先弄清楚:这门课解决什么问题
很多做嵌入式底层的人,能照着网上的例子写出一个最简单的字符设备,insmod 也能看到模块加载成功,但一旦发现设备节点没有自动生成、或者要去操作具体硬件寄存器时,就完全卡住了。这门课就是专门补这个缺口的。它不讲怎么搭环境,也不讲基础语法,而是直接面对两个真实的开发场景:第一,怎么用内核提供的新接口去注册字符设备,并且让 udev 自动创建设备文件,不用每次都手动敲 mknod;第二,怎么在驱动里去操作底层硬件寄存器,把虚拟地址和物理地址的映射关系彻底理顺。如果你平时的工作只是写应用层代码,对底层内核的运行机制没有概念,学这门课之前,你需要对 Linux 模块的基本加载流程、文件操作结构体有初步了解,否则直接看代码分析会觉得很吃力。
建议先看哪几块,资料怎么配合练习
拿到资料后,不要从头到尾顺序播放,建议先看新接口注册和自动创建设备文件这两块。这两部分解决的是驱动框架问题,你看完就能知道 cdev 是怎么和设备号绑定的,class 和 device 这两个结构体在内核里到底是怎么配合工作的。看完这两块,立刻在自己机器上写一个空壳驱动,验证能否自动生成节点。然后再去寄存器映射那几节,重点看静态映射表的建立过程和动态映射结构体的使用方式。这里有个很实在的建议:视频里的代码一定要自己对着内核源码去走一遍。这门课的资料里有不少对内核内部函数的拆解,光看视频很容易觉得看懂了,但一关掉视频自己写就懵。最好的办法是,看代码分析那几节时,直接打开对应版本的内核源码树,跟着把相关函数点进去看,把调用链自己画在纸上,这样比单纯听课有效得多。
学完能独立做什么
学完这套资料,你能独立写出一个完整的、符合规范的字符设备驱动,并且具备在驱动里控制具体硬件的能力。具体来说,你不再需要抄别人的初始化模板,而是清楚自己每一行代码的作用:知道为什么要申请设备号、怎么把 file_operations 挂进去、怎么让用户空间的程序通过 open 和 read 触发到底层的硬件动作。同时,你对内核里寄存器操作的几种方式会有清晰的判断,知道什么时候用静态映射、什么时候用 ioremap 去动态申请,以及用内核封装好的接口去读写寄存器时底层到底发生了什么。这几点综合下来,你拿到一块没接触过的开发板,只要对照芯片手册,就能自己从零搭起驱动框架,把引脚配置好,跑通最基本的硬件交互。这对于做板卡移植或者底层外设调试的人来说,是日常工作中最核心的产出能力。
课程目录
课程目录12 集
- 1 5.3.1.注册字符设备驱动新接口1 (32:03).mp4
- 2 5.3.2.注册字符设备驱动新接口2 (25:10).mp4
- 3 5.3.3.注册字符设备驱动新接口3 (36:28).mp4
- 4 5.3.4.注册字符设备驱动新接口4 (29:43).mp4
- 5 5.3.5.字符设备驱动注册代码分析1 (23:02).mp4
- 6 5.3.6.字符设备驱动注册代码分析2 (21:05).mp4
- 7 5.3.7.自动创建字符设备驱动的设备文件 (26:34).mp4
- 8 5.3.8.设备类相关代码分析1 (23:04).mp4
- 9 5.3.9.设备类相关代码分析2 (22:40).mp4
- 10 5.3.10.静态映射表建立过程分析 (37:23).mp4
- 11 5.3.11.动态映射结构体方式操作寄存器 (20:50).mp4
- 12 5.3.12.内核提供的读写寄存器接口 (30:46).mp4





