baron · 3月28日 · 四川

optee的RPC设计(模型)详解

快速连接

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


 title=

1、REE和TEE正向调用/反向调用的流程图

开机之后,启动tee-supplicant后,执行: a b

  • 一次完整的TEE调用流程: 1 2 3 4 5
  • 一次完整的RPC流程 : 6 7 b 8 c 2
  • 一次完整的TEE调用流程(在TEE中又调用了RPC): 1 2 3 4 5 6 7 b 8 c 2 3 4 5
    在这里插入图片描述

2、REE到TEE的正向调用

  • ① APP调用CA,CA调用libteec.so,libteec.so调用/dev/tee0节点,进入驱动的ioctl函数
  • ② ioctl函数中调用optee_do_call_with_arg(),该函数调用smc将CPU通过ATF切换到了optee
  • ③④ optee处理完任务后,调用smc通过ATF返回到驱动中的ioctl(返回到②中刚才切出去的地方)
  • ⑤ ioctl返回到应用程序

3、TEE到REE的反向调用

  • ⑥ optee中调用thread_rpc_cmd函数,然后调用到smc通过ATF将cpu切回linux(回到之前切TEE的点,也就是optee_do_call_with_arg()函数中)
  • ⑦ optee_do_call_with_arg()函数中判断,如果是RPC命令切回来的,则走RPC流程,也就是complete(&reqs_c)
  • b ⑧ 之前的tee-supplicant进程一直卡在optee_supp_recv()中,等待完成量,在步骤⑦完成量释放,程序继续往下执行,返回到tee-supplicant
  • c tee-supplicant读取到TEE返回的命令后,解析命令,然后进行相应的处理(相应的处理可能是userspace中完成,也可能再通过ioctl到驱动中完成),干完活之后再调用ioctl,调用complete(&req->c)通知optee_do_call_with_arg()程序,再切回TEE
  • ② optee_do_call_with_arg()程序,切回TEE

    关注"Arm精选"公众号,备注进ARM交流讨论区。
    图片1.png

推荐阅读
关注数
9466
内容数
212
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息