1. 项目概述与背景
在嵌入式安全领域,OP-TEE(Open Portable Trusted Execution Environment)作为开源的可信执行环境实现方案,已经成为研究和开发安全应用的基石。本次我们将基于QEMU虚拟化环境搭建完整的OP-TEE开发体系,这不仅是学习TEE技术的入门途径,更是验证安全方案可靠性的低成本实验平台。
我的实验环境采用Ubuntu 20.04 LTS系统(内核版本5.15.0),通过QEMU模拟ARMv8架构(qemu_v8配置)。这种组合既能保证开发工具的稳定性,又能准确模拟ARM TrustZone的运行环境。值得注意的是,这里使用的不是通用QEMU配置,而是专门为OP-TEE优化的qemu_v8方案,其设备树和启动流程都针对TrustZone做了特殊适配。
2. 开发环境准备
2.1 系统基础依赖安装
首先需要安装编译工具链和各类开发库,以下命令将一次性安装所有必需组件:
bash复制sudo apt-get install -y \
android-tools-adb android-tools-fastboot \
autoconf automake bc bison build-essential \
cscope curl device-tree-compiler expect flex \
ftp-upload gdisk acpica-tools \
libattr1-dev libc6:i386 libcap-dev libfdt-dev \
libftdi-dev libglib2.0-dev libhidapi-dev \
libncurses5-dev libpixman-1-dev libssl-dev \
libstdc++6:i386 libtool zlib1g:i386 \
make mtools netcat python-crypto \
python3-serial python3-wand unzip \
uuid-dev xdg-utils xterm xz-utils zlib1g-dev \
libgnutls28-dev ninja-build meson \
pkg-config libffi-dev libmount-dev libpcre2-dev
注意:Ubuntu 20.04默认的glib库版本(2.64.6)低于QEMU要求(≥2.66.0),需要手动升级:
bash复制cd /tmp
wget https://download.gnome.org/sources/glib/2.66/glib-2.66.0.tar.xz
tar -xf glib-2.66.0.tar.xz
cd glib-2.66.0
mkdir build && cd build
meson setup --prefix=/usr/local --libdir=/usr/local/lib/x86_64-linux-gnu ..
ninja
sudo ninja install
export PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
验证glib版本:
bash复制pkg-config --modversion glib-2.0 # 应输出≥2.66.0
2.2 源码获取与仓库管理
OP-TEE采用repo工具管理多仓库项目,以下是初始化流程:
bash复制mkdir open-tee && sudo chown -R $USER:$USER open-tee
mkdir -p ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin/:$PATH
# 清除可能存在的代理设置
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
# 配置git身份
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# 初始化仓库(使用清华镜像加速)
repo init -u https://github.com/OP-TEE/manifest.git \
-m qemu_v8.xml \
--repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo \
--no-repo-verify
repo sync
关键点说明:
qemu_v8.xmlmanifest文件定义了该配置下所需的所有git仓库- 执行
repo forall -c 'echo "=== $REPO_PATH ==="; git branch -v'可查看各组件版本 - 主要组件包括:optee_os(TEE核心)、optee_client(客户端库)、optee_test(测试套件)
2.3 交叉编译工具链
OP-TEE构建系统自带工具链下载脚本:
bash复制cd build
make -f toolchain.mk toolchains
生成的工具链位于toolchains/aarch64/bin/目录,验证版本:
bash复制toolchains/aarch64/bin/aarch64-linux-gnu-gcc -v
输出应显示类似:
code复制gcc version 14.3.1 20250623 (Arm GNU Toolchain 14.3.Rel1)
注意:新版工具链(14.x)可能产生更多警告,如需降级可修改
build/toolchain.mk,将AARCH64_GCC_VERSION改为gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
3. QEMU编译与配置
3.1 解决编译前置问题
为避免QEMU编译时的函数冲突,需要提前处理:
bash复制cd qemu
sed -i 's/^memfd_create/\/\/memfd_create/' util/memfd.c
3.2 完整构建流程
执行完整构建(耗时较长):
bash复制cd build
make run
构建过程分为多个阶段:
- 编译ARM Trusted Firmware-A (TF-A)
- 编译OP-TEE OS内核
- 构建Linux内核与驱动
- 编译QEMU并集成所有组件
构建完成后生成的关键文件:
code复制out/bin/
├── bl1.bin # TF-A第一阶段引导
├── fip.bin # 固件镜像包
├── kernel-header.img # Linux内核头
├── kernel.img # Linux内核
├── optee-header.img # OP-TEE头
├── optee-pageable.img # OP-TEE可分页部分
├── optee-pager.img # OP-TEE分页器
└── rootfs.cpio.gz # 根文件系统
4. 运行与调试
4.1 启动QEMU环境
执行以下命令启动完整系统:
bash复制cd build
make -f qemu_v8.mk run-only
成功启动后将看到:
- 第一个窗口:QEMU控制台
- 第二个窗口:Linux系统控制台
- 第三个窗口:OP-TEE安全世界终端
4.2 基础功能验证
在Linux终端中运行OP-TEE测试套件:
bash复制optee_example_hello_world # 基础TA/CA交互测试
xtest # 完整回归测试套件
预期看到类似输出:
code复制+-----------------------------------------------------
24297 subtests of which 0 failed
67 test cases of which 0 failed
0 test cases were skipped
TEE test application done!
4.3 常见问题排查
-
QEMU启动卡住:
- 检查
qemu_v8.mk中是否误保留了-S调试参数 - 确认glib版本≥2.66.0
- 检查
-
TA加载失败:
bash复制dmesg | grep tee # 查看内核日志 tee-supplicant & # 确保tee守护进程运行 -
编译错误:
- 若遇到
-Werror导致的编译中断,可临时修改optee-os/mk/compile.mk:makefile复制comp-cflags$(sm) += -Wa,--noexecstack comp-aflags$(sm) += -Wa,--noexecstack
- 若遇到
5. 开发实践建议
5.1 调试技巧
-
GDB调试配置:
bash复制make -f qemu_v8.mk debug # 另开终端 aarch64-linux-gnu-gdb out/bin/bl1.elf -ex "target remote :1234" -
日志增强:
修改optee_os/mk/config.mk:makefile复制CFG_TEE_CORE_LOG_LEVEL ?= 3 # 0-4,数字越大日志越详细 CFG_TEE_TA_LOG_LEVEL ?= 3
5.2 性能优化
-
QEMU加速参数:
bash复制# 在qemu_v8.mk中添加 QEMU_CPUFLAGS += -cpu cortex-a57 -smp 2 QEMU_MACHINE_ARGS += -machine virt,secure=on -m 1024 -
TA开发建议:
- 使用
optee_examples作为模板 - 关键安全操作放在
TA_InvokeCommandEntryPoint中实现 - 内存操作始终使用
TEE_MemMove等安全API
- 使用
这套环境的成功搭建为后续安全应用开发奠定了坚实基础。在实际项目中,我曾基于此环境验证过密钥管理、安全启动等关键机制,其仿真准确度足以发现真实硬件90%以上的基础问题。对于想要深入ARM TrustZone技术的开发者,从QEMU+OP-TEE入手无疑是性价比最高的选择。
