一、安装环境
sudo apt install adb acpica-tools autoconf bc build-essential ccache curl device-tree-compiler e2tools expect flex ftp-upload gdisk libattr1-dev libcap-dev libfdt-dev libftdi-dev libglib2.0-dev libgmp3-dev libhidapi-dev libmpc-dev libncurses5-dev libpixman-1-dev libslirp-dev libssl-dev libtool libusb-1.0-0-dev make mtools netcat ninja-build python3-cryptography python3-pip python3-pyelftools python3-serial python-is-python3 rsync swig unzip uuid-dev xdg-utils xterm xz-utils zlib1g-dev git repo
二、设置
永久设置,在/etc/environment文件中添加下面的参数:
http_proxy=http://127.0.0.1:7890/
https_proxy=http://127.0.0.1:7890/
ftp_proxy=http://127.0.0.1:7890/
HTTP_PROXY=http://127.0.0.1:7890/
HTTPS_PROXY=http://127.0.0.1:7890/
FTP_PROXY=http://127.0.0.1:7890/
临时设置,在控制台中输入下面的命令:
export http_proxy=http://127.0.0.1:7890/
export https_proxy=http://127.0.0.1:7890/
export ftp_proxy=http://127.0.0.1:7890/
export HTTP_PROXY=http://127.0.0.1:7890/
export HTTPS_PROXY=http://127.0.0.1:7890/
export FTP_PROXY=http://127.0.0.1:7890/
三、下载编译运行
- 下载源代码
mkdir optee-3.21
cd optee-3.21
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.21.0
repo sync
如果下载不了,可以
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -b 3.21.0
- 编译(实际是下载)工具链
cd build
make toolchains
- 编译
make all
- 运行
第一次运行需要运行下面的命令:
make run
第二次以及以后运行:
make run-only
- 然后会弹出两个控制台,这两个控制台一个是normal world也就是uboot和linux的,另一个是secure world,也就是optee的。两个控制台会卡住,我们切回运行的控制台窗口也就是build这个路劲的控制台,输入c,然后这两个新控制台会继续运行。我们可以同时观察这两个系统的运行。
完毕。
四、错误处理
中途我遇到图下的这两个报错,有时候是在make all的时候报第一个图片的错误,有时候是make run的时候报第二个图片的错误:
他们的原因都是qemu没有编译成功,我们需要手动进入qemu目录编译:
# 配置
./configure --target-list=aarch64-softmmu --enable-trace-backends=simple,log --disable-werror
# 编译
make -j8
# 最后在build目录下会生成可执行文件:qemu-system-aarch64
sudo apt install \
adb \
acpica-tools \
autoconf \
automake \
bc \
bison \
build-essential \
ccache \
cscope \
curl \
device-tree-compiler \
e2tools \
expect \
fastboot \
flex \
ftp-upload \
gdisk \
libattr1-dev \
libcap-dev \
libfdt-dev \
libftdi-dev \
libglib2.0-dev \
libgmp3-dev \
libhidapi-dev \
libmpc-dev \
libncurses5-dev \
libpixman-1-dev \
libslirp-dev \
libssl-dev \
libtool \
libusb-1.0-0-dev \
make \
mtools \
netcat \
ninja-build \
python3-cryptography \
python3-pip \
python3-pyelftools \
python3-serial \
python-is-python3 \
rsync \
swig \
unzip \
uuid-dev \
xdg-utils \
xterm \
xz-utils \
zlib1g-dev