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

相关推荐
叮咚侠22 分钟前
Ubuntu 24.04 安装zabbix-agent 5.0 服务
linux·ubuntu·zabbix·zabbix-agent
左手厨刀右手茼蒿2 小时前
数据仓库的架构演进:从MySQL到ClickHouse到数据湖的工程化实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿3 小时前
创业团队技术选型:别用大厂架构解决小团队问题
linux·嵌入式·系统内核
bosins3 小时前
将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中
linux·windows·ubuntu
我星期八休息4 小时前
扩展—DNS与ICMP
linux·服务器·网络
筝筝ba4 小时前
linux 查询当前登录的用户数量
linux·服务器·网络
woniu_buhui_fei5 小时前
日常工作常用的命令(Linux+JDK)
linux·运维·服务器
coward915 小时前
全志T507 (sun50iw9p1)sunxi pinctrl 子系统实现分析
linux·嵌入式硬件
imaol15 小时前
文件编程--标准IO
linux·运维·算法
我是小灰灰吖6 小时前
解决高频率图像处理中的内存“只增不减”:glibc malloc_trim实战指南
linux·qt