获取编译并运行ARM64可信系统软件栈(TF-A+OP-TEE+UEFI+Linux)

获取、编译并运行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

下载链接:

https://developer.arm.com/-/cdn-downloads/permalink/FVPs-Architecture/FM-11.29/FVP_Base_RevC-2xAEMvA_11.29_27_Linux64.tgz

解压到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)来源码级调试整个软件栈。

相关推荐
Johny_Zhao5 分钟前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
落羽的落羽1 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生1 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹1 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker1 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦1 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
编程的一拳超人2 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
时凌云.2 小时前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫2 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
广州灵眸科技有限公司3 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php