Armv8-M的TrustZone技术之内存属性单元

news/2025/1/19 8:49:27/

如果处理器包含Armv8-M安全扩展,则内存区域的安全状态由内部安全属性单元(SAU,Secure Attribution Unit)或外部实现定义的属性单元(IDAU,Implementation Defined Attribution Unit)的组合控制。SAU区域的数量在处理器实现期间定义。在复位时,SAU处于禁用状态。

如果未定义任何SAU区域,或者SAU被禁用,并且系统中没有包含IDAU,则整个内存地址空间被定义为安全,并且处理器无法切换到非安全状态。任何尝试切换到非安全状态都会导致故障。这是处理器的默认状态。

a2bdc4b75d74499b82b995d9a42b9ab2.png

SAU在安全状态下可编程,具有类似于内存保护单元(MPU)的程序员模型。SAU的实现可由设计人员配置。SAU始终存在,但设计人员定义了区域的数量。设计人员还可以使用IDAU定义固定的内存映射,并使用SAU来覆盖内存的某些部分的安全属性。一个简单的用法是使用IDAU将内存分割为500Mb的交替安全和非安全内存块。

微控制器或SoC器件的设计者将内存空间划分为安全和非安全区域。软件使用安全属性单元(SAU)或通过连接到特殊实现定义的处理器上的属性单元(IDAU)接口特定于设备的控制器逻辑来定义一些区域。内存分区还用于将外设定义为安全或非安全。

SAU和IDAU还为每个内存区域定义了区域号。区域号是8位的,并且由Test Target(TT)指令使用,以允许软件确定内存中对象的访问权限和安全属性。

只有在处理器中包含Armv8-M安全扩展时,才会实现SAU。包含在SAU中的区域的数量可以配置为0、4或8。

SAU只能在安全状态下进行编程。使用SAU区域编号寄存器(SAU_RNR)、SAU区域基地址寄存器(SAU_RBAR)和SAU区域限制地址寄存器(SAU_RLAR)对区域进行编程。可以使用SAU控制寄存器(SAU_CTRL)启用SAU。

【注意】:在对SAU的非安全区域进行编程时,必须确保不将安全数据和代码暴露给非安全应用程序。

处理器中的安全属性和内存保护由可选的SAU和可选的内存保护单元(MPU)提供。对于指令和数据,SAU返回与地址关联的安全属性。

对于指令,该属性确定了处理器在执行指令时允许的安全状态。它还可以识别是否可以从非安全状态调用安全地址的代码。它通过应用NSC属性来实现。

对于数据,该属性确定是否可以从非安全状态访问内存地址,以及外部内存请求是否标记为安全或非安全。

如果从非安全状态进行数据访问到标记为安全的地址,则处理器会触发安全故障异常。如果从安全状态到标记为非安全的地址进行数据访问,则相关的外部内存访问将被标记为非安全。

 


http://www.ppmy.cn/news/1329589.html

相关文章

基于SpringBoot的药品管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

linux下boost编译arm版本

1.下载 https://www.boost.org/users/history/version_1_74_0.html 2.解压 tar -zxvf boost_1_74_0.tar.gz 2.编译 ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc3 替换gcc 修改配置文件project-config.jam,将下列的arm gcc编译器替换为你本机的编译器…

程序员裁员潮:技术变革下的职业危机

程序员裁员潮:技术变革下的职业危机 一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。在技术变革下,裁员对于程序员的影响到底有多大? 背景 不知道到底凶杀的真相,他们也貌似不是辞退的,而我…

Eureka基础知识总结(微服务)

Eureka Eureka是Netflix开发的一个服务发现框架,它提供了一种在微服务架构中注册和发现服务的方法。通过使用Eureka,我们可以实现负载均衡、故障转移和服务的自动注册等功能。本文将对Eureka的相关知识进行总结。 一、Eureka的基本概念 Eureka Server…

ffmpeg使用及java操作

1.文档 官网: FFmpeg 官方使用文档: ffmpeg Documentation 中文简介: https://www.cnblogs.com/leisure_chn/p/10297002.html 函数及时间: ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用_ffmpeg gte(t,2)-CSDN博客 java集成ffmpeg: SpringBoot集成f…

20240122在WIN10下给GTX1080配置CUDA驱动

20240122在WIN10下给GTX1080配置CUDA驱动 2024/1/22 19:09 缘起:为了使用openai的whisper识别小语种【非英语】电影的字幕,决定开始折腾CUDA了! https://github.com/openai/whisper https://www.bilibili.com/video/BV1d34y1F7qA https://ww…

灰度图像的自动阈值分割

第一种:Otsu (大津法) 一、基于cv2的API调用 1、代码实现 直接给出相关代码: import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…

Go语言实现新年快乐的效果

在 Go 语言中,你可以使用 fmt 包来实现新年快乐的效果。以下是一个简单的例子: package mainimport ("fmt""time" )func printNewYear() {fmt.Println("\033[31m新年快乐!\033[0m")fmt.Println("\033[32…