获取、编译并运行optee可信系统软件栈可参考该链接: https://optee.readthedocs.io/en/latest/building/devices/fvp.html
我基于此做了一些改动,具体步骤如下
1. 获取源码
由于我们的目标是BL33运行UEFI,所以这里要拉取4.2.0分支,4.3.0好像都是u-boot了,如果你想运行u-boot,就拉取最新版本4.10.0,而且我们目标板是FVP_Base_RevC-2xAEMvA,所以还要指定fvp.xml
#先安装repo,git等工具
mkdir optee
cd optee
repo init -u https://github.com/OP-TEE/manifest.git -m fvp.xml -b 4.2.0 && repo sync -j10
结束后就获取到源码了
2. 获取Base_RevC_AEMvA FVP
下载链接:
解压到optee目录下即可完成安装
3. 获取编译工具链
注意我们目标板是FVP_Base_RevC-2xAEMvA,编译时要加FVP_USE_BASE_PLAT=y,不然默认是Foundation_Platform
#当前在optee目录下
cd build
make toolchains FVP_USE_BASE_PLAT=y -j12
4. 编译docker image
要安装一系列依赖的包,所以这里选择使用docker来避免与系统环境冲突,当然你也可以在主机上进行编译,optee-dockerfile内容如下:
FROM docker.m.daocloud.io/ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
ENV FORCE_UNSAFE_CONFIGURE=1
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y \
adb \
acpica-tools \
autoconf \
automake \
bc \
bison \
build-essential \
ccache \
cpio \
cscope \
curl \
device-tree-compiler \
e2tools \
expect \
fastboot \
flex \
ftp-upload \
gdisk \
git \
libgnutls28-dev \
libattr1-dev \
libcap-ng-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 \
python2 \
python3-cryptography \
python3-pip \
python3-pyelftools \
python3-serial \
python3-tomli \
python-is-python3 \
rsync \
swig \
unzip \
uuid-dev \
wget \
xdg-utils \
xsltproc \
xterm \
xz-utils \
zlib1g-dev
然后运行docker编译命令:
docker build \
--rm \
--network host \
-f optee-dockerfile \
--tag=optee_env \
--build-arg USER="${USER}" \
--build-arg UID="$(id -u)" \
--build-arg GID="$(id -g)" \
.
编译完成后,就得到optee_env docker images了:

5. 编译软件栈
现在可以编译了,我们运行docker,在docker环境内编译:
docker run -it \
--rm \
-u $(id -u):$(id -g) \
--network host \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-v /etc/shadow:/etc/shadow:ro \
-v /home/$USER/optee/:/home/$USER/optee/ \
-v /home/$USER/:/home/$USER/ \
-w /home/$USER/optee/ \
optee_env
注意以上命令optee的目录替换成你自己的
可以将docker相关的命令写成一个脚本,方便使用,我让AI给我写了一个挺好用的
现在就进入了docker,在docker中执行一下命令:
cd build
make all FVP_USE_BASE_PLAT=y -j12
6. FVP上运行软件栈
我们这里选择直接在host上运行,不在docker中运行,所以下面的命令是在host上运行的:
cd optee/build
make run-only FVP_USE_BASE_PLAT=y #注意是run-only
运行效果图如下

7. 下一步做什么
至此我们有了可信系统软件栈的开发及运行环境了,后面我们将基于该环境,使用Arm Development Studio(ADS)来源码级调试整个软件栈。