# 启动流程 启动流程主要分为 **多个阶段**: 固件阶段 与 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阶段 ## 内核阶段