2. 开发环境搭建
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我当年第一次搞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
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
如果看到版本信息,说明工具链已经就绪。
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节的依赖包列表。
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!"。如果能看到输出,说明你的开发环境已经完全跑通了。
make clean && make all。另外,如果你的电脑内存小于8GB,建议给QEMU分配的内存调小一点,在 build/qemu_v8.mk 里修改 QEMU_MEM 参数。
2.5 知识体系总览
下面这张图概括了本章的核心逻辑。你看一眼,心里就有谱了:
你看,整个流程是线性的,每一步都依赖上一步。Ubuntu环境是地基,工具链是工具,源码是材料,QEMU是测试场。哪一步出问题,后面的都跑不起来。
嗯,到这里,你的开发环境就搭好了。接下来就可以开始写代码了。记住,环境搭建是基本功,别嫌麻烦。我见过太多人因为环境没配好,浪费了大量时间在排查问题上。一次配好,后面就顺畅了。
xtest 验证环境正确性。如果遇到问题,回头检查依赖包和工具链版本,90%的问题都出在这两个地方。
可可精品资料库