【CA-TA实战系列六】CA与TA背后的故事一:TEE OS
一、前言
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相关推荐
- xen虚拟化实战系列(六)之xen虚拟机破解密码
xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...
- 【Youtobe trydjango】Django2.2教程和React实战系列六【自定义主页、路由与请求】
[Youtobe trydjango]Django2.2教程和React实战系列六[自定义主页.路由与请求] 1. 初始化主页应用 2. 修改视图 3. 项目url增加主页路由 4. 路由 1. 初始 ...
- 活动目录实战系列六(win98客户端加入域)
局域网中有一台客户机为98,现在不太可能了,在这边就是告诉大家怎么把WIN98加入域. 首先我们建立一个用户win98 我们现在设置WIN98客户端. 我们这里域为51ctolab.com,域控IP地 ...
- 云计算实战系列六(Linux进程管理)
一 .进程管理 关于进程 process ======================================================= 什么是进程 ? 进程的生命周期 Process ...
- 爬虫实战系列(六):selenium获取网抑云《无滤镜》评论
声明:本博客只是简单的爬虫示范,并不涉及任何商业用途. 一.前言 网易云可以说是国内一个较流行的音乐平台了,作为一名云村老用户,今天还是忍不住向它下手了.由于QQ音乐评论爬虫的经验,我很快就在开发者工 ...
- xen虚拟化实战系列(一)之xen虚拟化环境安装
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1284516 xen目前 ...
- xen虚拟化实战系列(二)之xen虚拟机安装
xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...
- springboot 插入返回id_Spring Boot实现分布式微服务开发实战系列(七)
今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...
- ElasticSearch实战系列十一: ElasticSearch错误问题解决方案
前言 本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法. ElasticSearch环境安装问题 1,max virtual memory areas vm.max_ma ...
最新文章
- BIEE建模 之 Administration 导入元数据时无法显示表
- 水晶报表基础入门——1.水晶报表技术
- 后疫情时代,银行从数字化转型到智能化“迁徙”
- java内部类为什么使用很少_java内部类有什么好处?为什么需要内部类?
- 局域网聊天关心他们的教育
- 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
- SpringCloud学习笔记019---Windows 平台安装 MongoDB
- 机箱一直反复开机熄火_小身材大容量,老炮九州风神魔方110机箱+DQ 650ST+玄冰400双刃装机体验...
- CentOS 8部署Gitlab
- FreeBSD 8.0候选版本RC2发布
- mapinfo在线地图插件_官方插件“战争游戏”使用指南 公测同步开启
- 【AVR单片机】【Microchip Studio】01项目创建
- Rabbitmq 安全账号管理方案
- 解决阿里云CentOS8 yum安装appstream报错,更新yum后无法makecache的问题
- 美团网手机客户端产品分析
- android 怎么刷新view,android – 如何在ViewPager中刷新当前视图
- Linux 系统安全应用
- #175-【线段树与树状数组】砍树
- C++查看变量类型办法(typeinfo)
- 一个巨牛的人工智能教程
热门文章
- win10提示没有注册类,什么都打不开了
- java 浙江大学_浙江大学java上机参考答案
- win10 系统安装LoadRunner11及报错处理
- 如何才能监控查看出注册表更改情况,本地组策略设置更改了哪些注册表对应值?
- 计算机技能大赛广播稿,运动会比赛广播稿50篇
- EasyDSS如何实现定期检测和取读加密狗授权?
- 65条网页制作常用技巧整理
- POST发送请求报错及解决方案(parameter must be a JSON array)
- mysql镜像仓库_阿里云的镜像仓库
- Bruno Lowagie访谈:“ iText 7超越了PDF” | GIDS 2016