共享内存
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中文手册