能力缺口:能调应用却不敢碰寄存器

很多写惯了高层语言的技术人,面对一块具体的开发板时,往往卡在“代码怎么跑到底层硬件”这个认知断层上。你可能熟练使用各种外设接口的库函数,但一旦被问到处理器上电后第一条指令从哪里取、怎么操作特定物理地址来点亮一盏灯,或者系统调用栈帧在汇编层面到底怎么切换,就会瞬间露怯。这门围绕 Cortex-A9 四核平台展开的裸机驱动开发课,就是用来补这个底层逻辑缺口的。它不教你怎么写业务代码,而是逼你褪掉操作系统的保护伞,直接面对 ARM 架构的寄存器、汇编指令和硬件时序,把“软件控制硬件”的最底层链路彻底打通。

切入点:先通架构再写驱动

这门内容适合有一定 C 语言基础但汇编经验几乎为零、或者看过几眼单片机教程却没搞懂 ARM 体系结构的学习者。建议绝对不要跳着看,前期的环境搭建和架构认知是后续写代码的基石。你可以先跟着把开发平台的引导程序配置好,完成内核镜像到 EMMC 的烧写,把板子跑起来。随后必须死磕 ARM 核心内部寄存器和架构特点这两块,搞清楚不同工作模式下的状态切换。紧接着是内嵌汇编语法和多段指令精讲,这里别假装看懂了,务必手敲代码去验证寻址方式和跳转逻辑。特别要注意 APCS 规则的讲解,这是理解函数调用时栈帧怎么传参、怎么保存现场的关键,弄不懂这个,后面看驱动框架会像看天书。

落地:从点亮灯到独立写裸机驱动

看完前面的架构和规则,最后必须落脚到具体的裸机驱动编写上。课程里给了汇编实现 LED 和按键的范例,你要对照着把控制寄存器的物理地址查阅手册核对一遍,弄懂位操作怎么转化成硬件电平的翻转。学完这套流程,你应该能独立完成一件事:拿到一块陌生的 ARM 芯片,不再依赖现成的固件库,而是直接翻开其数据手册,找到对应外设的寄存器地址,用内嵌汇编或裸机 C 语言写出初始化代码,并控制其工作。配套资料里的代码片段不要直接复制运行,建议自己画一张寄存器映射图,把每条汇编指令对应到图中的数据流向。把按键和灯的驱动自己默写一遍,再去对照视频里的调试过程查漏补缺,这样才算真正补齐了这块底层能力。

课程目录

1 课程计划内容安排 (59:34)
2 uboot的配置编译 (01:25:26)
3 uboot往SD卡及EMMC的烧写 (48:53)
4 linux内核的编译、内核及文件系统往EMMC的烧写 (01:06:11)
5 ARM开发板如何访问笔记本的文件 (13:47)
6 ARM的架构特点 (01:04:54)
7 ARM核心内部的寄存器功能讲解 (47:10)
8 内嵌汇编的语法框架 (57:22)
9 ARM汇编指令精讲一 (01:12:46)
10 ARM汇编指令精讲二 (31:03)
11 ARM汇编指令精讲三 (57:58)
12 ARM汇编指令精讲四 (42:38)
13 APCS规则一 (01:08:57)
14 APCS规则二 (01:41:01)
15 裸机驱动编写框架举例 (36:46)
16 裸机驱动之LED-汇编实现 (33:04)
17 按键裸机驱动-汇编实现 (27:12)
18 裸机驱动之LED-C语言实现 (45:05)
19 按键裸机驱动-C语言实现 (26:21)
20 链接脚本的功能及编写 (33:08)
21 时钟管理单元CMU (51:53)
22 串口驱动一 (01:01:03)
23 串口驱动二 (49:32)
24 串口驱动三 (16:57)
25 串口驱动四 (37:47)
26 MMU功能讲解一 (46:32)
27 MMU功能讲解二 (20:03)
28 MMU功能讲解三 (34:03)
29 异常的分类及异常向量表 (25:59)
30 异常向量表的建立 (46:53)
31 未定义指令异常、数据终止异常、SVC异常 (36:13)
32 Exynos4412上中断控制器GIC的功能讲解 (51:24)
33 关于GIC的中断管理编程 (28:55)
34 看门狗定时器驱动接口实现 (42:01)
35 看门狗定时器驱动buge分析解决 (01:47)
36 中断及看门狗定时器总结 (24:11)
37 看门狗复位信号的产生 (17:14)
38 PWM&TIMER工作原理 (34:43)
39 PWM驱动蜂鸣器 (25:41)
40 蜂鸣器频率自增自减发声 (31:03)
41 外部中断之按键驱动 (59:43)
42 RTC驱动之系统时间的显示和设置 (58:21)
43 RTC之闹钟实现代码编写 (28:55)
44 RTC之闹钟与蜂鸣器结合代码结合 (40:14)
45 BSS段的清除代码编写 (56:33)
46 LCD驱动之硬件原理图一 (23:35)
47 LCD数据手册之工作原理二 (31:49)
48 LCD之SOC显示控制器控制原理三 (27:18)
49 LCD之SOC显示控制器控制原理四 (26:00)
50 LCD驱动实现代码五 (42:34)
51 LCD驱动实现代码六 (34:30)
52 LCD驱动实现代码七 (40:16)
53 在LCD上画图八 (29:10)
54 LCD上显示图片九 (22:19)
55 LCD图层透明度十 (24:16)
56 LCD关键色特性十一 (15:09)
57 LCD上显示字符十二 (46:37)
58 作业思路讲解 (09:28)
59 五点触控触摸屏硬件原理图讲解 (28:44)
60 触摸屏控制模块ft5206数据手册学习 (27:14)
61 I2C控制器控制原理一 (37:54)
62 I2C控制器控制原理二 (14:51)
63 触摸屏驱动代码实现 (26:02)
64 触摸屏驱动代码测试 (16:49)
65 触摸屏驱动代码之滑屏实现 (54:24)
66 ADC之滑动变阻器工作原理一 (26:47)
67 ADC之exynos4412上的ADC控制器工作原理二 (24:17)
68 ADC驱动之查询方式得到样值数字信号三 (19:26)
69 ADC驱动之中断方式得到样值数字信号四 (25:53)
70 exynos4412之bootloader启动过程 (30:26)
71 exynos4412之启动模式选择原理 (17:15)
72 分析bootloader源码移植时钟与内存代码 (01:00:21)
73 纯裸机程序代码(写到SD卡执行)的编写及DEBUG调试整过程 (01:18:05)
74 基于SD卡的纯裸机驱动思路复习 (22:52)
75 图片翻转器翻转图片原理 (30:43)
76 DIY自己的平板控制系统 (26:43)
77 复习一 (31:16)