美文网首页
OP-TEE系列之(二)Hello-world示例程序讲解

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

作者: Hiro_Wang | 来源:发表于2018-03-25 14:18 被阅读0次

    系列一中实现了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.jpg

    ta文件夹:TA部分代码

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

    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

    执行

    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.

    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命令

    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.

    相关文章

      网友评论

          本文标题:OP-TEE系列之(二)Hello-world示例程序讲解

          本文链接:https://www.haomeiwen.com/subject/iebhcftx.html