一.OP-TEE介绍
TEE背后的基本思想就是将和安全服务提取到独立的安全环境中去运行,当主系统有安全相关的操作时,通过发动请求到安全环境获取系统预定义的服务。基于此OP-TEE可以分为三个部分,TEE客户端和用来和安全环境通讯的TEE驱动,这2个部分都运行在主系统(Android/Linux…),运行在安全环境中的TEE OS以及在上面的安全应用,具体参见下图。

引用于ARM中文社区
二.前期准备:
1. 安装相应软件包,命令如下:

$ sudo apt-get install android-tools-fastboot autoconf bison cscope curl \flex gdisk libc6:i386 libfdt-dev libglib2.0-dev \libpixman-1-dev libstdc++6:i386 libz1:i386 netcat \python-crypto python-serial uuid-dev xz-utils zlib1g-dev

笔者使用的UBUNTU14.04版本下,所有软件包成功安装,在UBUNTU14.03版本下,存在两个软件包无法安装,在网上进行搜索,安装相应软件包比较简单,就不再累述解决办法了。这些软件包用于OPTEE_OS的设备启动和OPTEE的编译过程等,如果未能安装,在编译过程中会检查出来,并报错。
2. 下载代码
OP-TEE工程代码通过repo进行下载,需运行如下命令:

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

安装repo,并对repo进行初始化。
初始化完成后,运行命令:

$ mkdir -p $HOME/devel/optee
$ cd $HOME/devel/optee
$ repo init -u https://github.com/OP-TEE/manifest.git -m ${TARGET}.xml [-b ${BRANCH}]
$ repo sync

其中TARGET表示下载的工程类型,有两种选择:default(现在正在开发的版本),default_stable(已经稳定下来的版本)。BRANCH为可选项,现在只有一种选择,即master,若不写,默认为master。
资料显示,存在一部分情况无法使用如上方法进行下载,解决办法如下:

repo init -u https://github.com/OP-TEE/manifest.git -m default.xml --repo-url=git://codeaurora.org/tools/repo.git

注意需替换.repo目录下的manifest.xml的所有.git为空后运行repo sync。
3. 下载交叉编译器
将源码下载下来后,在/optee/build路径下,运行如下命令:

make toolchains

生成toolchains文件夹进行交叉编译器的下载和解压。
若下载时多次出错或无法下载,可以在生成toolchains文件夹下运行如下命令:

wget http://releases.linaro.org/14.08/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux.tar.xz
wget http://releases.linaro.org/14.08/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.08_linux.tar.xz
wget http://releases.linaro.org/14.07/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.9-2014.07_linux.tar.xz

然后不要忘记cd到/build路径运行:

$ make toolchains

对下载好的交叉编译器压缩包进行解压和路径设置。
三. 编译和运行
1. 编译过程及错误处理
cd 到/build路径下,运行命令:

$ make all run

若出现如下错误:

Sed Error : sed: -e expression #1, char 51: unknown option to `s'

出错原因是/devel/optee/gen_rootfs路径下的generate-cpio-rootfs.sh配置文件中的第218行的sed命令语法错误,更改方法如下:

-sed -i -e "s/CONFIG_EXTRA_CFLAGS=\"\"/CONFIG_EXTRA_CFLAGS=\"${CFLAGS}\"/g" ${BUILDDIR}/.config
+sed -i -e "s|CONFIG_EXTRA_CFLAGS=\"\"|CONFIG_EXTRA_CFLAGS=\"${CFLAGS}\"|g" ${BUILDDIR}/.config

如果未解决此问题而重新编译,会出现如下错误:

/bin': No such file or directory make: *** [busybox-common] Error 1

解决此问题后,使用make all-clean 命令清理编译文件,进行重新编译
如果在第二部分的软件包存在未安装的情况,则在编译阶段检查并报错。
2. 运行效果
UBUNTU14.04的命令行进入qemu命令行模式,生成两个命令行窗口,分别是Normal World 和 Secure World。效果如下:
Normal World:

Secure World:

在qemu命令行界面下输入C,然后回车,启动rich os(linux os)和optee_os,效果图如下:
rich os:

optee_os:

如果成功显示如上效果,表示已经成功完成编译与启动。
四. 测试
在进行测试之前我们需要安装一个软件包ccach,命令如下:

$ sudo apt-get install ccache

这个软件包主要是用来缓存编译文件,使得下一次编译得以更快编译。
在已经启动的Normal World 命令行内输入如下命令进行测试:

modprobe optee_armtz
sleep 0.1
tee-supplicant&
sleep 0.1
xtest

如果出现驱动optee_armtz未找到,需要切换到lib/modules/xxx/路径下,运行加载驱动的命令,xxx为你下载的linux内核版本,若出现如下情况表示加载成功:

然后运行服务tee-supplicant,效果如下:

最后运行xtest,效果如下:
Normal World:

Secure World:

出现此效果表示测试成功。
五. 后记
如上OP-TEE已经成功的在QEMU平台上编译、运行和测试了,笔者将会继续推进,将OP-TEE运行在FVP模拟器以及使用DS-5对TRUSTZONE进行自定义的SECURE APPLICATION的开发。

Trustzone OP-TEE 在QEMU平台上的编译、运行与测试相关推荐

  1. 在SAP云平台上部署和运行Docker应用

    容器技术,Docker,虚拟化,这些名词诞生尽管有很长一段时间了,但是在云原生开发领域仍旧热度不减.甚至连SAP赖以成名的ABAP Netweaver,如今也踏上了容器化的上云探索之路,比如下面这张来 ...

  2. linux编写arm执行文件夹,嵌入式ARM-Linux平台上的编译、配置和运行使用

    本文介绍了嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译.配置和运行使用,iw.hostapd等应用的编 ...

  3. Linux驱动在arm运行,如何在嵌入式ARM-Linux平台上进行编译 配置和运行使用

    这篇文章你将会看到嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译.配置和运行使用,iw.hostapd等 ...

  4. caffe在windows平台上的编译

    接触caffe已经一年有余,一直在Ubuntu下使用.但Ubuntu对N卡驱动支持性不太好.安装Ubuntu系统时最好不要联网,系统安装好之后也y一定不能更新.否则容易出现无限登陆,导致无法进入系统. ...

  5. TEE中TA和CA的编译

    原 2. OP-TEE中添加自己的TA和CA 2017年05月10日 12:46:50 漂流的猴子 阅读数:5862更多 <div class="tags-box space" ...

  6. vscode修改c 项目_windows 10上使用vscode编译运行和调试C/C++

    更新于2020/6/30 不值得观看的v1.x版本链接:链接 请不要转载,欢迎点赞,收藏,分享 主要讲如何在vscode上实现编译/运行/调试C以及C++,如果是初学者,就请完全按照文章的步骤进行,如 ...

  7. 在C++平台上部署PyTorch模型流程+踩坑实录

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要讲解如何将pytorch的模型部署到c++平台上的模 ...

  8. 64位ie加载java失败_java-无法在AMD 64位平台上加载IA 32位.dll

    java-无法在AMD 64位平台上加载IA 32位.dll 我正在尝试通过此页面上的JNI包装器使用Java中的SVMLight: static { System.loadLibrary(" ...

  9. Ubuntu-Base 18 文件系统 在iMX8平台上的移植

    Ubuntu-Base 18 文件系统 在iMX8平台上的移植 开发板是如下的型号 OKMX8MPX-C V2.0 OKMX8PQ-C开发板 FETMX8MPX-C V1.0 在 飞凌 提供的 ubu ...

  10. Ubuntu-Base在iMX8MM平台上的移植

    先说废话↓ 转眼大学快过完了,已经开始了毕业设计的开发.笔者的毕业设计是一个运行ARM-Linux的第一人称控制机器人,为了挑(zhe)战(mo)一下自己,选择了一个性能很美丽的平台--iMX8MM, ...

最新文章

  1. mfc窗口添加背景图片
  2. Lync Server 2010标准版系列PART1:基础构建
  3. 区块链架构、跨链和演进
  4. Hibernate映射关系之一对多
  5. 7-25 朋友圈 (25 分)(详解+并查集的了解和应用)
  6. matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作
  7. 95-40-120-java.util.concurrent-线程-AbstractEventExecutor
  8. 几个简单的Makefile
  9. 使用ViewPage + Fragment,ViewPage所在的activity重建时的问题
  10. c语言用字符画一个椭圆,c语言,绘制椭圆并使其旋转.doc
  11. 关于机壳地和板子地(GND)的连接
  12. Android-0. Android studio在导航栏增加自己的功能图标(如小扳手)
  13. CSAPP学习笔记 day1
  14. CNN中的filter
  15. 单调递增最长子序列 拦截导弹(nyoj 17 nyoj 79)
  16. 小程序选择手机图片后 压缩图片 转码base64
  17. 三十六、moved异常说明及操作
  18. centos 7.6——Nginx中rewrite模块应用(location)——基于域名的跳转等
  19. expect使用技巧
  20. 免费分享我的匿名邮件群发系统,可匿名发送: 163 126 139 gmail qq 21cn 263 及各类企业级邮件

热门文章

  1. 面试被问到HashMap 底层原理?看完这边文章绝对不慌!
  2. 双向循环链表讲解及实现
  3. 第22篇 项目进度管理__计划评审技术__重点内容
  4. PMP课程笔记:第6章 项目进度管理
  5. SQLServer数据库压缩与数据库日志压缩
  6. 用电采集系统费控效率研究与优化
  7. 深度学习--十折交叉验证
  8. 淘宝 京东 拼多多 唯品会返利 公众号开发
  9. ofd阅读器qt_采用WPF技术,开发OFD电子文档阅读器
  10. excel数组和查找and引用函数