前言
上文我们创建好了通道,现在就是操作,怎么操作TA呢?
REE侧的CA执行创建会话操作成功后,CA就可使用获取到的会话ID和命令ID调用TEEC_InvokeCommand接口来让TA执行特定的命令。
在CA中调用TEEC_InvokeCommand接口时,该函数会将会话ID、命令ID,以及需要传递给TA的参数信息通过ioctl的系统调用发送到OP-TEE的驱动中,OP-TEE驱动会调用optee_invoke_func函数将需要传递给TA的参数信息保存在共享内存中,并触发安全监控模式调用(smc)切换到Monitor模式(ARMv7)或EL3(ARMv8)中进行安全世界状态的处理。

调用TA命令触发的安全监控模式调用最终会被作为标准安全监控模式调用进行解析,并建立一个专门的线程进入thread_std_smc_entry函数去执行,线程运行到tee_entry_std函数时会对安全监控模式调用(smc)进行判定,并进入调用TA命令的分支。调用TA命令的操作在OP-TEE中的执行流程如图13-5所示。(这里如果你知道学习过atf的的smc调用就很好理解。)
本文深入探讨了OP-TEE中静态和动态TA的命令调用操作。当REE侧的CA通过TEEC_InvokeCommand接口发送调用命令时,OP-TEE驱动会通过安全监控模式调用(smc)切换到安全世界进行处理。在OP-TEE内部,tee_ta_invoke_command函数处理调用请求,对于静态TA,它调用invoke_command_entry_point接口;而对于动态TA,它通过user_ta_enter_invoke_cmd函数切换到用户空间执行。文章详细阐述了这两个过程并提供了相关函数的实现细节。
订阅专栏 解锁全文
1281

被折叠的 条评论
为什么被折叠?



