文章目录

  • 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.pswp.cn/news/921427.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921427.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921427.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言数据结构——详细讲解《二叉树与堆的基本概念》

C语言数据结构——详细讲解《二叉树与堆的基本概念》前言一、树的基础概念1.1 为什么需要树&#xff1f;1.2 树的定义与结构1.3 树的核心术语1.3 树的核心术语1.4 树的表示方法&#xff08;孩子兄弟表示法&#xff09;结构定义为什么用孩子兄弟表示法&#xff1f;1.5 树的实际应…

STAR-CCM+|雷诺数回顾

【1】引言 前序已经学习了K-epsilon湍流模型溯源的基础知识&#xff0c;今天再学习一些更为基础的知识&#xff0c;回顾一下雷诺数ReReRe。 【2】雷诺数定义 雷诺数公式为&#xff1a; ReρvDμRe\frac{\rho vD}{\mu}ReμρvD​ 式中&#xff0c; ρ\rhoρ——流体密度&…

Java中的死锁

锁的合理使用能够保证共享数据的安全性&#xff0c;但是 使用不当也会可能引起死锁。1. 死锁概念 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去&#xff0c;如果系统资源充足&#xff0c;进程的资源请求…

基于STM32F103C8T6的智能家居健康环境监测系统

项目开发背景 随着城市化进程加速和居民生活水平提升&#xff0c;人们对家居环境健康与安全的需求日益增强。现代住宅常因装修材料、密闭空间及外部污染导致甲醛超标、PM2.5浓度升高、温湿度失衡等问题&#xff0c;长期暴露此类环境中易引发呼吸道疾病、过敏反应等健康隐患。传…

2025职场进阶:B端产品经理必备的计算机专业技能精要

当前企业级服务市场竞争日益激烈&#xff0c;2025年的B端产品经理不仅需要深厚的行业认知&#xff0c;还必须具备扎实的计算机专业技能&#xff0c;才能设计出真正符合技术趋势与业务需求的企业级产品。而其中&#xff0c;人工智能技术已经成为B端产品不可或缺的组成部分&#…

有效三角形的个数(数组单调性)

目录 一&#xff1a;题目链接 二&#xff1a;题目思路 三&#xff1a;代码实现 一&#xff1a;题目链接 题目的要求是找出当前数组能组成三角形三元组的个数。 二&#xff1a;题目思路 有一种暴力枚举解法&#xff0c;利用三层 for 循环来一一枚举三元组的情况&#xff0c;如…

Rust在医疗系统中的应用:安全、性能与合规性实践(上)

Rust在医疗系统中的应用:安全、性能与合规性实践 摘要 医疗系统对软件安全与性能存在严苛双重需求,既需抵御内存漏洞、数据加密风险等安全威胁(如历史医疗设备因软件问题召回案例所示),又需满足电子健康记录(EHR)系统、医学影像处理等高并发数据场景的性能要求,同时需…

读写锁 shared_mutex 共享互斥量介绍

文章目录读数据对数据没有影响&#xff0c;为什么还需要shared_mutex1. 保证读取数据的“一致性”和“时效性”2. 协调“读”与“写”的竞争关系总结好的&#xff0c;我们来详细介绍 C17 中的 std::shared_mutex&#xff08;共享互斥量&#xff0c;俗称读写锁&#xff09;的使用…

Nestjs框架: 基于装饰器与Guards的完成RBAC权限系统设计与实现

概述 在现代权限管理系统中&#xff0c;RBAC&#xff08;基于角色的访问控制&#xff09;是广泛采用的一种模型RBAC 核心思想是通过角色来管理用户权限通过角色绑定用户、资源和权限&#xff0c;实现细粒度的访问控制为了实现这一目标&#xff0c;我们需要在数据库中设计合理的…

机器学习如何精准预测高值

一、概念理解“机器学习对于高值的预测保守”&#xff0c;这是建模里很常见的现象&#xff0c;尤其在生态、气候、遥感这类数据分布高度偏斜的场景。通常可以从以下几个角度理解&#xff1a;1. 数据分布与样本稀缺在训练集里&#xff0c;高值样本往往非常少&#xff0c;远低于中…

蜂窝物联网模组:智能门禁产品上的关键部件

随着物联网技术的快速发展&#xff0c;蜂窝物联网模组正逐步成为智能门禁系统的关键通信组件。蜂窝模组凭借其广覆盖、高可靠性和低功耗特性&#xff0c;正从传统门禁系统的补充角色转变为智能门禁的核心通信组件&#xff0c;尤其在智慧社区、商业楼宇和政府机构等场景中展现出…

[光学原理与应用-417]:非线性光学 - 线性光学(不引发频率的变化)与非线性光学(引发频率变化)的异同

一、定义与物理机制&#xff1a;线性响应 vs 非线性响应线性光学定义&#xff1a;光与物质相互作用时&#xff0c;介质的极化强度与入射光电场强度呈线性关系&#xff08;Pϵ0​χ(1)E&#xff09;&#xff0c;输出光强与输入光强成正比&#xff08;Iout​∝Iin​&#xff09;-…

深入探讨AI在三大核心测试场景中的应用

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;软件测试领域正经历深刻变革。传统手动测试和基于规则的自动化测试已难以应对日益复杂的系统架构与海量用户行为。AI测试通过引入机器学习、自然语言处理、计算机视觉等技术&#xff0c;显著提升了测试效率、…

[linux仓库]性能加速的隐形引擎:深度解析Linux文件IO中的缓冲区奥秘

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天来学习C语言缓冲区和内核缓存区的区别以及缓存类型。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c…

一、计算机的数据存储

计算机的世界只有0和1。 1.1 进制 十进制整数->二进制整数&#xff1a;除2倒取余二进制->十进制&#xff1a;权值相加法 结论&#xff1a;1位8进制值 3位二进制值&#xff0c;1位十六进制值 4位二进制值 public class JinZhiDemo {public static void main(String[]…

SpringBoot集成XXL-JOB保姆教程

第一步&#xff1a; 下载xxl-job源码到本地&#xff0c;地址如下&#xff1a; xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 第二步&#xff1a; 创建…

Debezium日常分享系列之:Debezium 3.2.2.Final发布

Debezium日常分享系列之&#xff1a;Debezium 3.2.2.Final发布Debezium CoreConnector启动时出现难以理解的错误临时阻塞快照失败可能导致数据丢失的问题修复Debezium for OracleDebezium CoreConnector 启动时出现难以理解的错误 我们解决了一个问题&#xff0c;即连接器会因…

Zoom AI 技术架构研究:联合式方法与多模态集成

一、研究背景与概述 在当今数字化转型加速的背景下,人工智能技术正深刻改变企业协作与沟通方式。作为全球领先的视频会议平台,Zoom 已从单纯的通信工具转型为全面的生产力平台,而其 AI 技术架构是这一转变的核心驱动力。本报告将深入分析 Zoom 的 AI 技术架构,特别是其创新…

排序-快速排序 O(n log n)

快排&#xff1a;1、设定一个中间值 q[ lr >>1 ] , 让左右区间来比较2、左边通过 i 依次比较&#xff0c;如果比这个中间值小&#xff0c;就继续 , 直到不符合3、右边通过 j-- 依次比较&#xff0c;如果比这个中间值大&#xff0c;就继续 &#xff0c;直到不符合4、两边…

【Proteus仿真】定时器控制系列仿真——LED小灯闪烁/流水灯/LED灯带控制/LED小灯实现二进制

目录 0案例视频效果展示 0.1例子1&#xff1a;基于AT89C51单片机的定时器控制小灯闪烁 0.2例子2&#xff1a;基于AT89C51单片机的定时器T0流水灯 0.3例子3&#xff1a;基于AT89C51单片机的定时器控制LED灯带 0.4例子4&#xff1a;基于AT89C51单片机的定时器控制LED闪烁 0…