4、硬件基础环境:搭建TEE开发所需的硬件平台
做TEE开发,第一步就是搞定硬件环境。说白了,你得有个能跑TEE的地方。
我个人习惯把这条路分成两条:一条是真刀真枪的物理板子,另一条是纯软件的模拟器。两条路各有各的用处,咱们今天都聊透。
4.1 两条路线:物理板 vs 模拟器
先看个对比,心里有个底:
| 对比项 | Raspberry Pi 4 + OP-TEE | QEMU 模拟器 |
|---|---|---|
| 硬件成本 | 约 400-600 元(板子+配件) | 0 元(纯软件) |
| 真实感 | 完全真实,能体验安全启动流程 | 模拟环境,部分硬件特性无法复现 |
| 调试难度 | 需要串口线、SD卡烧录等物理操作 | 一键启动,GDB 调试非常方便 |
| 适用场景 | 产品原型验证、安全启动实战 | 快速学习、代码开发、CI/CD 集成 |
| 启动速度 | 几十秒(含烧录时间) | 几秒钟 |
我的建议是:学习阶段先用 QEMU,跑通了再上真板子。我在项目中吃过亏,一开始就在树莓派上折腾,结果每次烧录都要等两分钟,改个配置又得重来……后来学乖了,先在模拟器上把逻辑调通,最后再部署到物理板子上,效率翻倍。
4.2 方案一:Raspberry Pi 4 + OP-TEE
4.2.1 硬件清单
你需要准备这些东西:
- Raspberry Pi 4 Model B(建议 4GB 或 8GB 内存版本)
- MicroSD 卡(至少 16GB,Class 10 以上)
- USB-C 电源(5V/3A,别用手机充电头凑合)
- 串口调试线(USB 转 TTL,3.3V 电平)
- 网线或 WiFi(用于 SSH 连接)
4.2.2 烧录 OP-TEE 系统
OP-TEE 官方提供了一个构建脚本,叫 build.git。我习惯这么操作:
# 1. 安装依赖(Ubuntu 20.04/22.04)
sudo apt install -y \
android-tools-adb \
bc bison build-essential ccache \
curl flex g++-multilib gcc-multimusl \
git gnupg gperf imagemagick \
lib32ncurses5-dev lib32readline-dev \
lib32z1-dev libelf-dev liblz4-tool \
libncurses5 libncurses5-dev \
libsdl1.2-dev libssl-dev \
libxml2 libxml2-utils lzop \
pngcrush rsync schedtool \
squashfs-tools xsltproc \
zip zlib1g-dev
# 2. 下载 OP-TEE 构建环境
git clone https://github.com/OP-TEE/build.git
cd build
# 3. 选择树莓派 4 的配置文件
make -j2 toolchains
make -j4 all
# 4. 烧录到 SD 卡(假设 SD 卡是 /dev/sdb)
cd out
sudo dd if=sd.img of=/dev/sdb bs=4M status=progress
sync
嗯,这里要注意:make -j4 all 这一步会编译整个系统,包括 Linux 内核、OP-TEE 内核、Trusted Firmware-A 和测试用例。第一次编译大概要 30-60 分钟,取决于你的电脑性能。
4.2.3 连接串口与启动
串口连接是调试树莓派安全启动的关键。接线方式:
- 树莓派的 GPIO 14 (TXD) → 串口模块的 RXD
- 树莓派的 GPIO 15 (RXD) → 串口模块的 TXD
- 树莓派的 GND → 串口模块的 GND
然后用 minicom 或 screen 连接:
sudo screen /dev/ttyUSB0 115200
插上 SD 卡,上电。你会看到启动日志从串口刷刷地流出来。如果看到 OP-TEE: initialized 字样,恭喜你,环境搭好了。
/etc/ssh/sshd_config 里把 PermitRootLogin 改成 yes,这样可以直接用 root 登录树莓派,省去每次 sudo 的麻烦。当然,生产环境别这么干。
4.3 方案二:QEMU 模拟器
如果你手头没有树莓派,或者想快速上手,QEMU 是最佳选择。说白了,QEMU 就是一个虚拟的 ARM 开发板。
4.3.1 安装 QEMU
# Ubuntu/Debian
sudo apt install qemu-system-arm
# 验证安装
qemu-system-aarch64 --version
OP-TEE 官方已经为 QEMU 准备好了配置文件。你只需要:
cd build
make -j2 toolchains
make -j4 all QEMU_VIRTFS_ENABLE=y
这里加了个 QEMU_VIRTFS_ENABLE=y,是我个人的习惯。它允许宿主机和 QEMU 之间共享目录,调试代码时特别方便。
4.3.2 启动 QEMU 并运行 OP-TEE
# 启动 QEMU(带图形界面)
make run-only QEMU_VIRTFS_ENABLE=y
# 或者纯命令行模式(适合 SSH 远程)
make run-only QEMU_VIRTFS_ENABLE=y QEMU_CONSOLE=y
启动后,你会看到两个终端窗口:一个是 Linux 控制台,另一个是 OP-TEE 的 Secure World 控制台。在 Linux 控制台里,你可以运行测试用例:
# 在 QEMU 的 Linux 终端里
xtest
# 或者运行单个测试
xtest 1001
核心知识点:QEMU 模拟的是 virt 平台(ARM 通用虚拟平台),它和树莓派 4 的硬件不完全一样。但 OP-TEE 的架构是平台无关的——你写的 Trusted Application(TA)在 QEMU 上能跑,在树莓派上也能跑,只需要重新编译一下。
4.4 两种方案的架构对比
下面这张图是我自己画的,帮你理清两种方案在架构上的异同:
你看,两种方案在软件栈上几乎一模一样——都是 Normal World + Secure World + ATF 三层结构。区别主要在底层:树莓派用的是真实硬件安全模块,QEMU 则用软件模拟。这意味着什么?
- 如果你要研究 安全存储、OTP 熔丝、硬件唯一密钥,必须上真板子。
- 如果你只是写 TA、调试 CA、学习 OP-TEE API,QEMU 完全够用。
4.5 我的选择建议
说了这么多,到底怎么选?我直接给结论:
学习路径建议:
- 第 1-2 周:只用 QEMU。把 OP-TEE 的编译、运行、测试流程跑通。写几个简单的 TA,理解 CA 和 TA 的通信机制。
- 第 3 周:入手树莓派 4。先跑 OP-TEE 官方镜像,确保硬件没问题。
- 第 4 周及以后:在树莓派上实现安全启动。从 BootROM → ATF → OP-TEE → Linux 的完整启动链,每一步都要验证签名。
我曾经带过一个团队,有个同事一上来就买树莓派,结果折腾了两周连 OP-TEE 都没跑起来。后来我让他先用 QEMU 把基础打牢,三天就上手了。你想想看,何必跟自己过不去呢?
4.6 常见问题与避坑
最后,分享几个我踩过的坑:
- SD 卡烧录失败:别用 Windows 的写卡工具。用
dd命令最稳,烧完后用sync确保数据落盘。 - QEMU 启动后黑屏:检查一下是不是没装
libsdl2-dev。我遇到过三次,都是这个原因。 - 树莓派 4 的 USB 供电不足:别用劣质充电器。官方要求 5V/3A,我用的是树莓派官方电源,从来没出过问题。
- OP-TEE 编译报错:大概率是工具链版本不对。OP-TEE 官方推荐用
gcc-arm-9.2-2019.12,别自己瞎升级。