optee os中共享内存的类型
生活随笔
收集整理的這篇文章主要介紹了
optee os中共享内存的类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
說明: 在默認的情況下,本文講述的是armv8 aarch64體系,optee 3.12.0代碼
文章目錄
- 1、REE獲取optee中共享內存的屬性
- 2、在optee中,返回共享內存類型
- 3、共享內存屬性
詞匯:
- caps : capability : n. 能力;功能;性能
1、REE獲取optee中共享內存的屬性
在Linux Kernel driver中optee_prob的時候,調用OPTEE_SMC_EXCHANGE_CAPABILITIES命令,到optee os中,獲取共享內存屬性
static struct optee *optee_probe(struct device_node *np) { ...if (!optee_msg_exchange_capabilities(invoke_fn, &sec_caps)) {pr_warn("capabilities mismatch\n");return ERR_PTR(-EINVAL);} ... }static bool optee_msg_exchange_capabilities(optee_invoke_fn *invoke_fn,u32 *sec_caps){union {struct arm_smccc_res smccc;struct optee_smc_exchange_capabilities_result result;} res;u32 a1 = 0;/** TODO This isn't enough to tell if it's UP system (from kernel* point of view) or not, is_smp() returns the the information* needed, but can't be called directly from here.*/if (!IS_ENABLED(CONFIG_SMP) || nr_cpu_ids == 1)a1 |= OPTEE_SMC_NSEC_CAP_UNIPROCESSOR;invoke_fn(OPTEE_SMC_EXCHANGE_CAPABILITIES, a1, 0, 0, 0, 0, 0, 0,&res.smccc);if (res.result.status != OPTEE_SMC_RETURN_OK)return false;*sec_caps = res.result.capabilities;return true;}2、在optee中,返回共享內存類型
/* Normal world works as a uniprocessor system */ #define OPTEE_SMC_NSEC_CAP_UNIPROCESSOR (1 << 0) /* Secure world has reserved shared memory for normal world to use */ #define OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM (1 << 0) /* Secure world can communicate via previously unregistered shared memory */ #define OPTEE_SMC_SEC_CAP_UNREGISTERED_SHM (1 << 1) /* * Secure world supports commands "register/unregister shared memory", * secure world accepts command buffers located in any parts of non-secure RAM */ #define OPTEE_SMC_SEC_CAP_DYNAMIC_SHM (1 << 2) /* Secure world is built with virtualization support */ #define OPTEE_SMC_SEC_CAP_VIRTUALIZATION (1 << 3) /* Secure world supports Shared Memory with a NULL reference */ #define OPTEE_SMC_SEC_CAP_MEMREF_NULL (1 << 4)static void tee_entry_exchange_capabilities(struct thread_smc_args *args) {bool dyn_shm_en __maybe_unused = false;/** Currently we ignore OPTEE_SMC_NSEC_CAP_UNIPROCESSOR.** The memory mapping of shared memory is defined as normal* shared memory for SMP systems and normal memory for UP* systems. Currently we map all memory as shared in secure* world.** When translation tables are created with shared bit cleared for* uniprocessor systems we'll need to check* OPTEE_SMC_NSEC_CAP_UNIPROCESSOR.*/if (args->a1 & ~OPTEE_SMC_NSEC_CAP_UNIPROCESSOR) {/* Unknown capability. */args->a0 = OPTEE_SMC_RETURN_ENOTAVAIL;return;}args->a0 = OPTEE_SMC_RETURN_OK;args->a1 = 0; #ifdef CFG_CORE_RESERVED_SHMargs->a1 |= OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM; #endif #ifdef CFG_VIRTUALIZATIONargs->a1 |= OPTEE_SMC_SEC_CAP_VIRTUALIZATION; #endifargs->a1 |= OPTEE_SMC_SEC_CAP_MEMREF_NULL;#if defined(CFG_CORE_DYN_SHM)dyn_shm_en = core_mmu_nsec_ddr_is_defined();if (dyn_shm_en)args->a1 |= OPTEE_SMC_SEC_CAP_DYNAMIC_SHM; #endifDMSG("Dynamic shared memory is %sabled", dyn_shm_en ? "en" : "dis"); }影響共享內存類型的相關宏
- CFG_CORE_RESERVED_SHM
- CFG_VIRTUALIZATION
- CFG_CORE_DYN_SHM
3、共享內存屬性
- OPTEE_SMC_NSEC_CAP_UNIPROCESSOR //Unknown capability
- OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM //依賴CFG_CORE_RESERVED_SHM,靜態注冊共享內存
- OPTEE_SMC_SEC_CAP_UNREGISTERED_SHM
- OPTEE_SMC_SEC_CAP_DYNAMIC_SHM //依賴CFG_CORE_DYN_SHM, 動態注冊共享內存
- OPTEE_SMC_SEC_CAP_VIRTUALIZATION //依賴CFG_VIRTUALIZATION
- OPTEE_SMC_SEC_CAP_MEMREF_NULL //默認支持
總結
以上是生活随笔為你收集整理的optee os中共享内存的类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: optee的Share Memory介绍
- 下一篇: optee的fast call的介绍