2、开发环境搭建:Ubuntu环境准备、交叉编译工具链安装、OP-TEE源码下载与编译、QEMU模拟器运行

说实话,搭建开发环境这件事,看着简单,但坑是真不少。我当年第一次搞OP-TEE的时候,光编译环境就折腾了两天。后来总结出一套流程,基本能一次搞定。今天我就把这套流程掰开揉碎了讲给你听。

2.1 Ubuntu环境准备

我个人习惯用Ubuntu 20.04 LTS,64位版本。为什么选它?因为OP-TEE官方文档对这个版本支持最好,依赖包基本都能直接装上,省心。

装好系统后,第一件事就是更新软件源:

sudo apt update
sudo apt upgrade -y

然后安装必要的依赖包。这里我列一个清单,你直接复制粘贴就行:

sudo apt install -y \
    android-tools-adb \
    android-tools-fastboot \
    autoconf \
    automake \
    bc \
    bison \
    build-essential \
    ccache \
    cscope \
    curl \
    device-tree-compiler \
    expect \
    flex \
    ftp-upload \
    gdisk \
    iasl \
    libattr1-dev \
    libcap-dev \
    libfdt-dev \
    libftdi-dev \
    libglib2.0-dev \
    libgmp-dev \
    libhidapi-dev \
    libmpc-dev \
    libncurses5-dev \
    libpixman-1-dev \
    libssl-dev \
    libtool \
    libusb-1.0-0-dev \
    make \
    mtools \
    netcat \
    python3-cryptography \
    python3-pip \
    python3-pyelftools \
    python3-serial \
    rsync \
    unzip \
    uuid-dev \
    xdg-utils \
    xterm \
    xz-utils \
    zlib1g-dev
小提示: 如果你用的是Ubuntu 22.04,个别包名可能不一样。比如 python3-pyelftools 在22.04上叫 python3-pyelftools 没错,但 iasl 可能需要单独装。遇到报错别慌,看看缺什么补什么就行。

2.2 交叉编译工具链安装

OP-TEE跑在ARM架构上,所以我们需要交叉编译工具链。说白了,就是在x86的电脑上编译出ARM能跑的程序。

我推荐用官方提供的工具链,省去自己配路径的麻烦:

# 下载ARM64工具链
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

# 解压到指定目录
tar -xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C ~/

# 配置环境变量
echo 'export PATH=$PATH:~/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc

验证一下是否装好了:

aarch64-none-linux-gnu-gcc --version

如果看到版本信息,说明工具链已经就绪。

注意: 我曾经遇到过一个问题——下载的工具链版本和OP-TEE源码不匹配。OP-TEE 3.x系列推荐用gcc-arm-10.3,太新或太旧都可能编译报错。所以版本号别乱改。

2.3 OP-TEE源码下载与编译

OP-TEE的源码管理用的是repo工具。这个工具是Google搞的,专门用来管理多个Git仓库。OP-TEE项目包含几十个仓库,用手动git clone会疯掉。

先装repo:

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

然后下载OP-TEE源码。我以3.19.0版本为例:

mkdir -p ~/optee
cd ~/optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.19.0
repo sync -j4

这里有个小细节:-j4 表示用4个线程并行下载。如果你的网络带宽够大,可以改成 -j8 甚至 -j16,速度会快很多。

下载完成后,开始编译:

cd ~/optee/build
make -j4 toolchains
make -j4 all

第一次编译会比较慢,大概需要30分钟到1小时,取决于你的机器性能。编译过程中如果报错,多半是依赖没装全。回头检查一下2.1节的依赖包列表。

核心知识点: OP-TEE的编译流程其实分三步:先编译交叉工具链(make toolchains),再编译ATF、U-Boot、Linux内核、OP-TEE OS,最后打包成QEMU能用的镜像文件。每一步都有独立的Makefile目标,你可以单独编译某个组件。

2.4 QEMU模拟器运行

编译成功后,启动QEMU模拟器:

cd ~/optee/build
make run-only

你会看到两个终端窗口弹出来:

  • 一个窗口是U-Boot启动信息,然后加载Linux内核
  • 另一个窗口是OP-TEE的Secure World终端

等Linux启动完成后,在Linux终端里输入:

xtest

这个命令会运行OP-TEE的测试套件。如果一切正常,你会看到一堆测试用例通过的信息。

我个人习惯先跑一个简单的测试验证环境:

optee_example_hello_world

这个例子会调用一个TA(Trusted Application),在Secure World里打印"Hello World!"。如果能看到输出,说明你的开发环境已经完全跑通了。

避坑指南: 我曾经遇到过QEMU启动后卡在U-Boot不动的情况。后来发现是编译时用了不同版本的交叉工具链。解决办法是清理重新编译:make clean && make all。另外,如果你的电脑内存小于8GB,建议给QEMU分配的内存调小一点,在 build/qemu_v8.mk 里修改 QEMU_MEM 参数。

2.5 知识体系总览

下面这张图概括了本章的核心逻辑。你看一眼,心里就有谱了:

OP-TEE开发环境搭建流程 Ubuntu 20.04 LTS 环境准备 交叉编译工具链安装 OP-TEE源码下载(repo)与编译(make) QEMU模拟器运行与验证 依赖包安装 系统更新 aarch64-none-linux-gnu-gcc repo init + repo sync make toolchains + make all make run-only xtest 验证

你看,整个流程是线性的,每一步都依赖上一步。Ubuntu环境是地基,工具链是工具,源码是材料,QEMU是测试场。哪一步出问题,后面的都跑不起来。

嗯,到这里,你的开发环境就搭好了。接下来就可以开始写代码了。记住,环境搭建是基本功,别嫌麻烦。我见过太多人因为环境没配好,浪费了大量时间在排查问题上。一次配好,后面就顺畅了。

总结一下: 本章我们完成了Ubuntu环境准备、交叉编译工具链安装、OP-TEE源码下载与编译、QEMU模拟器运行。你现在应该能在QEMU上跑起OP-TEE,并且用 xtest 验证环境正确性。如果遇到问题,回头检查依赖包和工具链版本,90%的问题都出在这两个地方。

可可精品资料库