optee中User TA的加载/验签和运行
生活随笔
收集整理的這篇文章主要介紹了
optee中User TA的加载/验签和运行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1、TA的加載到TEE內存
1、TA的加載到TEE內存
在optee中調用rpc_load函數,先去RPC到REE讀取TA的size,再RPC到TEE中分配share-memory,返回成功后TEE側也會map該內存.然后再次RPC到REE讀取TA binary到共享內存.
流程圖如下所示
附上rpc_load的代碼,其實optee讀取REE側的文件,都是rpc_load流程。
static TEE_Result rpc_load(const TEE_UUID *uuid, struct shdr **ta,uint64_t *cookie_ta, size_t *ta_size,struct mobj **mobj) {TEE_Result res;struct optee_msg_param params[2];uint64_t cta = 0;if (!uuid || !ta || !cookie_ta || !mobj || !ta_size)return TEE_ERROR_BAD_PARAMETERS;memset(params, 0, sizeof(params));params[0].attr = OPTEE_MSG_ATTR_TYPE_VALUE_INPUT;tee_uuid_to_octets((void *)¶ms[0].u.value, uuid);params[1].attr = OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT;params[1].u.tmem.buf_ptr = 0;params[1].u.tmem.size = 0;params[1].u.tmem.shm_ref = 0;res = thread_rpc_cmd(OPTEE_MSG_RPC_CMD_LOAD_TA, 2, params);if (res != TEE_SUCCESS)return res;*mobj = thread_rpc_alloc_payload(params[1].u.tmem.size, &cta);if (!*mobj)return TEE_ERROR_OUT_OF_MEMORY;*ta = mobj_get_va(*mobj, 0);/* We don't expect NULL as thread_rpc_alloc_payload() was successful */assert(*ta);*cookie_ta = cta;*ta_size = params[1].u.tmem.size;params[0].attr = OPTEE_MSG_ATTR_TYPE_VALUE_INPUT;tee_uuid_to_octets((void *)¶ms[0].u.value, uuid);msg_param_init_memparam(params + 1, *mobj, 0, params[1].u.tmem.size,cta, MSG_PARAM_MEM_DIR_OUT);res = thread_rpc_cmd(OPTEE_MSG_RPC_CMD_LOAD_TA, 2, params);if (res != TEE_SUCCESS)thread_rpc_free_payload(cta, *mobj);return res; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的optee中User TA的加载/验签和运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: optee userpace TA程序中
- 下一篇: optee的RPC设计(模型)详解