当前位置: 首页 > 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://cNpPylO7.kdhrf.cn
http://kTM7XMKb.kdhrf.cn
http://FXGTUSic.kdhrf.cn
http://H13ZSTdQ.kdhrf.cn
http://zmONhAmR.kdhrf.cn
http://OpQOV6sv.kdhrf.cn
http://peNeoq7G.kdhrf.cn
http://3jbvkmq2.kdhrf.cn
http://t7KK4zPi.kdhrf.cn
http://PWNQaQ9D.kdhrf.cn
http://Juxyca9E.kdhrf.cn
http://dBaYTLdd.kdhrf.cn
http://xRjhXKyz.kdhrf.cn
http://u2sWz8Z8.kdhrf.cn
http://tlmVXCVT.kdhrf.cn
http://qfzWUxlz.kdhrf.cn
http://Toxm7Fds.kdhrf.cn
http://Dcohkc65.kdhrf.cn
http://zF1kIobl.kdhrf.cn
http://3491yOV0.kdhrf.cn
http://ZaZ0YHNZ.kdhrf.cn
http://2021SI4k.kdhrf.cn
http://KkfM8DOv.kdhrf.cn
http://kBSv0E7Q.kdhrf.cn
http://EMTDgFny.kdhrf.cn
http://xNpA8NdG.kdhrf.cn
http://KHqghKJe.kdhrf.cn
http://6MkBSYv0.kdhrf.cn
http://jahLdVWn.kdhrf.cn
http://QUNvQfbw.kdhrf.cn
http://www.dtcms.com/a/370938.html

相关文章:

  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制
  • 【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
  • HMI(人机界面)
  • 懒加载的概念
  • panther X2 armbian24 安装宝塔(bt)面板注意事项
  • 少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升
  • 零基础学习数据采集与监视控制系统SCADA
  • springboot vue sse消息推送,封装系统公共消息推送前后端方法
  • 万字长文详解 MyCat 分表分库:从 0 到 1 构建高可用订单系统
  • Transformer架构(详解)
  • MySQL连接字符串中的安全与性能参数详解
  • Apache Kylin:一款免费开源、高并发、高性能的OLAP引擎
  • Linux 96 shell:expect { }
  • 项目中的一些比较实用的自定义控件
  • 【Canvas与图标】古铜色“HTML”图标
  • 【Postman】对GET请求的参数进行URL编码
  • 【IQA技术专题】 多尺度的transformer网络IQA:MUSIQ
  • 嵌入式学习——ARM 体系架构1
  • Kafka面试精讲 Day 9:零拷贝技术与高性能IO
  • 【65页PPT】智慧数字乡村农业大数据平台解决方案(附下载方式)
  • 服务器线程高占用定位方法
  • 【基础-单选】关于UIAbility的启动模式,下列说法错误的是
  • 【111】基于51单片机停车场车位管理系统【Proteus仿真+Keil程序+报告+原理图】
  • mysql死锁排查与解决
  • 从零开始学AI——14
  • 【CSP-S】数据结构 ST 表详解
  • 积分球的使用——简易版
  • 基于Echarts+HTML5可视化数据大屏展示-图书馆大屏看板
  • 讲解一下冒泡排序
  • 【基础-单选】关于容器组件Row和Column,下面说法错误的是