ARMv7-A小系统实践(十一):启动CPU1,走通SCU与SGI核间通信

本章记录什么

这一章把单核可运行系统扩展为 Cortex-A9 双核启动底座。重点是共享状态和每核状态的边界:BSS、页表和 Distributor 只能由主核负责共享初始化;模式栈、GICC、PPI、CP15、TLB 和 L1 Cache 则必须由每个 CPU 分别建立。

在这一章之前做了什么

单核路径已经能够启动 MMU、Cache、GIC 和任务调度,但直接让 CPU1 执行同一入口会引入竞争:两个核可能同时清 BSS、重复初始化全局对象,或者共用一份 SVC/IRQ 栈。为此启动入口先读取 MPIDR 分流,CPU1 在 release flag 上等待,CPU0 完成发布后再用 cache clean、屏障和事件唤醒次核。

本章给出启动时序、SGI 往返验证和次核初始化代码,同时明确“第二个核在线”不等于“已经完成 SMP 调度器”。


:D 一言句子获取中...