目录
8.1.1 OP-TEE概述
基本架构
OP-TEE(Open Portable Trusted Execution Environment)是基于ARM TrustZone技术的开源TEE实现,由以下核心组件构成:
- OP-TEE OS:运行在安全世界(EL1)的微内核
- OP-TEE Client:运行在非安全世界(EL0/EL1)的客户端库
- OP-TEE Driver:Linux内核空间的可信执行环境驱动
与TF-A的关系
8.1.2 集成架构设计
启动时序
- BL1加载并验证BL2
- BL2加载并验证BL31和OP-TEE(BL32)
- BL31初始化后跳转到OP-TEE进行初始化
- OP-TEE返回BL31后继续启动BL33(通常为UEFI或Linux loader)
内存映射示例
/* 典型的内存布局配置(ARM FVP平台) */
#define BL32_BASE 0x04000000
#define BL32_LIMIT 0x0403F000
#define BL32_SHARED_BASE 0x04040000
#define BL32_SHARED_LIMIT 0x04080000
8.1.3 构建系统集成
编译选项配置
# 在TF-A构建命令中启用OP-TEE支持
BL32=optee.bin
SPD=opteed
镜像打包流程
- 编译OP-TEE生成
tee-header_v2.bin
和tee-pager_v2.bin
- 使用
fiptool
打包到FIP镜像:
fiptool create --tb-fw bl31.bin --soc-fw bl32.bin --nt-fw bl33.bin fip.bin
8.1.4 运行时交互机制
SMC调用处理流程
- 非安全世界通过
smc #0
指令触发异常 - BL31的异常处理程序根据SMC ID路由到OP-TEE
- OP-TEE处理完成后通过
eret
指令返回
共享内存管理
// OP-TEE中注册共享内存区域示例
struct tee_mm_shared_mem_info {
uintptr_t base;
size_t size;
uint32_t flags;
};
register_shared_mem(&mem_info);
8.1.5 安全世界切换实现
上下文保存/恢复
// BL31中实现的上下文切换宏
.macro save_and_enter_optee
stp x0, x1, [sp, #-16]!
mrs x0, sp_el0
mrs x1, elr_el3
stp x0, x1, [sp, #-16]!
bl opteed_synchronous_sp_entry
.endmacro
典型性能指标
操作类型 | 周期数(Cortex-A72) |
---|---|
世界切换 | 约1200 cycles |
SMC调用 | 约2000 cycles |
8.1.6 调试与验证
常见问题排查
- 启动失败:检查BL32基地址是否与OP-TEE链接脚本一致
- SMC调用超时:验证共享内存区域配置是否正确
- 权限错误:检查MMU页表配置的安全属性
调试技巧
# 启用TF-A调试日志
make LOG_LEVEL=40 DEBUG=1
# OP-TEE调试输出配置
CFG_TEE_CORE_LOG_LEVEL=3
8.1.7 平台适配指南
必须实现的平台接口
plat_get_optee_header()
- 获取OP-TEE镜像头信息plat_optee_pmem()
- 配置持久化内存区域plat_optee_enter()
- 平台特定的进入OP-TEE操作
设备树配置示例
/ {
firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
};
};
注意:实际集成时应参考最新版本的OP-TEE官方文档和TF-A移植指南