当前位置:首页>Linux>【ARMv8】初始Linux&Android上电启动流程

【ARMv8】初始Linux&Android上电启动流程

  • 2026-08-25 12:55:37
【ARMv8】初始Linux&Android上电启动流程

    同志们,掌握MCU、吃透RTOS已经不易,但我们绝不能就此满足!如今,能够提供更强算力和更丰富资源的SoC应用场景正在迅速扩展,各类芯片平台层出不穷:海思麒麟、瑞芯微、高通、联发科……我们正应乘势而上,占领这些技术高地!接下来,我们要实现的是纵向突破——推开那扇通往Linux与Android世界的大门!

    现代MPU(微处理器单元)早已超越单一计算核心的范畴,演进为高度集成、能力全面的片上系统(SoC)。它们普遍采用多核架构(如4核、8核,乃至A76×4+A55×4等组合),支持高效并行处理,整体性能十分强劲。这些芯片不仅具备多级高速缓存、各类DDR控制器、多种存储接口(如eMMC、SD、UFS等),还广泛集成GPU、NPU、MCU,以及丰富的外设与通信接口控制器。而要充分发挥这些硬件的潜力,必须依赖规模庞大、层次清晰的软件系统提供全方位支持。

    今天,我们首先来理解一个基础且关键的主题:上电启动流程。在ARM架构中,完整的启动过程可分为多个阶段,每一阶段都由专门的软件系统承载和推动——注意,这里指的是完整的软件体系,而非孤立的组件。

典型启动链如下:

BL1、BL2、BL31、BL32、BL33启动阶段划分概念,来自于ARM的定义,ARM提供了ATF(现在开始叫做:TF-A与TF-M,里面有故事哈)接下来,我们逐个阶段概要描述一下:

阶段0:芯片复位

--> CPU从复位向量(如rk3588s 上电复位向量地址:0xFFFF0000)开始执行--> 跳转到芯片内部ROM(BROM)的入口

阶段1:BL1 - Boot ROM(固化阶段)

概述:芯片厂商固化在ROM中的代码,不可更改核心职责:  1、初始化最基础的CPU核心、时钟、SRAM  2、读取启动引脚/熔丝,确定启动设备(eMMC/SPI/NAND等)  3、从启动设备加载下一阶段(通常是SPL/Preloader)到SRAM  4、验证下一阶段的数字签名(如果开启了SecureBoot,需要对下一阶段的镜像做验签操作)业内名称:BROM、Primary Bootloader、BootROM

阶段2:BL2 - Trusted Boot Firmware(关键分歧点)

概述:通常都是厂商提供,不使用ATF(TF-A)提供的BL2开源实现核心职责:  1、DDR内存初始化(这是最主要任务!厂商DDR调参代码在这里)  2、初始化必要的外设控制器(如时钟、电源管理、基本GPIO)  3、从存储设备加载后续固件(BL31/BL32/BL33)到DDR  4、建立完整的信任链验证(如果开启SecureBoot,要对加载的镜像内容做验签)补充说明:  代码来源:这是厂商私有代码,不是开源的TF-A的BL2开源实现  复杂度:包含大量硬件调参代码(特别是DDR trainning时序校准)  安全性:厂商安全启动的核心实现:  1、SPL (Secondary Program Loader) - Rockchip  2、Preloader - MediaTek  3、BLOBs (Binary Large Objects) - 高通

阶段3:BL31 - EL3 Runtime Firmware(安全监控器)

概述:EL3运行时固件,安全世界与非安全世界的桥梁实现:通常直接使用ARM TF-A的BL31组件(开源)核心职责:  1、实现安全监控器功能,处理SMC调用  2、管理安全/非安全世界切换  3、提供PSCI电源管理服务  4、加载并启动BL32(如果存在)

阶段4:BL32 - Trusted OS(可选安全执行环境)

概述:TOS是运行在设备安全世界中的可信操作系统,用于执行高安全等级的核心任务。实现:  1、OP-TEE  2、Trustonic Kinibi  3、高通QSEE  4、华为iTrustee核心职责:  1、提供TEE(可信执行环境)服务  2、运行可信应用(TA)  3、处理来自非安全世界的安全请求

阶段5:BL33 - Non-Trusted Firmware(非安全世界引导程序)

概述:U-BOOT是一个在操作系统内核运行前,用于初始化硬件环境并加载操作系统的开源引导加载程序。实际实现:U-Boot(主流)核心职责:  1、初始化非安全世界外设(显示、网络、USB等)  2、加载操作系统内核和设备树  3、传递启动参数,跳转到内核

Rockchip rk3588的启动链:

芯片ROM (BL1)     ↓Rockchip SPL (厂商BL2) → 初始化DDR,加载后续固件    ↓ARM TF-A BL31 (标准BL31) → 安全监控器    ↓ARM TF-A BL32 (可选,OP-TEE) → 可信执行环境    ↓U-Boot Proper (BL33) → 非安全引导程序    ↓Linux Kernel

    后面就是Linux | Android的主场了,今天不做过多的论述了!后面我们会以rk3588作为标的,把它掰开揉碎,看看在复杂的硬件平台上,软件系统是如何你方唱罢我登场的。

最新文章

随机文章