MTK安全启动分析3:MTK 启动组件与 ARMv8 标准 ATF 阶段对应关系
MTK 启动组件与 ARMv8 标准 ATF 阶段对应关系结合 ARMv8 官方 Trusted Firmware-ATF-A的标准启动阶段定义MTK 平台的整条启动链与标准架构职能完全对齐仅组件命名、运行架构、切换方式有平台化差异。先给出总览对应表再逐段拆解匹配逻辑与差异化设计。一、总览对应表ARMv8 标准ATF阶段标准职能定位MTK 平台对应组件运行特权级运行架构核心作用匹配BL1芯片ROM级一级引导硬件信任根验签并加载BL2BROMBoot ROMEL3AArch32芯片固化代码锚定eFuse硬件根验签preloader跳转执行BL2可信二级引导完成硬件初始化、加载并验签所有BL3x镜像、配置安全环境、跳转BL31PreloaderSVCEL1 安全态AArch32初始化硬件/安全域、加载并验签ATF/TEE/LK、配置内存隔离、跳转ATFBL31安全监视器固件EL3运行时负责特权级切换、SMC分发、电源管理ATF / BL31 固件EL3AArch64安全世界核心底座PSCI电源管理、SMC调用分发、安全/非安全世界切换BL32可信操作系统TEE运行在安全世界EL1提供可信服务TEE OSTrustonic/Trusty等Secure EL1AArch64密钥管理、安全存储、DRM、Keymaster等可信业务BL33普通世界Bootloader非安全态引导程序加载系统内核LKLittle KernelNon-secure EL2/EL1AArch64系统级引导、AVB验证、加载内核/设备树、启动Android二、逐阶段详细对应与代码佐证1. BL1 ↔ MTK BROMBoot ROM标准定义BL1 是芯片出厂固化在片内ROM中的第一级引导代码不可修改是整个系统的硬件信任根。它的唯一职责是从启动设备读取BL2镜像完成签名校验校验通过后跳转到BL2。MTK 对应逻辑完全匹配芯片内置的Boot ROMBROM也就是你之前分析的、验签Preloader的那一段固化代码锚定 eFuse/OTP 中的根公钥哈希硬件级信任根从eMMC读取preloader镜像完成签名校验校验通过后将启动参数存入r4寄存器跳转preloader入口校验失败则进入下载模式拒绝启动。差异点标准ARMv8的BL1通常运行在AArch64 EL3MTK多数中低端芯片含MT8766的BROM运行在AArch32 EL3属于平台兼容性设计。2. BL2 ↔ MTK Preloader标准定义BL2 是可信引导的第二阶段运行在安全态核心职责基础硬件初始化时钟、串口、存储、内存从存储设备加载 BL31、BL32、BL33 镜像对所有BL3x镜像做签名校验保证镜像可信配置安全硬件、内存隔离、MPU权限跳转进入 BL31EL3移交控制权。MTK 对应逻辑Preloader 100% 承担了标准BL2的全部职能你之前分析的所有代码都在对应BL2的标准工作标准BL2职能Preloader 对应代码/逻辑硬件初始化platform_pre_init()/ platform_init()初始化时钟、串口、存储、DDR安全硬件配置device_APC_dom_setup()配置总线域隔离trustzone_pre_init()配置安全环境加载并验签BL31/BL32bldr_load_tee_part()加载ATFTEE镜像tee_verify_image()做签名校验加载BL33bldr_load_part_lk()加载LK镜像内存安全隔离tee_sec_config()配置EMI MPU锁定安全内存仅安全世界可访问跳转BL31trustzone_jump()→jumparch64切换架构并进入ATFMTK 专属差异最核心的不同标准ATF的BL2通常与BL31同架构AArch64直接通过函数调用跳转EL3MTK Preloader 运行在 AArch32 安全SVC模式无法直接切换到AArch64 EL3因此采用了暖复位Warm Reset的方式先配置复位向量和架构状态触发CPU软复位复位后直接以AArch64 EL3模式进入BL31。这是MTK 32位ROM 64位核心架构的典型适配设计职能上依然完全等价于标准BL2。3. BL31(ATF) ↔ MTK ATF / BL31 固件标准定义BL31 是ATF的核心运行时固件常驻EL3最高特权级是安全世界与普通世界的唯一交互关口核心能力初始化EL3异常向量表处理SMC调用、中断、异常实现PSCI电源状态协调接口负责CPU热插拔、休眠唤醒、系统重启/关机负责安全世界与普通世界的上下文切换、权限管控启动BL32TEE OS再启动BL33普通世界Bootloader。MTK 对应逻辑完全匹配MTK tee分区中的BL31 固件也就是代码中bl31_base_addr指向的镜像运行在AArch64 EL3是整个系统的最高权限层承接Preloader传入的启动参数、密钥、内存布局初始化SMC分发框架、PSCI服务、安全中断启动BL32TEE OS后切换到非安全态启动BL33LK系统运行过程中常驻后台响应普通世界的SMC安全请求。补充MTK的ATF基于ARM官方TF-A定制开发增加了平台级的电源管理、安全外设适配核心框架完全遵循ARMv8标准。4. BL32(TEE OS) ↔ MTK TEE OS标准定义BL32 运行在 Secure EL1 特权级是完整的可信操作系统TEE OS向上提供安全业务能力向下依赖BL31的特权级服务。标准实现如OP-TEE、Trusted Firmware-M等核心提供密钥管理、安全存储、身份认证、DRM版权保护等可信服务。MTK 对应逻辑完全匹配tee分区中的TEE OS 镜像也就是代码中tee_entry_addr指向的固件支持Trustonic、Google Trusty、微诚、天宸等多家TEE方案代码中通过编译宏适配运行在AArch64 Secure EL1由BL31加载启动接收Preloader注入的RPMB密钥、FDE根密钥实现安全存储、全盘加密的底层支撑向上对接Android Keymaster、Gatekeeper、Widevine等系统安全服务。5. BL33 (UBOOT)↔ MTK LKLittle Kernel标准定义BL33 运行在非安全世界Non-secure EL2/EL1是普通世界的引导程序不涉及安全世界核心逻辑唯一目标是加载并启动操作系统内核。标准实现如UEFI、U-Boot、EDK II等。MTK 对应逻辑完全匹配LKLittle Kernel引导程序运行在AArch64 Non-secure EL2由ATF BL31从安全世界切换过来启动核心职责外设初始化、开机Logo显示、AVB 2.0系统级验签、boot/recovery分区校验、加载内核与设备树、传递启动参数、跳转Linux内核提供Fastboot、Recovery等刷机/恢复模式。补充之前关注的AVB 2.0链式验签、vbmeta校验全部发生在BL33LK阶段属于系统级安全校验和BL1-BL2的芯片级安全启动是两层独立的信任链。三、完整启动时序的逐阶对应按执行顺序整条链路的标准与MTK组件一一对应BL1BROM芯片上电固化ROM代码运行验签Preloader → 跳转PreloaderBL2Preloader初始化硬件、配置安全域、加载并验签ATF/TEE/LK → 暖复位切换架构跳转BL31BL31ATFEL3运行时初始化、注册SMC/PSCI服务 → 启动BL32 TEE OSBL32TEE OS可信系统初始化、密钥服务就绪 → 返回BL31BL33LKBL31切换到非安全态启动LK → LK执行AVB验证、加载内核 → 启动Android系统四、总结1.职能完全对齐仅实现方式有平台差异MTK的preloader、LK不是脱离ATF标准的自研体系而是ARMv8标准启动阶段的平台化实现只是因为BROM是32位才出现了AArch32 BL2 暖复位切换的特殊设计核心职责与标准BL2完全等价。2.两级安全启动的分层对应BL1→BL2 对应芯片级安全启动BROM验签Preloader锚定硬件根BL2→BL31/BL32 对应安全世界信任链Preloader验签ATF/TEE保证安全世界可信BL33 内部执行系统级AVB验证LK验签系统分区保证普通世界系统可信。3.行业通用命名习惯可以把preloader称作BL2、把LK称作BL33本质就是沿用了ARMv8 ATF的标准阶段划分。