jjzjj

认识 TEE OS

hinzer 2023-10-27 原文

了解 TEE OS

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

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

1 软件/安全架构

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

1.1 软件架构(2022)

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

有关认识 TEE OS的更多相关文章

  1. 「认识AI:人工智能如何赋能商业」【04】机器学习的商业应用 - 2

    作者|Harper审核 |gongyouliu编辑|auroral-L机器学习的商业应用上期给大家介绍了机器学习的概念,但是理解机器学习最好方法之一,就是了解其在具体商业世界中的各种应用。在道格’罗斯的这本《认识AI,人工智能赋能商业》中,介绍了几类机器学习的商业应用,在这里我给大家归纳一下。第一,数据安全,为了避免被发现,制造恶意软件的人会不断更改代码,通常为2%~10%的修改,但是通过机器学习,安全软件可以适应这一小部分变化,并准确识别新创建的恶意软件。它还可以寻找访问方式的模式,以识别可能的安全威胁。第二,投资。机器学习使得计算机能够处理大量的财务数据,并利用其发现的规律预测市场及每只股

  2. Arduino:实现四位LED共阴极数码管显示——从认识、连接、程序到实现功能 - 2

    一.认识四位共阴极数码管(1)一位八段共阴极数码管    在认识四位共阴极数码管之前我先介绍一下一位八段共阴极数码管。如左图所示为以为数码管的实物图,其中它共有10个引脚,且上下各五个。小数点位于右下时为数码管正面,在四位共阴极数码管中也是如此,在连接组装时尤为重要。     右图所示为一位数码管示意图,将数码管引脚连接在Arduino上,由图所示我认为你可以对为什么是八段及共阴极有了自己一定的理解。其中,共阴极顾名思义是这些LED小灯公用一个阴极。对于如何在一位数码管上显示0-9,也就是指点亮数码管上位置不同的LED小灯。例如:显示0,点亮a,b,c,d,e,f,也就是将其对应的引脚2,3,

  3. 回炉与剖析C++封装特性 - 重新认识C++,完满呈现全部内部细节 - 2

    💛前情提要💛本章节是C++的深度剖析封装细节&特性的相关知识~接下来我们即将进入一个全新的空间,对代码有一个全新的视角~以下的内容一定会让你对C++有一个颠覆性的认识哦!!!以下内容干货满满,跟上步伐吧~作者介绍:🎓作者:热爱编程不起眼的小人物🐐🔎作者的Gitee:代码仓库📌系列文章&专栏推荐:《刷题特辑》、《C语言学习专栏》、《数据结构_初阶》、《C++轻松学_深度剖析_由0至1》、《Linux-感受系统美学》📒我和大家一样都是初次踏入这个美妙的“元”宇宙🌏希望在输出知识的同时,也能与大家共同进步、无限进步🌟🌐这里为大家推荐一款很好用的刷题网站呀👉点击跳转📌导航小助手📌💡本章重点🍞一.回炉&

  4. 对集合、复杂度以及泛型的认识 - 2

    文章目录一、集合框架是什么?二、复杂度1.时间复杂度2.空间复杂度三、泛型 一、集合框架是什么?Java集合框架JavaCollectionFramework,又被称为容器container,是定义在java.util包下的一组接口interfaces和其实现类classes。类和接口如下:  1.Collection:是一个接口,包含了大部分容器常用的一些方法2.List:是一个接口,规范了ArrayList和LinkedList中要实现的方法      ArrayList:实现了List接口,底层为动态类型顺序表      LinkedList:实现了List接口,底层为双向链表3.Sta

  5. 【JavaWeb】重新认识 Servlet 的初始化 [ 回顾 Servlet ] - 2

    🥇作者.29.的✔博客主页✔🥇记录JavaWeb学习的专栏:Web专栏🥇向前走,不要回头。您的点赞,收藏以及关注是对作者最大的鼓励喔~~重新认识Servlet的初始化一、回顾Servlet1.什么是Servlet2.Servlet规范3.Servlet生命周期二、Servlet的初始化方法1.带参初始化2.无参初始化3.重写init()方法,进行额外的初始化准备①获取初始化参数值②`ServletContext`和``一、回顾Servlet====================1.什么是Servlet在讲解Servlet初始化方法之前,让我们先回顾一下Servlet:Servlet是Java

  6. 认识软件测试 - 2

    目录一、什么是软件测试二、软件测试和开发的区别工作内容不同:所需要的技能不同:薪资待遇不同:发展的前景不同:三、软件测试和调试的区别 1、工作的主体不同2、执行阶段不同3、目的不同4、手段不同四、软件测试的岗位 五、优秀软件测试人员应该具备的素质 良好的沟通能力 快速学习的能力 开发和文字能力 测试用例设计能力责任感和抗压能力 探索性思维 一、什么是软件测试软件测试:就是测试人员来验证软件的功能是否能够满足用户的需求,而用户就是那些使用人员 。项目发布给用户之前,一定需要经过测试。 用通俗的话来说,如果说开发是前锋,那么软件测试就是守门员,守住项目上线的质量保障。二、软件测试和开发的区别工作内

  7. SpringBoot的初步认识 - 2

    目录前言1.SpringBoot的特点2.如何创建一个SpringBoot项目3.SpringBoot启动类上的@SpringBootApplication注解的解释4.SpringBoot的配置文件前言因为Spring框架在写web项目的时候有些麻烦,因此SpringMVC出世了,SpringMVC框架在Spring框架的基础上进行改进,简便了我们使用框架写Web项目的复杂。同样的,SpringBoot的出世也是为了进一步的简化多个框架整合的时候配置文件过于麻烦的情况。可以说这一切都是很顺其自然的,符合人类进步的需求的。因此下面将开始介绍SpringBoot框架的特点。1.SpringBoo

  8. 认识C++string类 - 2

    目录0.前言:1.string类变量1.1string类介绍1.2string类变量与字符数组的比较1.3string类变量初始化1.4string类变量的操作1.5强化训练string类变量的操作1.6字符数组对应的类操作2.string类I/O2.1string类的输入输出2.2其它形式的字符串字面值2.3原始字符串0.前言: 书接上回,C++中用字符数组来存储字符串在C语言中很常见。请看上回分解链接。 这次我们就来讲C没有的,用string类变量来存储字符串。文章若有更好的排版、或有错误、或内容排布有问题,希望各位读者指出,博主第一时间改正。1.string类变量1.1string类介绍

  9. 认识网络设备 - 2

    目录前言目标网络设备框架介绍网络设备导向:款式设备硬件模块:主控板交换网板接口板各个模块具体介绍:主控板交换网板接口板盒式设备模块连接逻辑图网络设备逻辑框架控制平面转发平面监控平面网络设备对报文的处理流程报文转发上行、下行业务报文转发处理流程确定报文出口(1)确定报文出口(2)确定报文出口(3)转发信息硬件转发协议报文转发流程设备自身发送协议报文处理流程总结友情提醒:文章中(内部)是作者内心独白---提供通俗易懂的理解话语 前言世界虽然很大,但是当前网络的高速发展使得我们足不出户都能了解全球的最新资讯、随时和朋友与同事交流、网络极大的丰富人们的沟通和生活、未来将会是一个万物互联的智能世界。(一

  10. 【Unity】认识常用的生命周期函数(Awake、Start、Update...) - 2

    一、了解帧的概念游戏的本质就是一个死循环每一次循环都会处理游戏逻辑并更新一次游戏画面之所以能看到画面在动是因为切换画面速度达到一定速度时人眼就会认为画面是动态且流畅的一帧就是执行了一次循环Unity底层已经封装好了这个死循环我们只需要利用Unity的生命周期函数的规则来执行游戏逻辑即可FPS(FramesPerSecond)即每秒钟帧数一般我们说60帧30帧意思是1秒更新60次、30次画面1s=1000ms60帧:1帧为1000ms/60≈16.66ms30帧:1帧为1000ms/30≈33.33ms游戏卡顿的原因:跑1帧游戏逻辑的计算量过大,或者硬件性能过低,无法在一帧的时间内处理完所有游戏

随机推荐