1. 环境准备与依赖安装
1.1 硬件与操作系统要求
搭建OP-TEE QEMUv8环境需要满足以下硬件条件:
- 至少100GB可用磁盘空间(编译过程会产生大量中间文件)
- 推荐16GB以上内存(QEMU虚拟机运行需要足够内存资源)
- 四核以上CPU(编译过程可并行加速)
操作系统必须选择Ubuntu 22.04桌面版,原因有三:
- Server版缺少图形界面支持,而OP-TEE调试需要同时操作多个终端窗口
- 桌面环境自带Xterm终端模拟器,这是运行QEMU的必备组件
- Ubuntu 22.04 LTS的软件仓库包含所有必需依赖的稳定版本
实测在20GB内存的Intel i7-12700H笔记本上,完整编译耗时约45分钟。建议使用SSD存储以显著缩短编译时间。
1.2 系统依赖安装
完整的依赖包列表可分为以下几类:
基础编译工具链:
bash复制build-essential make ccache automake autoconf libtool
交叉编译相关:
bash复制gcc-aarch64-linux-gnu g++-aarch64-linux-gnu device-tree-compiler
QEMU运行依赖:
bash复制libglib2.0-dev libpixman-1-dev libslirp-dev libfdt-dev
OP-TEE特有组件:
bash复制python3-pyelftools python3-cryptography python3-serial
调试工具集:
bash复制cscope xterm adb fastboot
安装命令建议分两步执行:
bash复制# 先更新软件源
sudo apt-get update && sudo apt-get upgrade -y
# 再安装依赖(避免网络中断导致部分包安装失败)
sudo 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 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
常见问题处理:
- 若遇到
Unable to locate package错误,检查/etc/apt/sources.list是否包含universe仓库 - 安装完成后建议执行
sudo apt-get autoremove清理无用依赖
2. 代码获取与编译环境配置
2.1 Repo工具安装与配置
由于OP-TEE使用Google的repo工具管理多仓库代码,国内用户需要特殊配置:
- 创建本地bin目录并加入PATH:
bash复制mkdir -p ~/bin
echo 'export PATH="$PATH:$HOME/bin"' >> ~/.bashrc
source ~/.bashrc
- 下载替代版repo工具:
bash复制curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
- 修改repo更新源:
bash复制export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
2.2 代码同步与初始化
- 创建工作目录并初始化仓库:
bash复制mkdir -p ~/optee && cd ~/optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml --depth=1
- 同步代码(国内用户建议使用清华镜像):
bash复制repo sync -j$(nproc) --no-tags --no-clone-bundle
同步过程可能耗时较长(约1-2小时),建议在夜间执行。若中断可使用
repo sync -c继续。
- 验证代码完整性:
bash复制cd build && make toolchains
常见同步问题解决方案:
- 出现
fatal: early EOF时,执行git config --global http.postBuffer 524288000 - 网络不稳定时可尝试
repo sync -j1降低并发数
3. 编译与运行流程详解
3.1 完整编译过程
- 进入构建目录:
bash复制cd ~/optee/build
- 编译工具链(首次运行需要):
bash复制make toolchains -j$(nproc)
- 完整编译OP-TEE系统:
bash复制make all run -j$(nproc)
编译过程会生成以下关键组件:
arm-trusted-firmware:ARM可信固件optee_os:TEE操作系统核心linux:修改版Linux内核buildroot:根文件系统
编译产物位于:
out-br/images/:包含系统镜像文件out/bin/:包含TA和CA测试程序
3.2 QEMU启动与终端交互
成功编译后执行make run会启动三个终端:
-
主控制终端(QEMU监控):
- 初始状态为暂停模式(Paused)
- 输入
c继续执行 - 支持输入
Ctrl+A C进入QEMU命令模式
-
普通世界终端(Normal World):
- 运行标准Linux环境
- 登录账号:root(无密码)或test/test
- 包含测试程序如
/usr/bin/hello_world-rs
-
安全世界终端(Secure World):
- 显示OP-TEE内核日志
- 输出TA(Trusted Application)执行信息
- 支持通过
Ctrl+]退出串口连接
典型测试流程:
bash复制# 在普通世界终端执行
hello_world-rs
# 观察安全世界终端输出
D/TA: hello_world: TA_CreateEntryPoint
4. 常见问题排查指南
4.1 编译阶段问题
问题1:内存不足导致编译失败
code复制g++: fatal error: Killed signal terminated program cc1plus
解决方案:
- 增加swap空间:
bash复制sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- 或减少编译线程数:
make -j4
问题2:Python依赖冲突
code复制ModuleNotFoundError: No module named 'tomli'
解决方案:
bash复制python3 -m pip install --user -r ~/optee/build/../requirements.txt
4.2 运行阶段问题
问题3:QEMU无法启动图形终端
code复制Could not initialize SDL(x11 not available) - exiting
解决方案:
- 确保已安装桌面环境
- 或使用纯命令行模式:
make run-only
问题4:TA无法加载
code复制ERR [0x0] TEE-CORE: tee_ta_init_pseudo_ta_session:284
解决方案:
- 检查TA UUID是否匹配
- 重新编译测试TA:
make optee_examples-clean optee_examples
4.3 网络配置技巧
默认QEMU使用NAT网络,如需主机访问:
bash复制# 在QEMU启动命令后追加:
-netdev user,id=vmnic,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=vmnic
然后在普通世界终端启用SSH:
bash复制/etc/init.d/S50sshd start
passwd root # 设置密码
5. 开发环境优化建议
5.1 加速后续编译
- 启用ccache缓存:
bash复制echo 'export CCACHE_DIR="$HOME/.ccache"' >> ~/.bashrc
echo 'export USE_CCACHE=1' >> ~/.bashrc
ccache -M 50G
- 增量编译技巧:
bash复制# 仅重新构建OP-TEE内核
make optee-os-clean optee-os
# 仅更新测试程序
make optee_examples-clean optee_examples
5.2 调试配置
- 启用GDB调试:
bash复制make run-only GDB=1
- 常用GDB命令:
code复制(gdb) target remote :1234 # 连接QEMU
(gdb) b tee_entry_std # 在TA入口断点
- 内核日志级别调整:
修改optee_os/mk/config.mk中的:
code复制CFG_TEE_CORE_LOG_LEVEL ?= 3 # 0-4,数字越大越详细
5.3 自定义开发流程
- 添加新TA的步骤:
bash复制cd optee_examples
cp -r hello_world my_ta
cd my_ta
# 修改Makefile和main.c
cd ../../build
make optee_examples-clean optee_examples
- 快速测试循环:
bash复制# 在普通世界终端执行
while true; do
make -C ~/optee/build optee_examples-clean optee_examples && \
scp out-br/target/usr/bin/my_ta root@localhost:/usr/bin
my_ta
sleep 1
done
这套环境搭建完成后,可以进一步探索:
- 安全世界与普通世界的通信机制
- TA与CA的交互协议
- OP-TEE的安全存储功能
- 硬件加密加速集成