ARMv8(aarch64/RPi4)及Cortex-A72 secondary CPU启动技术问询
问题解答
1. 树莓派3内核接管后多核心执行逻辑
The Raspberry Pi 3 has four core processors, and after the device is powered on, each core begins to execute the same code.
内核接管控制权后,不会让4个核心都像primary CPU一样执行完整的内核初始化流程。初始阶段所有核心执行相同代码,但很快会通过读取核心ID等硬件识别方式,区分出primary核心(通常为core 0),其余secondary核心会进入等待状态。直到primary核心完成内核初始化关键步骤后,才会通过特定机制唤醒secondary核心,让它们执行内核调度分配的任务,而非重复primary的初始化流程。
2. 关于boot_reg的说明
boot_reg是ARM架构中用于引导secondary核心的专用硬件寄存器。它的核心作用是存储secondary核心被唤醒后需要执行的第一条指令的地址。primary核心会先将secondary核心的启动代码地址写入该寄存器,再通过处理器间中断(IPI)等硬件信号唤醒secondary核心,核心醒来后直接从boot_reg指定的地址开始执行代码。
3. Cortex-A72 secondary核心启动步骤
启动Cortex-A72的secondary核心需遵循ARM架构多核心引导流程,大致步骤如下:
- 准备启动代码:为secondary核心编写轻量启动代码,完成MMU、缓存等基础初始化,确保能接入主内核调度器。
- 配置
boot_reg:primary核心将secondary启动代码的物理地址写入对应核心的boot_reg寄存器(具体地址需参考芯片官方手册)。 - 唤醒secondary核心:通过发送处理器间中断(IPI)或设置硬件唤醒信号,触发secondary核心退出低功耗/等待状态。
- 接入内核:secondary核心执行启动代码完成自身初始化后,向主内核注册,成为可调度核心,开始执行内核分配的任务。
内容的提问来源于stack exchange,提问作者k1r1t0
相关产品推荐
相关产品推荐

