OP-TEE系列之(二)Hello-world示例程序讲解

系列一中实现了QEMU虚拟机中的OP-TEE环境搭建,对于如何直观的理解OP-TEE的文件系统,本文中通过对其中集成的Hello_world示例进行分析,讲解Hello_world的运行流程。


本文系一边查阅资料一边记录而成,有错误之处欢迎指出

Hello_world文件目录

安装好OP-TEE环境后,在Normal窗口键入hello_world,产生如下输出

OP-TEE系列之(二)Hello-world示例程序讲解_第1张图片
post_02_1.png

查看ll hello_world项目文件夹

OP-TEE系列之(二)Hello-world示例程序讲解_第2张图片
post_02_2.jpg

ta文件夹:TA部分代码

OP-TEE系列之(二)Hello-world示例程序讲解_第3张图片
post_02_4.jpg

Android.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部分代码

OP-TEE系列之(二)Hello-world示例程序讲解_第4张图片
post_02_3.jpg

main.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

执行

OP-TEE系列之(二)Hello-world示例程序讲解_第5张图片
post_02_5.png

1、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.

OP-TEE系列之(二)Hello-world示例程序讲解_第6张图片
post_02_6.png

  1)首先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命令

OP-TEE系列之(二)Hello-world示例程序讲解_第7张图片
post_02_7.png

​  TEEC_InvokeCommand()

​  TA_InvokeCommandEntryPoint()
     调用TA实现增量

3、Close session and finalize context

OP-TEE系列之(二)Hello-world示例程序讲解_第8张图片
post_02_8.png

​  TEEC_CloseSession(&sess);

​  TEEC_FinalizeContext(&ctx);

  The TA will print

​     "Goodbye!"

  in the log when the session is closed.

你可能感兴趣的:(OP-TEE系列之(二)Hello-world示例程序讲解)