SMMU学习这一篇就够了

快速链接:

  • 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈

引流关键词: SMMU,mmu500,mmu600,mmu700,system mmu,Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…

请添加图片描述

目录

        • 前言
        • 1、SMMU总结
          • 1.1、SMMU的timeline
          • 1.2、SMMU的简介
          • 1.3、为什么要使用SMMU?
        • 2. SMMU原理解读
          • 2.1. SMMU的使用模型
          • 2.2. SMMU的硬件原理图
          • 2.3. StreamID
          • 2.4 STE Table 和 STE format
            • 2.4.1 一个 Linear Stream Table的示例
            • 2.4.2 一个 2-level Stream Table 的示例
            • 2.4.3 Multi-level Stream and CD tables
            • 2.4.4 Translation stages and addresses
            • 2.4.5 Configuration and translation lookup sequence
          • 2.4 寄存器的介绍
        • 2.5 Stream Table Entry
          • 2.6 Context Descriptor table
        • 3. 总结

前言

最近朋友圈、微信群(ARM-Trustzone-TEE-AT)掀起一阵学习SMMU的热潮,作为一名安全领域的渣渣 ,势必要蹭一蹭这个“热点”,也学习一下吧,反正早晚都要学,因为它和安全的关系还是比较大的。学习是一件长期的过程,本文就先简单理一下概念吧。

1、SMMU总结
1.1、SMMU的timeline

在这里插入图片描述

1.2、SMMU的简介

SMMU的全称是System Memory Management Units, 它属于Arm的System IP, 主要给其他Master来使用,其连页表格式和Core MMU是一样的,理论上可以让Core的MMU和SMMU使用同一套页表.

那么SMMU都是用在哪些地方呢?*以下展示了一个usecase,来自arm官方博客(February 17, 2014),也是比较早期的一个Sample case
在这里插入图片描述

1.3、为什么要使用SMMU?
  • 访问非连续的地址
    现在系统中很少再预留连续的memory,如果Master需要很多memory,可以通过SMMU把一些非连续的PA映射到连续的VA,例如给DMA,VPU,DPU使用。

  • 32位转换成64位
    现在很多系统是64位的,但是有些Master还是32位的,只能访问低4GB空间,如果访问更大的地址空间需要软硬件参与交换memory,实现起来比较复杂,也可以通过SMMU来解决,Master发出来的32位的地址,通过SMMU转换成64位,就很容易访问高地址空间。

  • 限制Master的访问空间
    Master理论上可以访问所有的地址空间,可以通过SMMU来对Master的访问进行过滤,只让Master访问受限的区域,那这个区域也可以通过CPU对SMMU建立页表时动态控制。

  • 用户态驱动
    现在我们也看到很多系统把设备驱动做在用户态,调用驱动时不需要在切换到内核态,但是存在一些安全隐患,就是用户态直接控制驱动,有可能访问到内核空间,这种情况下也可以用SMMU来实现限制设备的访问空间

  • 设备虚拟化
    例如设备虚拟化有多种方式,Emulate,Para-virtualized,以及Pass-through,用SMMU可以实现Pass though,这样无论是性能,还是软件的改动都是比较小的。

  • 一些不支持TrustZone的Master,可以利用SMMU支持Trustzone

2. SMMU原理解读
2.1. SMMU的使用模型

SMMU全称System Memory Management Unit,其实SMMU和MMU具有同样的作用,区别是供给Master使用,同样提供页表转换工作,Master可通过页表转换访问物理地址,达到Master一样使用虚拟地址

在这里插入图片描述

官方给出的示例图如下所示:
在这里插入图片描述
示例图2:
在这里插入图片描述

2.2. SMMU的硬件原理图

学过MMU的人都知道,MMU是由 TLB + Address Translation, 那么对于SMMU呢?
它是由TBU + TCU组成,其中TBU中含有TLB, TCU缓存地址翻译。
DTI则是SMMU内部的连接总线的协议。
在这里插入图片描述

而一个SMMU中可以放置多个ACE-Lite TBU模块,也可以放置LTI TBU
在这里插入图片描述

TBU原理图
在这里插入图片描述

LTI TBU的原理图
在这里插入图片描述
TCU的原理图
在这里插入图片描述

2.3. StreamID
2.4 STE Table 和 STE format

STE Table 分为Linear Stream Tablemutil-level Stream Table,这是由于STRTAB_BASE_CFG中的比特位配置

2.4.1 一个 Linear Stream Table的示例

这种查询方式很简单,根据streamID的数值,直接查询到对应的STE(streamID entry)
在这里插入图片描述

2.4.2 一个 2-level Stream Table 的示例

在这里插入图片描述
在这里插入图片描述

2.4.3 Multi-level Stream and CD tables

而事实上,一个STE,又可以对应多个Context Descriptor
在这里插入图片描述
这里小小总结一下: 这里的一个Context Descriptor 就相当于 MMU系统中的 TTBRx + TCR寄存器。
这里Stage 1 Transslation tables的格式和MMU页表的格式一致。

2.4.4 Translation stages and addresses

地址翻译也是份stage1和stage2的,这和MMU也是一致的。
在这里插入图片描述

2.4.5 Configuration and translation lookup sequence

SMMU地址翻译的原理或数据里如下图所示,这是在学习MMU的时候未曾见过的那么细致的图。
在这里插入图片描述

2.4 寄存器的介绍

SMMU寄存器都是memory-map的
在这里插入图片描述

SMMU里有两套寄存器,一套是给安全master用的,一套是给非安全master用的。
其实就相当于有两个SMMU了。如下我也列举了几个特别的寄存器,带S的是给安全用的,不带S的是给非安全用的。所以,硬件仅仅有一块SMMU,但从软件的视角来看,有两块SMMU

  • SMMU_STRTAB_BASE
  • SMMU_S_STRTAB_BASE
  • SMMU_STRTAB_BASE_CFG
  • SMMU_S_STRTAB_BASE_CFG
2.5 Stream Table Entry

在这里插入图片描述

2.6 Context Descriptor table

可以看出,这里的Context Descriptor 就有点类似于MMU里的 TTBRx + TCR寄存器的味道
在这里插入图片描述
在这里插入图片描述

3. 总结
  • (1)MMU 只能给 一个core用。而SMMU想给多个master用,多个master又对应不同的表。所以就搞了个STE。每一个STE entry里,都可以指向多个context descriptor (我觉得一般也就只用一个吧),然后每一个context descriptor 就相当于 MMU的TTBRx + TCR寄存器。 context Descriptor之后,就和普通的MMU一样
  • (2)SMMU里有两套寄存器,一套是给安全master用的,一套是给非安全master用的。从软件视角来看,其实就相当于有两个SMMU了。但这不是banked,他们的寄存器名字不一样,一类带了S,一类不带S。而且寄存器memory-map的地址还不一样。
  • (3)SMMU又有Secure STE 和 Non-secure STE的概念, Secure STE 后面的页表/地址转换,可以转secure memory,也可以转non-secure memory。Non-Secure STE 后面的页表/地址转换,只可以转non-secure memory。 这和MMU里的Descriptor里的NS比特也是一样的。

关注"Arm精选"公众号,备注进ARM交流讨论区。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573912.html

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

相关文章

基于单片机HX711电子秤称重控制设计

**单片机设计介绍,基于单片机HX711电子秤称重控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机HX711的电子秤称重控制设计是一个融合了单片机技术、称重传感器技术和显示技术的综合性项目。其设计目…

Docker 夺命连环 15 问

目录 什么是Docker? Docker的应用场景有哪些? Docker的优点有哪些? Docker与虚拟机的区别是什么? Docker的三大核心是什么? 如何快速安装Docker? 如何修改Docker的存储位置? Docker镜像常…

HTML5+CSS3+JS小实例:原生JS实现全屏滚动

实例:原生JS实现全屏滚动 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial…

网络socket编程(一)——socket接口函数、面向数据报的UDP编程及测试、select函数应用

目录 一、socket简介 二、socket编程接口函数介绍 2.1 socket()函数&#xff08;创建socket&#xff09; 2.2 bind()函数&#xff08;绑定地址和端口&#xff09; 2.3 listen()函数&#xff08;设置socket为监听模式&#xff09; 2.4 accept()函数&#xff08;接受连接…

原子增强类(18罗汉)

LongAdder对象要比AtomicLong性能更好&#xff08;减少乐观锁次数&#xff09; LongAdder常用API LongAdder 只能用来计算加法且只能从0开始 LongAccumulator 提供了自定义函数操作 点赞高并发案例 调用&#xff1a; 测试结果&#xff1a; 原理分析&#xff0c;为什么能更快…

使用OpenHarmony实现一个简易的音乐播放器应用

介绍 本篇Codelab使用ArkTS语言实现了一个简易的音乐播放器应用&#xff0c;主要包含以下功能&#xff1a; 播放应用中的音频资源文件&#xff0c;并可进行上一曲、下一曲、播放、暂停、切换播放模式&#xff08;顺序播放、单曲循环、随机播放&#xff09;等操作。结合后台任…

大数据Hadoop生态圈体系视频课程

课程介绍 熟悉大数据概念&#xff0c;明确大数据职位都有哪些&#xff1b;熟悉Hadoop生态系统都有哪些组件&#xff1b;学习Hadoop生态环境架构&#xff0c;了解分布式集群优势&#xff1b;动手操作Hbase的例子&#xff0c;成功部署伪分布式集群&#xff1b;动手Hadoop安装和配…

欧拉系统部署ftp服务器

1.先检查是否已经安装ftp vsftpd -v 2.安装vsftpd yum install vsftpd 3.修改ftp配置文件 vim /etc/vsftpd/vsftpd.conf 4.启动ftp systemctl start vsftpd 5.查看是否启动 systemctl status vsftpd 6.设置为开机自启 systemctl enable vsftpd 7.查看端口是否开启 net…

9.windows ubuntu 子系统,centrifuge:微生物物种分类。

上次我们用了karken2和bracken进行了物种分类&#xff0c;这次我们使用centrifuge. Centrifuge 是一种用于快速和准确进行微生物分类和物种鉴定的软件。其主要功能包括&#xff1a; 快速分类和物种鉴定: Centrifuge 可以对高通量测序数据&#xff08;如 metagenomic 或 RNA-Se…

【差分约束+并查集】第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

【Nuxt3】modules目录和nuxt3模块的简单介绍

简言 记录下nuxt3项目中module的用法 modules目录 使用 modules/ 目录在应用程序中自动注册本地模块。 这是一个很好的地方&#xff0c;可以放置您在构建应用程序时开发的任何本地nuxt模块。 nuxt模块相当于npm包&#xff0c;可以发布到npm社区中 在modules/ 目录下的本地模…

阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…