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

相关推荐
且从容.42 分钟前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道1 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.4 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落6 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨6 小时前
WSL2的安装与使用
linux·wsl
微小的鱼6 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng6 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮7 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Linux-lucky18 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默19 小时前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu