当前位置: 首页 > news >正文

RK3568 Trust

文章目录

  • 1、环境介绍
  • 2、前言
  • 3、ARM TrustZone
    • 3.1、什么是ARM TrustZone
    • 3.2、cpu特权等级
    • 3.3、ARM Trusted Firmware
  • 4、Rockchip 平台的 Trust
    • 4.1、实现机制
    • 4.2、启动流程
    • 4.3、生命周期
    • 4.4、Trust 编译打包流程分析
  • 5、总结

1、环境介绍

硬件:飞凌ok3568-c开发板

软件:原厂rk356x sdk(Linux)

2、前言

最开始的目的是为了了解 RK3568 的安全启动,但在学习过程中不小心先了解了 Rockchip Trust。后来发现,安全启动本身的实现并不依赖 Trust。不过,Trust 的存在可以在系统运行时提供更细粒度的安全保障,使得整体安全策略更完善。

关于 Rockchip 平台上 Trust 的实现和作用,在官方文档《Rockchip_Developer_Guide_Trust_CN.pdf》已有详细介绍。本文主要记录个人学习后的总结。

3、ARM TrustZone

在此之前,需要先理清ARM TrustZone、cpu特权等级、ARM Trusted Firmware、OP-TEE OS等名词概念,可以直接参考《Rockchip_Developer_Guide_Trust_CN.pdf》,本章节仅做个小结。

3.1、什么是ARM TrustZone

ARM TrustZone是一个硬件机制,是ARM公司在CPU和SoC中提供的一种硬件安全扩展机制

核心思想就是把一个系统划分成安全世界 (Secure World) 和非安全世界 (Normal World)。安全世界可以访问所有资源(安全 + 非安全),非安全世界只能访问属于自己的资源,尝试访问安全资源会被硬件阻止。

3.2、cpu特权等级

CPU 特权等级(Exception Level,EL) 定义了 CPU 执行代码的权限级别。系统中运行的每个任务都有一个对应的特权等级,用来表示它的权限大小。不同 EL 可以访问的资源和可执行的指令不同,EL 越高权限越大。对于 AArch64(64 位 ARM)架构,CPU 特权等级主要分为 EL0~EL3:

  • EL0:用户态应用,权限最小,只能访问普通资源。
  • EL1:内核态,权限较高,可访问系统资源和控制硬件。
  • EL2:Hypervisor(虚拟化管理),管理虚拟机。
  • EL3:Secure Monitor,权限最高,负责安全/非安全世界切换。

3.3、ARM Trusted Firmware

上面提到ARM TrustZone是硬件层面的,有了硬件隔离,还需要软件来管理和使用:

  • ARM Trusted Firmware (TF-A): 是 ARM 官方提供的一套开源固件,运行在 EL3(最高特权级),提供“世界切换”的管理程序 Secure Monitor。
  • OP-TEE OS: 是一个轻量级操作系统,专门运行在安全世界 EL1,提供安全服务,比如密钥管理、加密、认证。
  • 普通 OS(Linux/Android):运行在非安全世界,只能通过调用(SMC 指令)去请求安全服务。

所以,TrustZone 提供硬件隔离。TF-A 和 OP-TEE 在这个硬件基础上,形成了安全执行环境。

4、Rockchip 平台的 Trust

首先,如何理解 Trust 呢? Trust 是一套安全机制和软件实现,它基于 ARM TrustZone 的硬件隔离特性,将系统划分为安全世界和非安全世界,也就是上面提到的那些内容。因此,在讨论 Rockchip 平台的 Trust 时,实际上就是在讨论 Rockchip 对安全世界的实现及管理方式。

4.1、实现机制

目前 Rockchip 平台上的 64 位 SoC 平台上使用的是 ARM Trusted Firmware + OP-TEE OS 的组合;32位 SoC 平台上使用的是 OP-TEE OS。

4.2、启动流程

ARM Trusted Firmware 的体系架构里将整个系统分成四种安全等级,分别为:EL0、EL1、EL2、EL3。将整个安全启动的流程阶段定义为:BL1、BL2、BL31、BL32、BL33,其中 ARM Trusted Firmware 自身的源代码里提供了 BL1、BL2、BL31 的功能。Rockchip 平台仅使用了其中的 BL31 的功能,BL1 和 BL2 是rk自己实现的一套方案。所以在 Rockchip 平台上我们一般也可以“ 默认” ARM Trusted Firmware 指的就是 BL31,而 BL32 使用的则是 OP-TEE OS。

如果把上述这种阶段定义映射到 Rockchip 的平台各级固件上,对应关系为:Maskrom(BL1)、Loader (BL2)、Trust(BL31:ARM Trusted Firmware + BL32:OP-TEE OS)、U-Boot(BL33)。

固件启动顺序:

Maskrom -> Loader -> Trust -> U-Boot -> kernel

4.3、生命周期

Trust 自上电初始化之后就始终常驻于内存之中,完成着自己的使命。

4.4、Trust 编译打包流程分析

rk提供了闭源的BL31(ATF)、BL32(OP-TEE),位于:

# BL31
<sdk>/rkbin/bin/rk35/rk3568_bl31_v1.44.elf
# BL32
<sdk>/rkbin/bin/rk35/rk3568_bl32_v2.11.bin

<sdk>/rkbin/RKTRUST/RK3568TRUST.ini指定,uboot编译过程中会用到该文件:

目前,rk uboot镜像默认打包方式走的是FIT(Flattened Image Tree),即根据.its文件打包成.itb

its文件位于:

<sdk>/u-boot/fit/u-boot.its
/** Copyright (C) 2020 Rockchip Electronic Co.,Ltd** Simple U-boot fit source file containing ATF/OP-TEE/U-Boot/dtb/MCU*//dts-v1/;/ {description = "FIT Image with ATF/OP-TEE/U-Boot/MCU";#address-cells = <1>;images {uboot {description = "U-Boot";data = /incbin/("u-boot-nodtb.bin");type = "standalone";arch = "arm64";os = "U-Boot";compression = "none";load = <0x00a00000>;hash {algo = "sha256";};};atf-1 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x00040000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x00040000>;hash {algo = "sha256";};};atf-2 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcc1000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcc1000>;hash {algo = "sha256";};};atf-3 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x0006b000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x0006b000>;hash {algo = "sha256";};};atf-4 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcd0000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcd0000>;hash {algo = "sha256";};};atf-5 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcce000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcce000>;hash {algo = "sha256";};};atf-6 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x00069000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x00069000>;hash {algo = "sha256";};};optee {description = "OP-TEE";data = /incbin/("tee.bin");type = "firmware";arch = "arm64";os = "op-tee";compression = "none";load = <0x8400000>;hash {algo = "sha256";};};fdt {description = "U-Boot dtb";data = /incbin/("./u-boot.dtb");type = "flat_dt";arch = "arm64";compression = "none";hash {algo = "sha256";};};};configurations {default = "conf";conf {description = "rk3568-evb";rollback-index = <0x0>;firmware = "atf-1";loadables = "uboot", "atf-2", "atf-3", "atf-4", "atf-5", "atf-6", "optee";fdt = "fdt";signature {algo = "sha256,rsa2048";key-name-hint = "dev";sign-images = "fdt", "firmware", "loadables";};};};
};

最后将构建出的u-boot.itb生成成uboot.img:

u-boot.its -> u-boot.itb -> uboot.img

整个uboot的编译涉及的编译脚本如下,可自行分析:

<sdl>/u-boot/make.sh					
<sdk>/u-boot/scripts/fit.sh

关于uboot镜像的打包方式在uboot menuconfig中有如下宏开关进行选择:

# FIT打包。默认开启。最后生成uboot.img和loader.bin,其中uboot.img已经包括了ATF和OPTEE
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y		
# DECOMP打包。
CONFIG_SPL_DECOMP_HEADER=n					
# 若以上两个选项都不启用,最后生成uboot.img、trust.img、loader.bin。即把trust.img独立了出来。

5、总结

TrustZone 提供了系统运行时的可信执行环境,使得开发者可以保护敏感数据和关键操作。理解 Trust 的存在与作用,有助于开发更安全的应用,也让对芯片安全特性的理解更加完整。

参考文章:

https://zhuanlan.zhihu.com/p/23529470235

rk3568安全启动功能实践_rk3568 安全启动-CSDN博客

http://www.xdnf.cn/news/1477819.html

相关文章:

  • 进程间通信(IPC)方式
  • AgentScope 1.0深度解析:技术架构、使用教程与多智能体开发实践
  • 跟着开题报告学答辩!《 Access学情分析系统的设计与实现》开题答辩实录分享!
  • Linux系统编程守护进程(36)
  • Linux笔记---TCP套接字编程
  • Docker学习笔记-网络类型
  • 【干货推荐】AI助理前端UI组件-悬浮球组件
  • 下载数据集用于图像分类并自动分为训练集和测试集方法
  • Python零基础速成指南:12周从小白到项目实战
  • uniapp | 解决组件样式不生效问题
  • uniapp新增页面及跳转配置方法
  • 【最新版】超级好用的软件卸载工具IObit Uninstaller v15.0.0.8 中文解压即用版 告别残留烦恼
  • 力扣p2009 使数组连续的最少操作数 详解
  • ELFK:企业级日志管理的完整解决方案——从入门到精通
  • 尚硅谷宋红康JVM全套教程(详解java虚拟机)
  • 苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法
  • 2025高教社国赛数学建模C题参考论文(含模型和代码)
  • 【面试向】人工智能机器学习介绍
  • 【51单片机-B030】【protues仿真】基于51单片机万年历系统
  • 心路历程-passwdusermod命令补充
  • 嵌入式学习——ARM 体系架构1
  • [光学原理与应用-422]:非线性光学 - 计算机中的线性与非线性运算
  • PHP - pack/unpack「字符串/二进制字符串」- 学习/实践
  • Week 15: 深度学习补遗:集成学习初步
  • C++算法学习——链表
  • 基于Scikit-learn集成学习模型的情感分析研究与实现
  • Day12--HOT100--23. 合并 K 个升序链表,146. LRU 缓存,94. 二叉树的中序遍历
  • 腾讯混元翻译模型Hunyuan-MT-7B开源,先前拿了30个冠军
  • Go基础(③Cobra)
  • STM32——Flash闪存