同志们,掌握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作为标的,把它掰开揉碎,看看在复杂的硬件平台上,软件系统是如何你方唱罢我登场的。