上面我们知道了IPC的相关东西,并回忆了系统调用的过程。
下面来看看这个IPC具体是怎么实现的。
OP-TEE的IPC机制是通过系统调用陷入到内核中来实现的。调用其他TA的操作有专门的接口,而访问安全驱动和OP-TEE的服务则是通过在内核态中调用服务提供的内核级接口来实现的。
线程–》内核态–》服务/安全驱动给内核的接口
一个TA调用其他TA时,OP-TEE通过建立两者间的会话,并调用命令来实现。(这不是和TA CA通信一个样儿,当然还是有细微的差别)
GP规范定义了如表17-1中的三个接口,这些接口可在OP-TEE的用户空间被调用。

当一个TA需要调用其他的TA时,首先需要使用TEE_OpenTASession创建两个TA之间的会话,再使用TEE_InvokeTACommand调用到已经建立的会话的TA中的具体操作,待不再需要调用其他TA时,则调用TEE_InvokeTACommand函数关闭会话来断开两个TA间的联系。
下面看看这三个的实现
TEE_OpenTASession的实现与CA中创建与TA的会话的过程大致相同,但TEE_OpenTASession是通过系统调用的方式来触发OP-TEE分配线程并创建会话,而CA则是通过触发安全监控模式调用(smc)来让OP-TEE分配线程并创建会话。