1. 搭建TrustZone开发环境
任务目标
本案例要求搭建一个包含OP-TEE的QEMU虚拟化开发环境,并验证安全世界(TrustZone)与普通世界(Linux内核)之间的基本通信机制。完成本案例后,你将拥有一个可运行的TrustZone软件模拟环境,为后续安全驱动开发提供基础平台。
环境依赖
需要一台运行Ubuntu 20.04/22.04 x86_64的宿主机(或虚拟机),确保以下依赖已安装:
sudo apt update
sudo apt install -y git wget flex bison gperf python3 python3-pip \
python3-venv cmake ninja-build ccache libffi-dev libssl-dev \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
device-tree-compiler u-boot-tools cpio rsync
获取与构建OP-TEE QEMU环境
使用OP-TEE官方维护的构建脚本,该脚本会自动拉取所有必要组件(Linux内核、OP-TEE OS、OP-TEE客户端、QEMU等)并完成编译。整个过程约需30-60分钟,取决于网络与机器性能。
git clone https://github.com/OP-TEE/optee_os.git
cd optee_os
# 使用官方qemu v8构建配置
make -j$(nproc) CFG_ARM64_core=y \
PLATFORM=vexpress-qemu_armv8a \
CFG_TEE_CORE_LOG_LEVEL=2 \
CFG_RPMB_FS=y \
CFG_CORE_HEAP_SIZE=524288
构建完成后,OP-TEE OS镜像生成于 out/arm-plat-vexpress/core/tee-pager_v2.bin。接下来需要获取配套的Linux内核与构建脚本:
git clone https://github.com/OP-TEE/build.git
cd build
make -j$(nproc) toolchains
make -j$(nproc) all
该步骤会生成完整的QEMU启动脚本与文件系统镜像,位于 ../out/bin 目录。
启动QEMU并验证通信
进入构建输出目录,启动模拟器:
cd ../out/bin
./run.sh
等待系统启动至Linux登录提示符(约30秒),使用用户名 root 登录(无密码)。登录后执行以下命令验证安全世界通信:
# 检查OP-TEE驱动是否加载
ls /dev/tee*
# 运行官方测试套件(xtest)
xtest 1001
若 /dev/teepriv0 与 /dev/tee0 设备节点存在,且 xtest 1001 输出包含 Test result: SUCCESS,则说明安全世界与普通世界的基本通信链路(通过SMC指令与OP-TEE驱动)已正常工作。
验证判定标准
- 设备节点存在:
ls /dev/tee*能列出tee0与teepriv0,证明Linux内核中的TEE驱动框架已成功探测到OP-TEE安全世界。 - xtest通过:
xtest 1001是OP-TEE的基础自检用例,它通过标准GlobalPlatform TEE Client API向安全世界发起调用并验证返回结果。输出中必须出现SUCCESS字样。 - 日志佐证:在QEMU控制台(按
Ctrl+A然后X退出)可观察到OP-TEE安全世界启动日志,其中包含I/TC: OP-TEE version:行,证明安全世界固件已正常加载执行。
常见问题排查
- 编译失败:若
make toolchains下载工具链超时,可手动下载ARM AArch64工具链并设置PATH环境变量后重试。 - QEMU启动黑屏:确认宿主机支持KVM硬件虚拟化(
ls /dev/kvm存在)。若无KVM,需在run.sh中添加-machine virt-4.0参数并关闭-enable-kvm。 - xtest报错:若提示
OP-TEE not found,检查dmesg | grep tee查看驱动加载错误信息,通常为设备树中未正确配置OP-TEE保留内存区域。
完成上述步骤并观察到预期输出后,即表示TrustZone开发环境搭建成功,可进入后续安全驱动开发案例的学习。