optee的RPC设计(模型)详解

文章目录

        • 1、REE和TEE正向调用/反向调用的流程图
        • 2、REE到TEE的正向调用
        • 3、TEE到REE的反向调用


★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★

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
    optee的RPC设计(模型)详解_第1张图片

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

你可能感兴趣的:(optee,optee,RPC,atf,trustzone,linux)