ARMv7-A小系统实践(四):从ELF、模式栈到第一行串口输出
本章记录什么
这一章把前两章的寄存器规则和调用规范放进真正的启动路径:镜像被放到什么地址,向量表为何必须对齐,链接脚本如何给代码、数据、页表和各模式栈分配空间,启动汇编又如何把一个没有 C 运行时的处理器带到 kernel_main。这是后续一切功能的地基。
在这一章之前做了什么
此时已经知道处理器模式会选择不同的 banked sp,也知道调用 C 前必须满足 AAPCS 的栈对齐和寄存器约定。但这些知识仍是静态规则。启动阶段要把它们变成具体地址:先屏蔽异步事件,建立向量基址和每模式栈,清理 BSS,再由 CPU0 进入共享初始化;CPU1 不能重复执行同一套破坏性操作。
本章会从链接合同讲到第一行串口输出,并给出一份可独立阅读的启动汇编。代码不是“最终模板”,而是一条可以逐条断点验证的最小路径。