启动流程
启动流程主要分为 多个阶段: 固件阶段 与 bootloader阶段 与 内核启动阶段.
固件阶段
总的来说 固件阶段这些架构都会进行 指针的初始化 各种自检 栈指针设置 页表启用 时钟 中断设置等. 最后交给bootloader阶段
具体的
amd64
固件类型: BIOS/UEFI
CPU上电后从
0xFFFF_FFF0(复位向量)取指 跳转到BIOS/UEFI固件代码.
对于BIOS模式, 先进行上电自检(POST) 初始化硬件 然后按照启动顺序寻找引导设备 读取主引导扇区(MBR) 然后将控制权移交.
对于UEFI模式, 从EFI分区(ESP)加载 .efi 格式的引导程序.
esp32-c3
固件类型: 一级引导/二级引导 esp32等嵌入式开发板可能具有多个 bootloader.
一级引导位于Mask Rom,二级引导位于Flash.
CPU上电 从地址
0x4000_0000开始执行ROM根据GPIO状态 来选择启用下载模式 或是 Flash启动模式
从Flash偏移
0x0处加载二级引导.
riscv64
固件类型: OpenSBI + U-Boot
上电后从 复位向量
0x1000或者0x1_0000取指执行ROM中的 ZSBL(零级引导) 或直接运行 OpenSBI