认识 TEE OS

news2024/11/18 5:35:18

了解 TEE OS

关于本文,是一篇会议纪要,会议主题是《从 Linux Kernel 角度看 TEE》,主讲人是周贺贺。它适用于嵌入式系统开发/驱动开发/内核设计/安全业务设计从业者,目的是让自己掌握 TEE 基本概念,知道大系统软件架构。同时也解答下面几个问题

  • armv7 有几种模式?
  • armv8/armv9 有几种安全状态?
  • 现在的手机上都是双操作系统吗
  • 什么是 IRQ,FIQ?
  • 什么是 TEE,什么是 TEE OS?

1 软件/安全架构

学习 Trustzone/TEE ,其实就是学习 arm 架构,建议选择新架构而不是早期架构,比如 armv8-aarch64 和 armv9 来进行学习。

1.1 软件架构(2022)

![[202209172011.png]]

1)两个执行状态:Non-secure 状态;Secure 状态

2)四个安全等级:PL0,PL1,PL2,PL3

1…2 发展历程(2002…2022)

在这里插入图片描述

1)发展历程:Trustzone -> Hypervisor(EL2) -> S-EL2 -> FF-A -> CCA(RME) -> …

2)演变趋势:越来越复杂,也理解操作系统的权限越来越小(最小特权原则)

1.3 主流架构(2022)

在这里插入图片描述

1)TEE 是可信执行环境,运行在 secure 侧的所有程序;TEE OS 特指运行在 secure 侧的 OS

2)从 Kernel 的角度看,业务可能会从 non-secure 侧切换到 secure 侧,这样就让内核开发从白盒变黑盒

1.4 Secure boot 模型

在这里插入图片描述

1)BL1: 是 BootROM,它的其中一个功能是加载 BL2 镜像到内存,并启动 BL2

2)BL2:用于加载并验证 BL31/BL32/BL33 镜像到内存

3)BL31: 是 ATF,维持 Runtime 状态,用于切换 CPU 上下文(BL32 和 BL33)

4)BL32: 进入 secure 状态,干活

5)BL33:进入 non-secure 状态,干活

1.5 Runtime 模型

在这里插入图片描述

1)双操作系统,分别指 non-secure 侧的非安全状态和 secure 侧的安全状态

2)ATF(BL31)是运行时的一段程序,用于切换上下文

3)通信机制:apps <–> libteec.so <–> tee_driver <–> opteed <–> optee_os <–> TAs

2 TEE 与内核相关

2.1 交互接口

在这里插入图片描述

1)对于业务开发商,需要进行安全业务设计,比如基于 SDK 调用 API 接口,或者开发设备 Driver

2)对于 TEE 厂商,需要客制化 TEE 驱动,实现安全操作

2.2 内存隔离

在这里插入图片描述

1)内存隔离:secure 空间和 non-secure 空间不是同一个虚拟地址空间。

2.3 调度模型

在这里插入图片描述

1)一个模式是 user 线程调用 TEE 库

2)另一个模式是 user 线程 进入 kernel 线程,然后通过 tee_work 线程统一调用 TEE

3)即使线程 Normal 切换到 Secure 状态,不影响 kernel 线程调度(从 Kernel 的视角,随时将线程从 TEE 状态唤醒)

3 标准和规范

在这里插入图片描述

1)GP:应用角度只需要了解这个规范,关于如何使用 API

2)PSCI:启动从核时,对 Power 的标准与约束

3)FF-A:关于运行时如何切换,如何启动相关标准

4)SMCCC:规范 smc_abi ,约束 TEE 厂商和 SOC 厂商的接口和使用

5)SEDI:关于系统资源的规范,不介绍

6)SCMI:关于系统资源的规范,不介绍

3.1 示例:多核启动

在这里插入图片描述

1)启动从核:Linux Kernel 发出请求

2)EL3 初始化:N/A

3)S-EL1&0 初始化:N/A

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测之YOLOv1算法分析

网络结构 卷积层池化层全连接层 输入448∗448448*448448∗448大小的图片 输出7∗7∗307*7*307∗7∗30的张量 30维张量包括20个对象的概率&#xff0c;2个bounding box的置信度及其位置&#xff08;一个bounding box位置信息需要四个值&#xff0c;两个bounding box总需要8个…

【C/C++】排序讲解,C语言实现各种排序

这篇文章会从思路到实现到分析时间空间复杂度&#xff0c;一次性搞懂各种排序 有帮助的话点个赞收藏一下不迷路啊 如果对时间空间复杂度还不熟悉的请去看 时间 空间复杂度 本文章不会讲堆排序&#xff0c;这部分内容会马上单写一篇博客介绍&#xff0c;和堆的和一些更复杂的问题…

C++基础之核心3

C核心编程 本阶段主要针对C面向对象编程技术做详细讲解&#xff0c;探讨C中的核心和精髓。 1 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量…

海格里斯HEGERLS标准解析|夹抱式四向穿梭车医用行业现代物流解决方案

众所周知&#xff0c;随着当前电商、医用、新零售等领域的快速发展&#xff0c;各大中小企业对于存储的要求越来越高&#xff0c;为让仓储货架、仓储设备、仓储配件等更具有行业的适配性&#xff0c;传统固定的穿梭车已不能满足对不同尺寸料箱的处理。为此&#xff0c;河北沃克…

二叉树题型

目录 二叉数遍历迭代法 1.1前序遍历 1.2中序遍历 1.3后续遍历 二叉树最小深度 二叉树所有路径 中序后序构造二叉树 验证二叉搜素树 二叉数遍历迭代法 1.1前序遍历 前序遍历顺序&#xff1a;根—左—右&#xff1b; 解法1&#xff1a;用栈来进行中间过程处理&#xf…

Babel和devServer | Webpack

文章目录Babel和devServerbabelbabel命令行使用babel-loaderVue源码的打包VSCode对SFC文件的支持vue-loaderdevServerBabel和devServer babel babel命令行使用 babel-loader Vue源码的打包 VSCode对SFC文件的支持 vue-loader devServer

一键可以轻松替换人物背景图,效果出乎意料的好(附 Python 代码)

最近发现 BackgroundMattingV2 项目的一些使用上的小缺陷&#xff0c;但是他却可以做到头发丝精细的抠图效果。我将项目稍微魔改了一下&#xff0c;让他在可以选择单一图片的基础上&#xff0c;可以把抠好的图片贴在自定义的背景图上&#xff0c;这样就可以让照片中的人物&…

使用Tomcat时出现Access Error: 404 -- Not Found的解决办法

当时出现这种情况很迷惑&#xff0c;错误提示如下 突然想到大二上学模电的时候安装过multisim&#xff0c;这个软件的某些不必要的服务占用了8080端口&#xff08;恼&#xff09;&#xff0c;出现这种情况应该是和Tomcat默认的端口冲突了。 于是就有了解决思路&#xff1a; …

stm32f407VET6 系统学习 day03 通用同步异步收发器

1.同步串行通信 同步通信发送端和接收端必须用共同的时钟源才能保持它们之间的准确同步。同步传输时&#xff0c;每个字 符没有起始位和停止位&#xff0c;它不是用起始位来标志字符的开始&#xff0c;而是用一串特定的二进制序列&#xff0c;称为 同步字符&#xff0c;去通知接…

[思维模式-14]:《复盘》-2- “知”篇 - 复盘之道

目录 前言&#xff1a; 一、U型学习法&#xff1a;复盘的学习机理 &#xff08;1&#xff09; 回顾、评估 &#xff08;2&#xff09;分析、反思 &#xff08;3&#xff09;萃取、提炼 &#xff08;4&#xff09;转化、应用 二、复盘与PDCA既有区别&#xff0c;也有联系…

solr 安装和使用

Solr是基于ApacheLucene构建的流行、快速、开源的企业搜索平台 Solr具有高度可靠性、可扩展性和容错性&#xff0c;提供分布式索引、复制和负载平衡查询、自动故障切换和恢复、集中配置等功能。Solr为许多世界上最大的互联网站点提供搜索和导航功能 环境准备 linux centos7 ja…

如何用iDesktop快速制作一幅研究区概况图

目录前言数据准备成果展示制作步骤前言 研究区概况图能直观展示研究区域的地理位置&#xff0c;在许多研究展示与论文撰写中必不可少。本文将以成都市为例&#xff0c;利用SuperMap桌面产品iDesktop快速制作一幅研究区概况图。 数据准备 四川省行政区划矢量数据&#xff08;…

【语音处理】LQ/QR噪声估计器研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【Javascript】循环,函数,调用栈,闭包,递归

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录函数作用域例子调用栈可选参数闭包递归函数 形参不需要定义var&#xff0c;函数可以付给一个变量…

Android Qcom USB Driver学习(八)

该系列文章总目录链接与各部分简介&#xff1a; Android Qcom USB Driver学习(零) 因为要看usb charging的问题&#xff0c;所以需要补充一下battery的相关知识&#xff0c;算是入门吧 BAT SCH (1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2C_SCL (5)VBATT_VSNS_M (1)BATT…

【问题分析】解决java中epoll依赖缺失问题

【问题分析】解决java中epoll依赖缺失问题一、前言二、问题描述三、问题分析四、解决方法五、总结一、前言 在学习使用lettuce框架实现UNIX域套接字unix domain socket连接redis时&#xff0c;遇到了一个问题&#xff0c;提示java.lang.IllegalStateException: A unix domain …

Java Stream后续来了,汇总一些项目开发中高频使用的 Stream操作

不过讲解这些操作时用的都是非常简单的例子&#xff0c;流操作的数据也都是简单类型的&#xff0c;主要的目的是让大家能更快速地理解 Stream 的各种操作应用在数据上后&#xff0c;都有什么效果。 在现实场景中实际做项目的时候&#xff0c;我们使用Stream操作的数据大多数情…

OpenCV颜色识别

颜色分辨 单个颜色识别 代码 import cv2 import numpy as npdef color(lower, upper, name):Img cv2.imread(image/origin/all.png) # 读入一幅图像kernel_3 np.ones((3, 3), np.uint8) # 3x3的卷积核if Img is not None: # 判断图片是否读入HSV cv2.cvtColor(Img, cv2…

maven中profiles使用详解,多环境开发配置文件(开发,测试,生产)+ pom中resources部分标签介绍

一.maven中profiles使用详解&#xff08;仅供参考&#xff09; 使用的场景 常常遇到一些项目中多环境切换的问题。比如在开发过程中用到开发环境&#xff0c;在测试中使用测试环境&#xff0c;在生产中用生产环境的情况。springboot中提供了 spring.profile.active的方式来实…

以mariadb为例介绍如何使用systemctl命令集设置服务开机自启动

以mariadb为例介绍如何使用systemctl命令集设置服务开机自启动一、systemd简介二、systemctl命令集常用命令三、以mariadb自启动为例四、更多说明一、systemd简介 systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许…