1. 搭建TrustZone开发环境

搭建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。下图展示了通信路径:

Normal World Linux用户态 optee_example Normal World Linux内核 OP-TEE驱动 Secure World TEE内核 TA (hello_world) EL3 Monitor SMC #0 SMC #1 世界切换

判定标准

满足以下条件即验证通过:

  1. 串口输出显示OP-TEE初始化成功,无错误信息;
  2. optee_example_hello_world执行后返回成功状态;
  3. 通过dmesg | grep optee能看到驱动加载日志。

若执行失败,检查串口日志中是否有TEE初始化错误,以及/dev/teepriv0设备节点是否存在(需root权限查看)。