宿主操作系统
- ubuntu 18.04 LTS
参考链接
搭建流程
添加依赖
# 直接执行以下命令
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install android-tools-adb android-tools-fastboot autoconf \
automake bc bison build-essential ccache cscope curl device-tree-compiler \
expect flex ftp-upload gdisk iasl libattr1-dev libcap-dev \
libfdt-dev libftdi-dev libglib2.0-dev libgmp-dev libhidapi-dev \
libmpc-dev libncurses5-dev libpixman-1-dev libssl-dev libtool make \
mtools netcat ninja-build python-crypto python3-crypto python-pyelftools \
python3-pycryptodome python3-pyelftools python-serial python3-serial \
rsync unzip uuid-dev xdg-utils xterm xz-utils zlib1g-dev
$ pip3 install --user pycryptodome
获取源码
# 创建工程文件夹
mkdir optee
cd optee
# 下载repo工具
curl https://storage.googleapis.com/git-repo-downloads/repo-1 > repo
chmod a+x repo
# 下载.repo文件,-m指明目标xml文件,-b指明版本分支,--repo-url使用镜像源
python3 repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.12.0 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
# 同步代码,j4表示开启4个线程
repo sync -j4 # 直接repo sync会由于连接不稳定而失败
解决repo sync连接不稳定的问题
由于optee工程的代码量很大,国内似乎没有相应的镜像,所以同步optee的代码非常耗时,而且会因为连接不稳定而失败,异常痛苦……尝试通过系统命令export http_proxy=192.168.253.1:7890
设置代理(绕过GFW),但是repo sync的网络连接并不会经过设置好的代理……最后我利用proxychains解决了代理失败的问题。proxychains安装过程参考另一篇博客。
# 利用proxychains来通过代理同步代码
proxychains ./repo sync -j4
获取toolchains
cd build
# 这里会下载两个工具,所以还是使用proxychains
# 如果失败,删掉toolchains文件夹下的所有文件后重新执行命令
proxychains make toolchains
编译并运行代码
# 第一次执行的时候会下载一些文件,所以最好还是使用proxychains
# 若失败则关掉proxychains重试
make run
启动框架
在启动的qemu交互环境中输入c
并回车,即可生成一个TEE和一个REE终端