欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

optee os中共享内存的类型

发布时间:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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中共享内存的类型的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。