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

相关推荐
阿钱真强道2 小时前
07 jetlinks-ubuntu20-rk3588-部署
linux·运维·服务器·网络协议·tcp/ip
Realdagongzai2 小时前
Python学习过程记录3-操作列表
linux·vscode·python·kernel
坐怀不乱杯魂2 小时前
Linux网络 - Socket编程(IPv4&IPv6)
linux·服务器·网络·c++·udp·tcp
燃于AC之乐2 小时前
【Linux系统编程】进程地址空间完全指南:页表、写时拷贝与虚拟内存管理
linux·操作系统·虚拟内存·进程地址空间
_OP_CHEN2 小时前
【Linux系统编程】(二十三)从块到块组:Ext2 文件系统核心架构的初步认识
linux·操作系统·文件系统·c/c++·ext2文件系统·磁盘分区·块组
刘某的Cloud2 小时前
docker cp 传文件,使用 docker exec 结合 tar 流传输,效率更高且能保留权限
linux·运维·docker·容器·系统
m0_748244962 小时前
【Linux 系列】Linux 命令/快捷键详解
linux·运维·服务器
showker2 小时前
Mac mini-macOS Tahoe 26.1-安装ftp服务-用户名密码都对,就是提示530 login incorrect
linux·服务器·数据库
未来之窗软件服务2 小时前
服务器运维(二十八)阿里云清理服务器瘦身降低漏洞风险—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟