SMP 启动先由 boot hart 完成内存、页表和调度基础初始化,再通过 SBI HSM 或平台机制启动 secondary hart。次级 hart 需要建立自己的栈、页表相关状态、trap 向量和 per-CPU 数据,随后进入 idle,等待调度器把工作分给它。hart 已经开始取指,不等于该 CPU 已经安全上线。
全局初始化和本地初始化不能抢跑
启动 CPU 先初始化其他 hart 将共享的页表、内存分配器、IPI 控制和调度数据,再发布“可以启动”的状态。次级 hart 看到状态后才使用这些资源,并在本地初始化完成后回报 ready。这里需要正确的内存屏障和状态机;日志打印出“secondary started”只能说明走到了某一步,不能证明已经看到完整共享数据。
常见故障集中在地址与中断链路
排障时核对设备树 CPU 节点、ISA 扩展一致性、hart_start 入口物理地址、次级栈、IPI 和定时器中断。若 hart 启动后立刻挂住,优先检查 trap 向量和页表映射;若 CPU 显示 online 却没有工作,继续检查调度域和中断亲和性。每个阶段都留下可区分的标记,比只在启动函数开头打印一行更有用。