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

相关推荐
用户97183563346615 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪17 小时前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫1 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875242 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj2 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes