GP TEE Client API基本概念

TEE Client API关键原则是:

C语言

阻塞式函数

源码级别的可移植性

客户端内存分配

零拷贝数据传输

通过指针共享内存

专注于定义基础通信机制

TEE Client AP基础概念:

TEE Context:TEE Context是CA和TEE之间的逻辑连接的抽象。

必须先初始化TEE Context,然后才能在该TEE Context所表示的TEE中创建CA与TA间的会话。当不再需要与TEE的连接时,应终止TEE Context,从而释放系统资源。

Session:Session是CA和TA之间的逻辑连接的抽象。会话由CA在特定的TEE Context内打开。

在创建新会话时,CA必须使用UUID标识其希望连接的TA。

Command:Command是一个会话中CA和TA的通信单元。

当启动新命令时,CA通过传递数字标识符来标识其希望执行TA中的对应功能,并提供TA需要的数据。命令调用将阻塞CA线程,等待来自TA的答复,CA可以使用多线程来并发处理多个命令。

Operation Payload:OpenSession和InvokeCommand可以携带payload,载荷存储在TEEC_Parameter数据结构中,可以携带四个TEEC_Parameter。

每个Parameter是内存引用或值参数,内存引用参数用于通过共享内存缓冲区交换数据,值参数以两个32位整数的形式携带少量数据。

内存引用包含已注册内存引用或临时内存引用,注册内存引用是在操作之前创建的共享内存块中的区域,临时内存引用直接指定了CA拥有的一块内存缓冲区,该缓冲区在执行操作期间由TEE Client API临时注册。

Shared Memory:共享内存是在CA内存空间中分配的内存区域,可用于在CA和TA之间传输数据。

共享内存可以是现有的CA内存,该内存随后通过TEE Client API注册,也可以是CA使用TEE Client API分配的内存。共享内存可以注册或分配一次,然后在多个命令中使用,甚至可以在多个会话中使用,前提是它们存在于创建共享内存的TEE Context范围内。

零拷贝数据传输——在可能的情况下,TEE Client API下的通信通道的实现应尝试将共享内存直接映射到TA内存空间,从而实现真正的零拷贝数据传输。CA开发人员应注意,让TEE Client API使用TEEC_AllocateSharedMemory函数分配内存缓冲区可最大程度地利用零拷贝交换成功共享它。

Memory References:内存引用是某个特定操作实际共享的字节范围,表示为TEEC_MemoryReference或TEEC_TempMemoryReference数据结构。

内存引用类型包含有,

TEEC_MEMREF_TEMP_INPUT、TEEC_MEMREF_TEMP_OUTPUT、TEEC_MEMREF_TEMP_INOUT,临时内存引用预示着该参数指向要共享的内存缓冲区,而不是指向共享内存控制结构。在执行操作期间,此CA缓冲区将被临时共享。

TEEC_MEMREF_WHOLE,整个内存引用实现了一种轻量级的机制,可以共享整个父级共享内存块,而无需复制内存引用中共享内存结构控制字段的内容。使用此内存类型时,整个共享内存区域将与父共享内存指定的方向标志共享。

TEEC_MEMREF_PARTIAL_INPUT、TEEC_MEMREF_PARTIAL_OUTPUT、TEEC_MEMREF_PARTIAL_INOUT,部分内存引用是指父共享内存块的子区域,允许该块内的任何区域与TA共享。

Resource Cleanup:

释放Shared Memory时,客户端代码必须确保在挂起的操作中未引用它

关闭会话时,会话中不得有任何待处理的操作

在终止TEE Context时,其范围内不得有任何打开的会话

原文地址:https://www.cnblogs.com/caidi/p/14692865.html