Trustzone OP-TEE 在QEMU平台上的编译、运行与测试
一.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平台上的编译、运行与测试相关推荐
- 在SAP云平台上部署和运行Docker应用
容器技术,Docker,虚拟化,这些名词诞生尽管有很长一段时间了,但是在云原生开发领域仍旧热度不减.甚至连SAP赖以成名的ABAP Netweaver,如今也踏上了容器化的上云探索之路,比如下面这张来 ...
- linux编写arm执行文件夹,嵌入式ARM-Linux平台上的编译、配置和运行使用
本文介绍了嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译.配置和运行使用,iw.hostapd等应用的编 ...
- Linux驱动在arm运行,如何在嵌入式ARM-Linux平台上进行编译 配置和运行使用
这篇文章你将会看到嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译.配置和运行使用,iw.hostapd等 ...
- caffe在windows平台上的编译
接触caffe已经一年有余,一直在Ubuntu下使用.但Ubuntu对N卡驱动支持性不太好.安装Ubuntu系统时最好不要联网,系统安装好之后也y一定不能更新.否则容易出现无限登陆,导致无法进入系统. ...
- TEE中TA和CA的编译
原 2. OP-TEE中添加自己的TA和CA 2017年05月10日 12:46:50 漂流的猴子 阅读数:5862更多 <div class="tags-box space" ...
- vscode修改c 项目_windows 10上使用vscode编译运行和调试C/C++
更新于2020/6/30 不值得观看的v1.x版本链接:链接 请不要转载,欢迎点赞,收藏,分享 主要讲如何在vscode上实现编译/运行/调试C以及C++,如果是初学者,就请完全按照文章的步骤进行,如 ...
- 在C++平台上部署PyTorch模型流程+踩坑实录
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要讲解如何将pytorch的模型部署到c++平台上的模 ...
- 64位ie加载java失败_java-无法在AMD 64位平台上加载IA 32位.dll
java-无法在AMD 64位平台上加载IA 32位.dll 我正在尝试通过此页面上的JNI包装器使用Java中的SVMLight: static { System.loadLibrary(" ...
- Ubuntu-Base 18 文件系统 在iMX8平台上的移植
Ubuntu-Base 18 文件系统 在iMX8平台上的移植 开发板是如下的型号 OKMX8MPX-C V2.0 OKMX8PQ-C开发板 FETMX8MPX-C V1.0 在 飞凌 提供的 ubu ...
- Ubuntu-Base在iMX8MM平台上的移植
先说废话↓ 转眼大学快过完了,已经开始了毕业设计的开发.笔者的毕业设计是一个运行ARM-Linux的第一人称控制机器人,为了挑(zhe)战(mo)一下自己,选择了一个性能很美丽的平台--iMX8MM, ...
最新文章
- mfc窗口添加背景图片
- Lync Server 2010标准版系列PART1:基础构建
- 区块链架构、跨链和演进
- Hibernate映射关系之一对多
- 7-25 朋友圈 (25 分)(详解+并查集的了解和应用)
- matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作
- 95-40-120-java.util.concurrent-线程-AbstractEventExecutor
- 几个简单的Makefile
- 使用ViewPage + Fragment,ViewPage所在的activity重建时的问题
- c语言用字符画一个椭圆,c语言,绘制椭圆并使其旋转.doc
- 关于机壳地和板子地(GND)的连接
- Android-0. Android studio在导航栏增加自己的功能图标(如小扳手)
- CSAPP学习笔记 day1
- CNN中的filter
- 单调递增最长子序列 拦截导弹(nyoj 17 nyoj 79)
- 小程序选择手机图片后 压缩图片 转码base64
- 三十六、moved异常说明及操作
- centos 7.6——Nginx中rewrite模块应用(location)——基于域名的跳转等
- expect使用技巧
- 免费分享我的匿名邮件群发系统,可匿名发送: 163 126 139 gmail qq 21cn 263 及各类企业级邮件