1. 搭建TrustZone开发环境

搭建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开发环境搭建成功,可进入后续安全驱动开发案例的学习。