获取编译并运行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)来源码级调试整个软件栈。

相关推荐
largecode6 小时前
座机号码认证如何操作?申请热线实名名片,树立统一官方客服形象
linux·sql·华为·c#·.net·wpf·harmonyos
杨云龙UP6 小时前
ODA/Oracle RAC 节点 Load 100+ 排查:一个 lsof 残留进程引发的负载虚高问题 2026-05-27
linux·数据库·oracle·centos·误操作
用户2367829801687 小时前
Linux curl 命令深度解析:从 HTTP 请求到网络调试实战
linux
怎么没有名字注册了啊7 小时前
fedora 换源教程
linux·运维·服务器
爱莉希雅&&&8 小时前
Zabbix监控linux服务器和Windows服务器
linux·运维·服务器·zabbix·监控
小小测试开发8 小时前
加州拟将 Linux 从年龄验证法中豁免:一场开源社区的胜利与反思
linux·运维·开源
Sisphusssss8 小时前
Ubuntu 装英伟达显卡驱动
linux·运维·ubuntu
Face8 小时前
WSL2 初始使用
linux·windows
晨晖29 小时前
Linux命令10
linux·运维·服务器