启动流程

启动流程主要分为 多个阶段: 固件阶段 与 bootloader阶段 与 内核启动阶段.

固件阶段

总的来说 固件阶段这些架构都会进行 指针的初始化 各种自检 栈指针设置 页表启用 时钟 中断设置等. 最后交给bootloader阶段

具体的

amd64

  • 固件类型: BIOS/UEFI

  • CPU上电后从0xFFFF_FFF0(复位向量)取指 跳转到BIOS/UEFI固件代码.

对于BIOS模式, 先进行上电自检(POST) 初始化硬件 然后按照启动顺序寻找引导设备 读取主引导扇区(MBR) 然后将控制权移交.

对于UEFI模式, 从EFI分区(ESP)加载 .efi 格式的引导程序.

esp32-c3

  • 固件类型: 一级引导/二级引导 esp32等嵌入式开发板可能具有多个 bootloader.

一级引导位于Mask Rom,二级引导位于Flash.

  1. CPU上电 从地址0x4000_0000开始执行

  2. ROM根据GPIO状态 来选择启用下载模式 或是 Flash启动模式

  3. 从Flash偏移0x0处加载二级引导.

riscv64

  • 固件类型: OpenSBI + U-Boot

  1. 上电后从 复位向量 0x1000或者 0x1_0000取指

  2. 执行ROM中的 ZSBL(零级引导) 或直接运行 OpenSBI

bootloader阶段

内核阶段