这门课解决什么问题

很多做单片机或刚碰开发板的人,对 uboot 的认知停在“烧进去就能跑”,一旦板子起不来、或者要改个启动参数,就对着源码抓瞎。这门课聚焦的就是这段从上电到进系统主函数之间的“黑盒”:reset 怎么设栈、lowlevel 怎么碰硬件、BSS 段为什么必须清零、board_init_f 那一串初始化序列到底在干什么。它不是教你写一个 boot,而是带你在真实工程源码里把启动链路一行行走通,搞懂为什么这几行代码非在此时此刻执行不可。场景很具体:板子死在启动阶段、需要调启动参数、或者要往新主控上移植时,你得知道改哪里、为什么这么改。

适合什么基础、学完能独立做什么

这课不适合零基础。你得先懂 C 指针、结构体,看过 ARM 汇编的基本指令,最好已经能用交叉工具链编译过简单裸机程序。资料里讲 reset、lowlevel、重定位这些环节时,是默认你看得懂反汇编和链接脚本的,否则会很吃力。学完之后,你应当能独立完成几件具体的事:拿着一块陌生开发板,对照源码指出它的启动阶段分哪几步、每步调了哪些初始化函数;在板子启动卡死时,能根据串口打印或反汇编判断卡在 board_init_f 之前还是之后;做底层移植时,知道堆栈怎么分、uboot 镜像为什么要重定位、BSS 段不清零会引发什么诡异 bug。这比单纯会跑个例程要扎实得多。

建议先看哪几块、资料怎么配合练习

拿到资料别按顺序从头啃,建议先看目录分析那节,建立全局地图,知道源码哪部分是平台相关、哪部分是板级相关。接着直接跳到 reset 函数分析,把从上电入口到分配堆栈这段看透,这是整条链路的骨架。然后看重定位和 BSS 段处理,这两块是很多人卡住的地方,理解了它,后面 board_init_f 的初始化序列就顺理成章。练习上,强烈建议手边有块开发板,或者至少配一套能跑的 qemu 仿真环境。看视频时同步打开对应的 uboot 源码,老师讲到哪个函数,你就在编辑器里跟到哪一行。重点是把关键函数加断点单步跑,观察寄存器和内存的变化。光看不敲,过两周基本全忘,必须让代码在机器上真正跑过一遍,才算把这门课的东西内化成自己的。


深刻理解uboot启动过程

课程目录

*   01 uboot目录分析/

  *   01 uboot目录分析.mp4 (64.74 MB), 13:29

*   02 uboot启动流程详解/

  *   01 reset函数分析(1).mp4 (71.33 MB), 11:37

  *   02 reset函数分析(2).mp4 (28.92 MB), 04:53

  *   03 lowlevel函数分析.mp4 (82.17 MB), 12:51

  *   04 创建堆栈和分配资源.mp4 (64.58 MB), 10:25

  *   05 uboot和中断向量重定位.mp4 (66.30 MB), 11:02

  *   06 清零BSS段.mp4 (60.33 MB), 10:27

  *   07 board_init_f初始化序列(1).mp4 (59.90 MB), 08:49

  *   08 board_init_f初始化序列(2).mp4 (58.58 MB), 08:46

  *   09 board_init_f初始化序列(3).mp4 (51.75 MB), 07:37

  *   10 relocate_code函数分析.mp4 (26.03 MB), 04:28

  *   11 board_init_r初始化序列(1).mp4 (37.78 MB), 06:05

  *   12 board_init_r初始化序列(2).mp4 (31.08 MB), 04:58

  *   13 board_init_r初始化序列(3).mp4 (69.61 MB), 13:29