ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

optee 实现java->jni->ca->user ta

2019-08-22 19:39:33  阅读:407  来源: 互联网

标签:optee ca 内存 TEEC TEE user java CA TA


OP-TEE:Secure world OS(optee_os)、normal world client(optee_client)、test suite(optee_test/xtest)以及linux驱动

optee_os: https://github.com/OP-TEE/optee_os

optee_client: https://github.com/OP-TEE/optee_client    主要生成libteec.so, 是包含用于与可信操作系统通信的API的库

optee_test:https://github.com/OP-TEE/optee_test

可参考书籍《手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 》

CA(Client Application,运行在normal world)和TA(Trust Application,运行在secure world)

TA又分为用户TA(user ta)和静态TA(static ta),静态TA是和optee build在一起的

CA主要通过TEEC_UUID来调用TA

 

Java层调用库包:System.loadLibrary("control_opt"); 引用native层函数

调用jni函数

Jni层:调用CA程序

加载头文件,引用CA的C函数

extern "C" 
{
    #include "ca.h"
}

CA层:通过TEEC_OpenSession调用libteec.so,其中TEEC_UUID的对应具体要通信的TA

TEEC_InvokeCommand  通过cmd_id调用TA对应函数

user TA层:TEEC_UUID.ta (换成具体对应的uuid.ta)   TA端程序

TA_OpenSessionEntryPoint  响应CA端TEEC_OpenSession

TA_InvokeCommandEntryPoint  对应函数cmd_id   响应CA端TEEC_InvokeCommand

STA层(static TA): 也是通过TEEC_UUID调用具体的TA程序

TEE_OpenTASession

TEE_InvokeTACommand

 

由于CA端与TA端是隔离的,如果需要交换数据的话,要使用:TEEC_MEMREF_TEMP_INOUT/TEEC_MEMREF_PARTIAL_INOUT  这两种内存映射,一个是临时一个是部分的

TEEC_MEMREF_TEMP_INOUT:临时内存引用指向的是共享内存缓冲区,而不是共享内存控制结构

TEEC_MEMREF_PARTIAL_INOUT :部分内存引用,指向父共享内存块的子区域,允许模块中任 意字节域共享给可信应用,需要通过TEEC_AllocateSharedMemory申请

CA如果还需要跟STA(static TA)交换数据的话,需要在user TA中重新申请内存,缓存上述所说的内存映射或者内存缓冲区,由user TA端与STA端交换数据,并把交换后的数据拷贝到相应的内存映射或者内存缓冲区,返回到CA端。

 

 

标签:optee,ca,内存,TEEC,TEE,user,java,CA,TA
来源: https://blog.csdn.net/lf12345678910/article/details/100020316

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有