一、前言

TEE OS就是可信环境的操作系统,这里我们的参考资料是前辈的《手机安全和可信应用开发指南》,因此这里我们的TEE OS就是OP TEE。

那么为什么在搞TA CA的设计实现要关TEEOS什么事情?关OPTEE什么事情?

回想一下我们当时的那个架构图。

看到没OP-TEE包含的可多了,咱们这CA和TA的开发是绕不开TEEOS的。靓仔们,所以我们来了解了解这玩意的代码结构有什么,关于optee的东西,在这个专栏里面,转载了很多前辈书里面的内容来讲解,这里就不展开了。这里只是了解一些大概的目录,后面开发的时候知道有哪些东西,以及再哪里修改。

(后续我也会整理自己的笔记,做一个跳转栏。因为有时候是目的驱动,所以学习不是按部就班的流程)

二、OP-TEE源代码结构

OP-TEE的源代码包含运行OP-TEE时需要的所有软件源代码,OP-TEE工程编译完成后,整个源代码的目录结构如下:

        ├—— basicAlg_use├—— bios_qemu_tz_arm├—— build├—— busybox├—— gen_rootfs├—— linux├—— optee_benchmark├—— optee_client├—— optee_examples├—— optee_my_test├—— optee_os├—— optee_test├—— out├—— qemu├—— secStor_test├—— soc_term└—— toolchains

OP-TEE各子目录中的代码功能说明如下。

  • (1)bios_qemu_tz_arm目录
    在QEMU平台中运行tz_arm的BIOS代码,启动的最初阶段会被使用到,用来加载Linux内核镜像、OP-TEE OS镜像、rootfs并启动Linux内核和OP-TEE OS。(模拟)
  • (2)build目录
    OP-TEE工程的编译目录,包含各种mk文件和相关配置文件,其中common.mk文件是工程的通用mk文件,不同的CPU架构有不同的mk与之相对应,编译工程时可使用make -f的方式指定编译哪个板级的OP-TEE
  • (3)busybox目录
    busybox的源代码,编译生成制作rootfs所需要的文件和目录。
  • (4)gen_rootfs目录
    存放制作rootfs时使用的相关脚本和配置文件。
  • (5)linux目录
    Linux内核代码,在driver/tee目录下存放的是OP-TEE在REE侧的驱动,任何在Linux用户空间调用CA的接口都会经过OP-TEE的REE侧驱动处理之后再转发到TEE侧。
  • (6)optee_benchmark目录
    OP-TEE运行的性能测试工具,只保存CA端的代码,TA部分的代码保存在OP-TEE OS中,作为静态TA集成到OP-TEE OS中。
  • 7)optee_client目录
    包含CA程序调用的用户空间的接口库(libteec)的源代码其中tee_supplicant目录中的代码会被编译成一个可执行文件,该可执行文件在Linux启动时作为守护进程常驻在系统中,该守护进程的主要作用是响应和处理来自TEE侧的RPC请求,这些RPC请求包括:加载TA镜像、对文件系统的操作对SQL的操作、对EMMC RPMB的操作、网络通信的socket操作等
  • (8)optee_examples目录
    示例代码,目录下包含OP-TEE提供的各种示例的TA和CA的所有代码,启动后,在REE对应的terminal中执行optee_example_hello_world命令后,会调用optee_example_hello_world的TA的逻辑,TA根据接收到的command ID在OP-TEE中执行对应的操作。
  • (9)optee_os目录
    存放OP-TEE OS的源代码和相关文档,编译完成之后,该目录将会生成OP-TEE的镜像文件
  • (10)optee_test目录
    opentee的测试程序xtest的源代码,主要用来测试OP-TEE中提供的各种算法的逻辑并提供其他测试功能。
  • (11)out目录
    编译结果的输出目录(该目录编译完成之后才会生成)。
  • (12)qemu目录
    QEMU源代码,如果编译的是qemu.mk,编译时将会使用到该目录。
  • (13)soc_term目录
    在使用QEMU运行OP-TEE时,gnome-terminal命令会启动终端,用于建立启动的两个terminal的端口监听,方便OP-TEE OS的log和Linux的log分别输出到对应的terminal中。
  • (14)toolchains目录
    编译时需要使用的编译工具链,在build目录下执行make-f toolchai.mk toolchains后将会生成该目录。

1、optee_client目录

对于这个目录,看到它的内容就知道和我们的开发算是第一个对接的对象,所以蛮重要的。


源码路径:

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

2、OP-TEE编译

整个OP-TEE工程的编译是一个庞大的过程,牵扯到目标的依赖关系,本节以qemu. mk板级为例,分析使用QEMU方式运行OP-TEE时的全部编译过程和目标依赖关系。

        all├—— bios-qemu|   ├—— optee-os|   |   └—— optee-os-common|   └—— update_rootfs|        └—— update_rootfs-common|             ├—— busybox|             |   └—— busybox-common|             |        └—— linux|             |             └—— linux-common|             |                 └—— linux-defconfig|             └—— filelist-tee|                 └—— filelist-tee-common|                      ├—— f1|                      |   └—— filelist-tee.txt|                      ├—— optee-client|                      |   ├—— common|                      |   └—— optee-client|                      └—— xtest|                      |   ├—— optee-client|                      |   └—— xtest-common|                      |        └—— optee-os|                      |              └——optee-os-common|                      └—— optee-examples|                            └—— build_socterm|                                  └—— helloworld-common|                                      ├——optee-client|                                      └——optee-os├—— benchmark-app├—— qemu|   └—— build_qemu└—— soc-term|   └—— build_socterm└—— optee-examples|   └—— build_socterm|         └—— helloworld-common|              ├——optee-client|              └——optee-os

QEMU目标会切换到QEMU目录,并获取QEMU的配置文件,然后执行make命令来编译QEMU目标。

  • soc-term目标会编译soc-term目录,生成一个soc-term的可执行文件,用于启动两个terminal。

  • bios-qemu目标依赖于update_rootfs和optee-os,update_rootfs和optee-os编译完成之后会调用biosqemu-comm宏定义的指令,该宏会编译bios_qemu_tz_arm目录,该目录编译完成之后,会生成启动时需要的bios镜像。(bios.bin中会包含Linux kernel的镜像、OP-TEE OS的镜像以及rootfs。该镜像文件是在bios-qemu的目标中编译出来的。)

  • optee-os-common目标将编译optee_os目录,该目录编译完成后将会生成tee.bin及其他的lib库文件。(安全操作系统镜像文件)

  • busybox目标将编译linux目录和busybox目录,生成Linux内核镜像文件和制作rootfs需要的相关文件

  • filelist-tee目标将生成tee功能相关的文件和需要被挂载到rootfs中的映射图,然后与系统的其他文件的挂载映射关系一起保存到filelist-final.txt文件中,用于生成filesystem.cpio.gz文件。

  • update_rootfs-common目标依赖于busybox和filelist-tee目标,上述两个目标编译完成之后,将会切换到gen_rootfs目录中,调用gen_init_cpio命令生成在启动时需要使用的filesystem.cpio.gz文件。

  • Optee_examples目标包含OP-TEE提供的各种TA部分和CA部分,编译完成之后,会生成对应的TA镜像文件和CA的可执行文件

  • optee-client目标将对optee_client目录进行编译,生成一系列的库文件和可执行文件,库文件提供了OP-TEE在Linux端的接口,将被所有CA调用tee-supplicant目标将会编译生成一个tee_supplicant的可执行文件该可执行文件提供了optee_os访问文件系统的RPC接口以及加载具体的TA镜像的功能

  • xtest目标将会编译optee_test目录,生成在xtest集合中会使用的TA镜像文件和xtest可执行文件。

三、小结

其实这部分关于安全镜像编译是比较重要的,但是我这个系列出发点是TA与CA的开发,所以关于安全镜像这个部分就不展开了,感兴趣的可以看一下前辈的书籍。系列后续来聊聊TA和CA两个交流背后的事情。

参考资料:
《手机安全和可信应用开发指南》

【CA-TA实战系列六】CA与TA背后的故事一:TEE OS相关推荐

  1. xen虚拟化实战系列(六)之xen虚拟机破解密码

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

  2. 【Youtobe trydjango】Django2.2教程和React实战系列六【自定义主页、路由与请求】

    [Youtobe trydjango]Django2.2教程和React实战系列六[自定义主页.路由与请求] 1. 初始化主页应用 2. 修改视图 3. 项目url增加主页路由 4. 路由 1. 初始 ...

  3. 活动目录实战系列六(win98客户端加入域)

    局域网中有一台客户机为98,现在不太可能了,在这边就是告诉大家怎么把WIN98加入域. 首先我们建立一个用户win98 我们现在设置WIN98客户端. 我们这里域为51ctolab.com,域控IP地 ...

  4. 云计算实战系列六(Linux进程管理)

    一 .进程管理 关于进程 process ======================================================= 什么是进程 ? 进程的生命周期 Process ...

  5. 爬虫实战系列(六):selenium获取网抑云《无滤镜》评论

    声明:本博客只是简单的爬虫示范,并不涉及任何商业用途. 一.前言 网易云可以说是国内一个较流行的音乐平台了,作为一名云村老用户,今天还是忍不住向它下手了.由于QQ音乐评论爬虫的经验,我很快就在开发者工 ...

  6. xen虚拟化实战系列(一)之xen虚拟化环境安装

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1284516 xen目前 ...

  7. xen虚拟化实战系列(二)之xen虚拟机安装

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

  8. springboot 插入返回id_Spring Boot实现分布式微服务开发实战系列(七)

    今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...

  9. ElasticSearch实战系列十一: ElasticSearch错误问题解决方案

    前言 本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法. ElasticSearch环境安装问题 1,max virtual memory areas vm.max_ma ...

最新文章

  1. BIEE建模 之 Administration 导入元数据时无法显示表
  2. 水晶报表基础入门——1.水晶报表技术
  3. 后疫情时代,银行从数字化转型到智能化“迁徙”
  4. java内部类为什么使用很少_java内部类有什么好处?为什么需要内部类?
  5. 局域网聊天关心他们的教育
  6. 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
  7. SpringCloud学习笔记019---Windows 平台安装 MongoDB
  8. 机箱一直反复开机熄火_小身材大容量,老炮九州风神魔方110机箱+DQ 650ST+玄冰400双刃装机体验...
  9. CentOS 8部署Gitlab
  10. FreeBSD 8.0候选版本RC2发布
  11. mapinfo在线地图插件_官方插件“战争游戏”使用指南 公测同步开启
  12. 【AVR单片机】【Microchip Studio】01项目创建
  13. Rabbitmq 安全账号管理方案
  14. 解决阿里云CentOS8 yum安装appstream报错,更新yum后无法makecache的问题
  15. 美团网手机客户端产品分析
  16. android 怎么刷新view,android – 如何在ViewPager中刷新当前视图
  17. Linux 系统安全应用
  18. #175-【线段树与树状数组】砍树
  19. C++查看变量类型办法(typeinfo)
  20. 一个巨牛的人工智能教程

热门文章

  1. win10提示没有注册类,什么都打不开了
  2. java 浙江大学_浙江大学java上机参考答案
  3. win10 系统安装LoadRunner11及报错处理
  4. 如何才能监控查看出注册表更改情况,本地组策略设置更改了哪些注册表对应值?
  5. 计算机技能大赛广播稿,运动会比赛广播稿50篇
  6. EasyDSS如何实现定期检测和取读加密狗授权?
  7. 65条网页制作常用技巧整理
  8. POST发送请求报错及解决方案(parameter must be a JSON array)
  9. mysql镜像仓库_阿里云的镜像仓库
  10. Bruno Lowagie访谈:“ iText 7超越了PDF” | GIDS 2016