快速链接:
.
👉👉👉Trustzone/TEE/安全 面试100问-目录 👈👈👈
- 付费专栏-付费课程 【购买须知】:
- 联系方式-加入交流群 ----联系方式-加入交流群
- 个人博客笔记导读目录(全部)
简单一点来说,CA调用TA的流程,其实就算CA调用GP Client API就可以了。地城的逻辑都已经封装到libteec.so库里了。所以我们只关注标准的GP Client规范即可。在任何遵循GP规范的TEE中都适用。
例如:
- CA只要调用TEEC_OpenSession函数,TA的TA_CreateEntryPoint和TA_OpenSessionEntryPoint函数就会自动响应。
- CA只要调用TEEC_InvokeCommand函数,TA的TA_InvokeCommandEntryPoint函数就会自动响应。
- CA只要调用TEEC_CloseSession函数,TA的TA_CloseSessionEntryPoint和TA_DestroyEntryPoint函数就会自动响应。
- CA只要调用TEDC_InitializeContext和TEDC_FinalizeContext函数,程序进入到Linux Kernel就返回了,程序不会进入到TEE。
再往复杂一点说,CA如何调用到TA。CA调用GP Client API(在libteec.so库中实现),该API实现其实就是调用ioctl,调用到linux kernel中的tee driver。在tee driver的底层会调用smc指令,将cpu切换到ATF(这里开始双系统切换了),在ATF中会进行switch cpu_context双系统切换,然后eret回到TEE OS中,在TEE OS中,根据你传来的TA UUID,TEE OS首先会想办法将TA Bianry load到TEE安全内存,然后再让PC(ELR_EL1寄存器)指向TA的相关入口(entry),然后从EL1切回EL0,其实还是ERET返回EL0,至此程序就跑到TA中了。