系列一中实现了QEMU虚拟机中的OP-TEE环境搭建,对于如何直观的理解OP-TEE的文件系统,本文中通过对其中集成的Hello_world示例进行分析,讲解Hello_world的运行流程。
<br />本文系一边查阅资料一边记录而成,有错误之处欢迎指出
Hello_world文件目录
安装好OP-TEE环境后,在Normal窗口键入hello_world,产生如下输出
post_02_1.png查看ll hello_world项目文件夹
post_02_2.jpgta文件夹:TA部分代码
post_02_4.jpgAndroid.mk文件:ta: Add support for Android.mk
To allow hello_world to build properly in aosp.
sub.mk文件:定义该TA中需要被编译的source code。
user_ta_header_defines.h文件:定义UUID、FLAGS等相关宏
tee_client_api.h文件:TEE client API (built by optee_client)
include/hello_world_ta.h文件:定义了UUID的宏以及与CA对应的commond ID宏
UUID (TA_HELLO_WORLD_UUID)
Commond ID(TA_HELLO_WORLD_CMD_INC_VALUE)
The Trusted Application Function ID(s) implemented in this TA
hello_world_ta.c
TA实现部分代码
Makefile文件:编译文件
配置Makefile
# The UUID for the Trusted Application
BINARY=8aaaf200-2450-11e4-abe2-0002a5d5c51b
host文件夹:CA部分代码
post_02_3.jpgmain.c文件:该文件就是在linux中调用CA可执行文件的主函数存在的文件
Makefile文件:编译CA可执行文件使用的makefile文件
配置Makefile_主要修改BINARY变量和OBJ变量
OBJS = main.o
BINARY=hello_world
//如果CA部分的代码不止一个.c文件,则需要将所有的.c文件编译生成的.o文件
//文件名称添加到OBJS变量中,而BINARY变量就是编译完成之后生成的Binary的名称。
编译TA和CA代码
build_ta_helloworld_qemu.sh:执行编译TA/CA文件,生成编译二进制、map文件
Hello_world实现
组成
客户端实现 Linux
安全世界可信应用TA,被动接收器
基于GP api
执行
post_02_5.png1、Initialize context
TEEC_InitializeContext
2、Open session
TEEC_OpenSession
Open a session to the "hello world" TA, the TA will
print "hello world!"
in the log when the session is created.
post_02_6.png1)首先TEE Core接受TEE Driver传递过来的TEEC_OpenSession()调用
2)TEE Core通过tee-supplicant(Linux用户空间驻留程序)加载TA二进制文件
3)TEE Core复制TA进去安全RAM,并调用函数TA_OpenSessionEntryPoint()
4)会话返回
3、Invoke command调用TA命令
post_02_7.png TEEC_InvokeCommand()
TA_InvokeCommandEntryPoint()
调用TA实现增量
3、Close session and finalize context
post_02_8.png TEEC_CloseSession(&sess);
TEEC_FinalizeContext(&ctx);
The TA will print
"Goodbye!"
in the log when the session is closed.
网友评论