optee的共享内存的介绍

40 阅读1分钟

共享内存

1、共享内存的介绍

2、共享内存的使用

1、共享内存的介绍

share memory是一块内存区域, 用于non-secure world和secure world的通信.

optee支持两种share memory: 连续的buffer,非连续的buffer

optee是按照buffer来管理共享内存的,而不是按照pool来管理的. 每一个buf需要配置如下属性:

buffer的起始地址和size

该buffer的cache属性

如果是被map到非连续的buf,则列出它所有的块(chunk)

配置成连续的share buffer

CFG_CORE_RESERVED_SHM=y

CFG_SHMEM_START and CFG_SHMEM_SIZE 定义起始地址和size

该memory的type是MEM_AREA_NSEC_SHM

在non-secure world需要调用OPTEE_SMC_GET_SHM_CONFIG来获取:

share memory的物理地址和size

share memory的cached属性

非连续的share memory(动态注册的)

CFG_CORE_DYN_SHM=y

在使用share memory之前,REE需要调用OPTEE_MSG_CMD_REGISTER_SHM注册share memroy, 在optee中share memroy最小的chunk单位是4k bytes;

共享内存是在linux driver中分配的,linux kernel需支持CONFIG_GENERIC_ALLOCATION 来分配/释放内存物理块. optee的linux driver依赖于linux内核dma-buf支持(CONFIG_DMA_SHARED_BUFFER)来跟踪共享内存缓冲区引用

2、共享内存的使用

TEEC_AllocateSharedMemory(…) 在linux中分配内存

TEEC_RegisterSharedMemory(…) 到optee中注册该内存

添加威♥:sami01_2023,回复ARM中文,领取ARM中文手册