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系统完全运行的各个阶段和交互关系。

相关推荐
ltl3 小时前
存储性能建模:IOPS、吞吐与延迟
linux
刘某的Cloud4 小时前
ceph osd 导入导出 rbd volume 卷
linux·运维·ceph·volume
酸菜。6 小时前
dw_axi_dmac总结
linux
神奇霸王龙7 小时前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
zlinear数据采集卡8 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
小绫网络安全9 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器
allforgood9 小时前
控制启动过程
linux·运维·服务器
西安景驰电子9 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
振南的单片机世界10 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
猫吃了源码10 小时前
k9s简介和安装
linux·docker·kubernetes