OP-TEE相关知识点记录

1.ARMv8的trustzone扩展

 1.1 隐私计算框架

1.2处理器的secure状态

1.四个异常等级:
    EL0:执行用户态
    EL1:操作系统内核
    EL2:hypervsior
    EL3: Secure monitor
        主要执行cpu的secure相关配置,以及切换cpu在低于EL3异常等级运行时的secure状态。
        EL3主要设置scr_el3寄存器
    
2.作用
    EL0:无特权模式,所有的APP应用都在EL0
    EL1:一个特权模式,能够执行一些特权执行令,用于运行各类操作系统,在Secure World则是
        secure OS(如:TEE)
    EL2: 主要提供对虚拟化的支持
    EL3: 主要执行cpu的secure相关配置,以及切换cpu在低于EL3异常等级运行时的secure状态。
         EL3主要设置scr_el3寄存器
        
    注:EL ---- Exception Level

1.3 OP-TEE解决方案

1.4OP-TEE执行流程

OP-TEE执行流程如下图所示:

1> bl1 跳转到 bl2

  • - bl1 加载 bl2 image 到 RAM、设定中断向量表以及完成其他 CPU 相关设定之后,bl1_main 函数解析出 bl2 image 的描述信息,获取入口地址,并设定下一个阶段的 CPU 上下文。完成之后,调用 el3_exit 函数实现 bl1 到 bl2 的跳转,进入到 bl2 阶段。

2>bl2 跳转到 bl31

  • - bl2 将会加载 bl31、bl32、bl33 的 image 到对应权限的 RAM,并将这 3 个 image 的描述信息组成一个链表保存起来,以用于 bl31 启动 bl32 和 bl33。在 AACH64 中,bl31 为 EL3 runtime firmware。这个运行时的主要功能是处理 SMC 指令和中断,以 secure monitor 状态运行。
  • - bl32 一般为 TEE OS image,例如 OP-TEE
  • - bl33 为非安全 image,例如 uboot,linux 内核等。当前该部分先加载 bootloader 的 image,再由 bootloader 来启动 linux 内核。
  • - bl2 跳转到 bl31 是通过传入 bl31 的 entry point info 调用 SMC 指令,触发在 bl1 设定的 SMC 异常,从而使得 CPU 将控制权交给 bl31,并跳转到 bl31 执行。

3>bl31 跳转到 bl32

  • - bl31 会执行 runtime_service_init()函数,该函数会调用注册到EL3所有service的init函数,其中有一个 service 就是为 TEE 服务的。该 service 的 init 函数会将 TEE OS 的初始化函数赋值给 bl32_init 变量。当所有的 service 执行完 init 后,bl31 会调用 bl32_init 跳转到 TEE OS 的执行。

4>bl31 跳转到 bl33

  • - TEE_OS image 启动完成之后,会触发一个 ID 为 TEESMC_OPTEED_RETURN_ENTRY_DONE 的 SMC 调用来告知 EL3 TEE OS image 已经完成了初始化,然后将 CPU 状态恢复到 bl31_init 的位置继续执行。
  • - bl31 通过遍历在 bl2 记录的 image 链表来找到需要执行的 bl33 image。然后通过获取到 bl33 image 的镜像信息,设定下一个阶段的 CPU 上下文,退出 EL3 然后进入到 bl33 image 的

1.5Boot Loader

1.BL1

BL1是信任链的根所在。一般固化在芯片内部的一段代码,叫作bootrom,具有最高的执行权限    EL3,一般被厂家写死。bootrom通常会映射到它专属的一块内存中,向这块内存写入数据,一般都    会出错
    芯片上电或复位后,bootrom的代码会从固定位置加载BL2来初始化sram,在BL2验证通过后会跳转到BL2,以保证可信任执行。

2.BL2

运行在EL3特权级别,BL2在flash中是一段可信安全代码,它的信任建立在BL1对它的验证,主要完成一些平台相关的初始化,如对ddr的初始化等。

3.BL31

①CPU、C运行环境、基本硬件以及EL3中断处理框架(支持EL3情况下)初始化。
②页表创建和cache使能。
③启动后级镜像以及准备新镜像的跳转。
④处理smc命令的运行运行时的服务注册,运行时不同secure状态的smc处理。以及异常等级切换上

4.BL32

所谓的Secure OS,如ARM的TEE。
一般在BL32会运行在OPTee OS+ 安全app。它是一个可信安全的OS运行在可信安全的OS运行在EL1并在EL0启动可信任APP(如指纹信息,移动支付密码等),并在Trust OS运行完成后通过SMC指令返回BL31,BL31切换到Mon-Secure World继续执行BL33.

5.BL33

Normal World,运行的都是非安全固件,即常见的UEFI firmware或者u-boot,也可以直接启动Linux Kernel。

2.交互流程

2.1 软件逻辑流程

软件逻辑流程:
1.首先CA需要图Trusted OS之间建立一个Context,以后CA与TEE环境的所有通信均基于此Context。
2.然后CA会向Trusted OS申请与联系的TA建立一个Session
3.CA与TA之间的Session建立完成之后,CA即可向TA发送Commond。
4.Commonds及其参数会通过共享内存的方式传递,TA从共享内存中获取到CA的请求以及请求参数
5.TA在TEE环境下执行处理,得到的处理结果重新填充到共享内存中,CA通过共享内存就可以获取到处理结果
6.获得处理结果后,如不需要进一步请求,则由CA发起关闭Sessio的请求,Trusted OS回收TA相关资源,最后发起销毁Context的请求,完成一次完整的交互。

2.2CA/TA通信

执行流程:
打开会话 ---- 执行命令 ---- 关闭会话

3交互原理

CA通过调用TEE Client API 接口触发系统调用,陷入REE的操作系统内核态,系统根据CA的入参来找到需要执的REE驱动程序,REE驱动程序通过SMC(secure monitor call,安全监控模式调用)汇编指令进入Monitor模式,并修改安全状态读写信号位就,将CPU切换到安全内核态(改变寄存器左后1bit为0,1为非安全),进入secure world

​        切换到TEE后,CA的服务请求通过Binder传到TEE侧,然后TEE OS通过TEE Internal API 拉起对应的TATA运行结束后将结果和数据返回的CA。执行完成后回到TEE内核态,再通过SMC汇编指令进入Monitor切换到REE环境。

  • 30
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值