ATF + ARMv8 多核启动流程图

ATF + ARMv8 多核启动流程图

多核同步与SMP初始化
从核启动流程 (CPU1-N)
主核启动流程 (CPU0)
硬件上电复位
CPU0
CPU1-N
有BL32
无BL32
Spin-table
PSCI


所有CPU核心上电复位
判断主从核
主核 Primary Core
从核 Secondary Cores

保持复位/WFI状态
BL1: Boot ROM

安全初始化
BL2: Trusted Boot

加载验证后续镜像
BL31: EL3 Runtime

初始化PSCI框架
配置从核启动参数
设置Spin-table/PSCI唤醒
检查安全世界
BL32: OPTEE安全OS
BL33: Non-Secure World
U-Boot/Linux Bootloader
Linux内核
等待唤醒事件
唤醒机制
轮询状态寄存器
接收CPU_ON SMC调用
状态=READY?
验证启动参数
跳转到入口点
BL31入口点

secondary_cold_boot
初始化CPU私有资源
配置GIC/MMU
同步点等待
进入BL33/Linux
Linux SMP初始化
CPU拓扑发现
调度器初始化
中断亲和性设置
所有核心在线
系统完全运行

详细阶段说明

阶段1: 硬件复位 (所有核心)

复制代码
所有CPU核心同时上电复位
↓
硬件自动选择CPU0为主核(BSP)
↓
从核(CPU1-N)进入WFI或保持复位状态

阶段2: 主核安全启动链 (ATF流程)

复制代码
BL1 (Boot ROM):
  - 从芯片ROM启动
  - 初始化最小安全环境
  - 加载BL2到Trusted SRAM

BL2 (Trusted Boot):
  - 验证BL31/BL32/BL33镜像
  - 加载可信固件到内存
  - 准备多核启动参数表

BL31 (EL3 Runtime):
  - 初始化安全监控模式
  - 设置PSCI服务框架
  - 配置从核唤醒机制

阶段3: 从核唤醒机制

复制代码
两种唤醒方式并行支持:

1. Spin-table (传统):
   主核设置状态寄存器 → 从核轮询 → 状态就绪 → 跳转执行

2. PSCI (标准):
   主核调用CPU_ON SMC → EL3处理 → 电源域上电 → 释放复位 → 执行

阶段4: 从核冷启动

复制代码
公共入口点: secondary_cold_boot
  ↓
初始化CPU私有资源:
  - 设置异常向量表
  - 配置栈指针
  - 初始化系统寄存器
  ↓
配置系统资源:
  - 启用MMU/缓存
  - 初始化GIC CPU接口
  - 设置性能计数器
  ↓
同步等待:
  - 内存屏障确保一致性
  - 等待所有核心到达同步点
  - 主核释放继续执行

阶段5: 非安全世界启动

复制代码
BL33 (Non-Secure):
  - U-Boot或EDK2引导程序
  - 设备初始化
  - 加载Linux内核
  ↓
Linux内核启动:
  - 早期初始化
  - 内存管理设置
  - 设备树解析

阶段6: Linux SMP初始化

复制代码
CPU拓扑发现:
  - 通过ACPI/DT获取CPU信息
  - 构建sched_domain层级
  - 识别big.LITTLE架构
  ↓
调度器初始化:
  - 设置CPU就绪队列
  - 初始化负载均衡
  - 配置CPU热插拔
  ↓
中断亲和性:
  - 分配中断到特定核心
  - 设置CPU掩码
  - 启用核间中断

阶段7: 系统完全运行

复制代码
所有核心在线状态:
  - CPU0: 运行系统关键任务
  - CPU1-N: 参与任务调度
  - 动态频率调节启用
  - 电源管理策略生效

关键时序点

渲染错误: Mermaid 渲染失败: Invalid date:00:00:00.0075

启动性能优化点

  1. 并行唤醒: 同时唤醒多个从核,减少串行延迟
  2. 延迟初始化: 非关键资源延后初始化
  3. 缓存预热: 提前加载共享数据到缓存
  4. 异步同步: 减少核心间的等待时间
  5. 动态拓扑: 根据系统负载动态上线核心

这个流程图清晰地展示了ATF+ARMv8多核启动的完整过程,从硬件复位到Linux SMP系统完全运行的各个阶段和交互关系。

相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白1 天前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
黄昏晓x1 天前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
2401_892070981 天前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
-ONLY-¥1 天前
PostgreSQL运维全攻略:从基础操作到远程配置
linux