快速连接
👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈
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交流讨论区。