1. 搭建ARM TrustZone开发环境与第一个安全世界程序
任务说明
本案例目标是在Raspberry Pi 3(RPi3)上搭建ARM TrustZone开发环境,并验证安全世界(Secure World)与非安全世界(Normal World)之间的基本通信。RPi3采用ARM Cortex-A53处理器,支持TrustZone扩展。我们将使用OP-TEE(Open Portable Trusted Execution Environment)作为TEE实现,通过其提供的Linux驱动与安全世界中的可信应用(TA)进行通信。
环境准备
需要以下硬件与软件:
- Raspberry Pi 3 Model B或B+(推荐B+,内存更大)
- 16GB以上MicroSD卡
- Ubuntu 20.04或22.04主机(用于交叉编译)
- USB转TTL串口线(用于查看启动日志)
构建OP-TEE for RPi3
使用OP-TEE官方构建脚本,该脚本会自动下载并编译所有必要组件(包括ATF、U-Boot、Linux内核、OP-TEE OS及客户端库)。
# 在主机上执行
git clone https://github.com/OP-TEE/build.git op-tee-build
cd op-tee-build
make toolchains -j$(nproc)
make all -j$(nproc) PLATFORM=rpi3
构建完成后,生成的文件位于out/rpi3目录下,其中linux子目录包含内核镜像,optee_os包含TEE内核,boot目录包含启动所需的全部文件。
烧录SD卡
# 将SD卡插入主机,假设设备为/dev/sdX(请确认实际设备名)
cd op-tee-build/out/rpi3
sudo dd if=boot/fip.bin of=/dev/sdX bs=8192 seek=1 conv=notrunc
sudo dd if=linux/Image of=/dev/sdX bs=8192 seek=32768 conv=notrunc
# 创建FAT分区并拷贝设备树与启动脚本
sudo mkfs.vfat /dev/sdX1
sudo mount /dev/sdX1 /mnt
sudo cp boot/bcm2710-rpi-3-b-plus.dtb /mnt/
sudo cp boot/uEnv.txt /mnt/
sudo umount /mnt
验证安全与非安全世界通信
启动RPi3后,通过串口登录Linux(默认账号root,无密码)。OP-TEE的TEE驱动已集成在内核中,使用optee_example测试程序验证通信:
# 在RPi3串口终端执行
optee_example_hello_world
该程序会调用安全世界中的TA,执行后返回结果。预期输出如下(示例输出,非实测数据):
Hello World!
TA_InvokeCommand success
通信机制说明
OP-TEE通过ARM TrustZone的SMC(Secure Monitor Call)指令实现世界切换。Linux内核中的OP-TEE驱动通过SMC陷入EL3(Monitor模式),由Monitor将请求路由到安全世界的TEE内核,TEE内核再调用对应的TA。下图展示了通信路径:
判定标准
满足以下条件即验证通过:
- 串口输出显示OP-TEE初始化成功,无错误信息;
optee_example_hello_world执行后返回成功状态;- 通过
dmesg | grep optee能看到驱动加载日志。
若执行失败,检查串口日志中是否有TEE初始化错误,以及/dev/teepriv0设备节点是否存在(需root权限查看)。