📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
如何系统学习 OP-TEE:概念、架构与实战
可信执行环境(Trusted Execution Environment, TEE)在嵌入式系统、安全计算、物联网和车载平台中越来越重要。作为当前 ARM TrustZone 体系下最主流、最成熟、最易移植的开源 TEE 实现,OP-TEE(Open Portable Trusted Execution Environment) 已成为 BSP、安全链路开发、可信应用(TA)开发、密钥管理和安全启动链路中必备的技术能力。
本篇文章对 OP-TEE 的学习路径、核心概念、系统架构、工程实战、编译方法、调试方式以及进一步的提升路线进行系统性讲解,力求:
- 概念清晰、不堆砌术语
- 结构完整、逻辑严谨
- 从工程角度解释必要知识
- 以可执行、可复现为标准给出实战流程
全文适合作为:新人入门、公司内部培训、BSP 工程师学习路线、以及 Yocto/Buildroot 开发的配套文档。

1. 为什么必须学习 OP-TEE?(学习动机与必要性)
现代嵌入式设备已经不可避免地承担安全相关任务,例如:
- 固件签名验证 & Secure Boot 链路
- 密钥保护、证书保护与安全存储
- DRM / HDCP / 内容保护
- 在线升级的回滚保护(Anti-rollback)
- 可信执行应用(TA)
- 支付、安全认证、人脸识别数据保护
这些功能如果放在普通 Linux(Normal World)中实现,容易受到:
- 调试接口攻击(JTAG / UART)
- 内存读取攻击(dump 内存直接获取密钥)
- 恶意软件篡改执行流
- 在升级过程中注入恶意固件
为应对上述风险,设备必须使用 ARM TrustZone 分离:
- Secure World:负责保护核心逻辑、密钥与 TA 的可信环境
- Normal World:执行普通 Linux 应用,不具备访问安全资源的能力
而 OP-TEE 就是运行在 Secure World 的完整操作系统。
1.1 为什么不是 Trusty 或商业 TEE?
OP-TEE 在生态中的优势十分明显:
| 方案 | 特点 |
|---|---|
| OP-TEE(主流) | 完全开源,可定制,可调试,ARM/Linaro/Google 支持,文档丰富,广泛用于 i.MX / RK / TI 等平台 |
| Trusty(Google) | Android 专用,闭源部分多,可移植性一般 |
| 商业 TEE(如 Kinibi) | 功能更强,但闭源、收费、定制困难 |
因此,对于企业级产品和开源系统,OP-TEE 是最具可控性与工程价值的 TEE 解决方案。
2. 新人应如何学习 OP-TEE?(推荐学习路径)
很多工程师上来先尝试编译 OP-TEE,但最终发现完全不知道:
- 什么是 TA?什么是 CA?
- Secure World 如何启动?
- 为何需要 tee-supplicant?
- SMC 是如何触发的?
正确顺序应该是:
阶段 1:理解基础概念(TEE 是什么?OP-TEE 用来做什么?)
掌握 TrustZone 的世界划分与调用机制。
阶段 2:理解 OP-TEE 架构(OS、驱动、用户态、TA 的关系)
只要架构清楚,后续所有学习会简单许多。
阶段 3:会编译与运行 OP-TEE(最基础的工程能力)
包括:
- 编译 optee-os
- 编译 optee-client
- 与 TF-A / U-Boot / Kernel 集成
阶段 4:学会编写一个 TA(核心能力)
掌握:
- TA 的生命周期
- CA→TA 请求流程
- 参数传递
- 内部逻辑组织
阶段 5:调试能力(工程师必须掌握)
例如:
- xtest 排查
- TEE 启动失败分析
- SMC 调用路径调试
- UUID 冲突/权限错误/内存映射问题
完成以上阶段,新人即可成长为具备安全链路开发能力的 TEE 工程师。
3. OP-TEE 必须理解的基础概念(客观、系统)
3.1 TrustZone 世界划分
ARMv8-A 架构提供了两个世界:
| 名称 | 描述 |
|---|---|
| Normal World(NW) | Linux / Android 所在的世界,也称 REE(Rich Execution Environment) |
| Secure World(SW) | 安全操作系统(OP-TEE)运行空间,用于执行敏感操作 |
两者由硬件隔离,资源访问严格受控。
3.2 TEE 的组成角色
| 角色 | 描述 |
|---|---|
| CA(Client Application) | 普通 Linux 应用,通过 libteec 向 Secure World 发请求 |
| TA(Trusted Application) | 运行在 Secure World 中的可信程序 |
| OP-TEE OS | Secure World 的操作系统 |
| TEE 驱动(optee-linux-driver) | Linux 内核与 OP-TEE 的通信桥梁 |
| tee-supplicant | 处理文件存储、RPC、加载 TA 的用户态服务 |
3.3 SMC(Secure Monitor Call)
Linux 通过 SMC 指令进入 Secure World,这是 CPU 硬件提供的机制。
4. OP-TEE 系统架构:分层清晰、职责明确
理解架构是新人学习中最关键的一步,本节给出客观、准确的系统结构分析。
Normal World (Linux)
+---------------------------+
| Client App (CA) |
| | |
| libteec API |
| | |
| OP-TEE Linux Driver |
+---------|-----------------+
| SMC 调用
+---------|-----------------+
| Secure World |
| OP-TEE OS |
| +---------+ |
| | TA | |
| +---------+ |
+---------------------------+
4.1 OP-TEE 的五个核心组件
| 组件 | 职责 |
|---|---|
| optee-os | Secure World 的操作系统,调度 TA,管理内存和安全资源 |
| optee-client | 提供用户态 API(libteec.so) |
| optee-linux-driver | 实现 Linux → Secure World 的通信接口 |
| optee-test(xtest) | 测试框架,用于验证 TEE 功能 |
| TA(Trusted Application) | 所有安全逻辑的实际承载者 |
架构层次明晰,适合从工程角度入手掌握。
5. OP-TEE 实战:从下载到运行(以 Jetson AGX Orin 为主线示例)
虽然 OP-TEE 在 i.MX8、RK3588、QEMU 等平台均可直接编译运行,但 Jetson AGX Orin 采用了 NVIDIA 深度定制的安全架构,包含:
- NVIDIA Secure Boot Chain(由 BootROM→MB1→MB2→UEFI 组成)
- NVIDIA 自研 TEE/secure monitor(不完全依赖 OP-TEE)
- 安全功能使用专有固件实现(如 Camera/ISP 安全、DCE、安全加密单元)
因此 Jetson 平台默认情况下:
- 不会直接运行社区版 OP-TEE
- 不能简单将 tee.bin 注入 BL32 来替换 NVIDIA 的安全世界实现
但是,Jetson 仍然非常适合:
- 理解 TEE/TrustZone 实际在商业平台中的落地方式
- 了解厂商如何定制 Secure World
- 结合 Yocto 构建 TEE 客户端应用结构
- 对照理解 TF-A/BL32 的角色
为了帮助读者在 Jetson 环境中建立正确心智模型,本节以 AGX Orin 为例说明:
- Jetson 的 Secure Boot 链路与 OP-TEE 的关系
- Jetson 如何替代 OP-TEE 的典型功能
- 若要学习 OP-TEE,应在何处使用 QEMU / i.MX8MP / RK3588 平台进行交叉验证
5.1 Jetson AGX Orin Security Architecture
(本节已含安全链路流程图,以下新增 Jetson 与 OP-TEE 架构视觉化对比图,使读者一眼即可理解两者的 Secure World 差异。)
🔍 Jetson Secure World vs OP-TEE Secure World:架构可视化对比图
下图从系统层级角度展示 NVIDIA Jetson(封闭 Secure OS)与 OP-TEE(开源 Secure OS)之间的结构差异。该图强调:
- 两者都基于 ARM TrustZone
- Normal World(Linux)中运行的 CA 逻辑相似
- 最大差异在 Secure World 的系统实现与可定制性
┌──────────────────────────────────────────────────────────────┐
│ Normal World(Linux, REE) │
│ │
│ +----------------------+ +---------------------------+ │
│ | CA: Client App | | CA: Client App | │
│ | (Jetson 上普通应用) | | (OP-TEE 平台普通应用) | │
│ +----------+-----------+ +------------+--------------+ │
│ | | │
│ libnv-sec / kernel API libteec (OP-TEE API)|
│ | | │
└──────────────+──────────────────────────────────+──────────────┘
| |
| TrustZone SMC 调用 | TrustZone SMC 调用
▼ ▼
┌──────────────────────────────────────────────────────────────┐
│ Secure World(TrustZone) │
│ │
│ Jetson Secure OS(封闭) OP-TEE OS(开源) │
│ ---------------------------------------------------------- │
│ • NVIDIA 安全固件实现(MB1/MB2/RCE/DCE) • optee-os(完全可编译) │
│ • 无法添加自定义 TA • 可加载自定义 TA │
│ • 不提供 TA API 接口 • GlobalPlatform API │
│ • 安全逻辑由厂商固化 • 存储、安全服务可扩展 │
│ │
│ (不可修改、不可调试) (可调试、可扩展、可移植)│
└──────────────────────────────────────────────────────────────┘
📌 架构差异总结表
| 项目 | Jetson Secure OS | OP-TEE Secure OS |
|---|---|---|
| 开源性 | ✘ 封闭 | ✔ 完全开源 |
| 是否可加载 TA | ✘ 不可 | ✔ 可自定义、可调试 |
| 是否遵循 GP TEE 标准 | ✘ 否 | ✔ 是 |
| Secure World 调试 | ✘ 不支持 | ✔ 支持 printk / gprof / GDB Proxy |
| 与厂商绑定程度 | 极高(仅 NVIDIA) | 低,可移植至任意 ARM SoC |
| 学习价值 | 理解真实安全链路 | 学习真实 TEE 技术与开发 |
🎯 为什么需要这个对比图?
这样的可视化对比可以帮助工程师迅速建立正确认知:
- Jetson 是安全链路学习的绝佳平台
- OP-TEE 是 TEE 实战的主力平台
两者并不冲突,而是相辅相成。(加入完整安全启动链路流程图)
为了帮助读者更清晰理解 Jetson 平台的安全体系,本节新增 Jetson AGX Orin Secure Boot 链路完整流程图,以展示从 BootROM 到 Linux 的完整路径,以及每个阶段的职责、签名验证内容与与 OP-TEE 概念的关系。
🔒 Jetson AGX Orin Secure Boot 全流程图(ASCII 结构图)
┌─────────────────────────────────────────────────────────┐
│ 1. BootROM (硬件固化) │
│ • 读取 fuses:SBK、PKC、公钥 Hash │
│ • 验证 MB1Boot + MB1 Config │
│ • 若启用 PKC:验证签名 │
│ • 若启用 SBK:解密静态安全块(SSK 派生) │
└───────────────┬─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 2. MB1 (NVIDIA 专有 Stage-1 Bootloader) │
│ • 初始化 PMIC、时钟、内存控制器 │
│ • 验证 MB2 镜像签名 │
│ • 设置部分安全寄存器、TRUSTZONE 启动配置 │
└───────────────┬─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 3. MB2 (NVIDIA Stage-2 Loader) │
│ • 加载 UEFI(BL33) │
│ • 验证固件组件:TSEC、DCE、APE、RCE │
│ • 配置安全资源分配、安全内存 │
│ • 继续 TrustZone 初始化(Secure Monitor 设置) │
└───────────────┬─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 4. UEFI (BL33) │
│ • 执行安全策略(Anti-rollback / RPMB) │
│ • 加载并启动 Linux Kernel │
│ • 负责 Verified Boot(AVB) │
│ │
│ ※ 注意:此阶段 Jetson 不加载 OP-TEE(无 BL32) │
└───────────────┬─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 5. Linux Kernel & Userspace │
│ • 内核态驱动初始化 │
│ • 普通应用启动(REE) │
│ │
│ ※ 若是 NXP / RK 平台,此处会出现 OP-TEE(BL32) │
│ 但 Jetson 为封闭 Secure OS,不使用 OP-TEE │
└──────────────────────────────────────────────────────────┘
📌 Jetson 安全链路关键特性总结
| 阶段 | 是否可修改 | 是否开源 | 是否支持 OP-TEE | 特点 |
|---|---|---|---|---|
| BootROM | ✘ | ✘ | ✘ | NVIDIA 固化,不可更改 |
| MB1 | ✘ | ✘ | ✘ | 验证链最关键部分,封闭 |
| MB2 | 部分可控 | ✘ | ✘ | 负责加载 UEFI、安全固件 |
| UEFI | ✔ | 部分开源 | ✘ | 可修改,负责 Verified Boot |
| Linux | ✔ | ✔ | ✔(仅作为 CA,不含 Secure World) | 可运行普通安全应用 |
结论:Jetson 的 Secure World 是 NVIDIA 封闭实现,不运行 OP-TEE。
但其安全链路与 TEE 原理高度一致,是理解 OP-TEE 的极好参考平台。(理解 OP-TEE 在 Jetson 中的定位)
Orin 的 Secure 启动链路如下:
BootROM → MB1 → MB2 → UEFI → Linux Kernel
其中 Secure World 大部分功能在:
- BootROM(不可变):验证安全配置与主密钥
- MB1/MB2:加载 DDR 参数、验证 BL 驱动程序、初始化安全引擎
- UEFI + NVIDIA TSEC/DCE/APE firmware:承担系统完整性与安全相关操作
⚠️ 重要现实点:
Jetson 平台的安全世界并不是基于 OP-TEE,而是由 NVIDIA 封闭固件实现,因此学习 OP-TEE 并非为了直接取代 Jetson 的 Secure World,而是为了:
- 理解厂商 SoC 如何实现安全执行环境
- 理解 Secure Boot 链路和签名验证逻辑
- 学习 TA/CA 编程,用于未来使用 i.MX8 / RK3588 / Qualcomm 平台
- 理解商业化硬件中的 TEE 限制与设计方法
换句话说:
Jetson 不是 OP-TEE 的实战运行平台,但 Jetson 是理解真实商用 TEE 架构的最好教材。
5.2 在 Jetson 平台学习 OP-TEE 的正确方式
建议采用“双平台学习法”:
| 学习内容 | Jetson 是否适合 | 推荐平台 |
|---|---|---|
| 理解 Secure Boot | ✔ | Jetson 自身即可 |
| 理解 TrustZone/TEE 架构 | ✔ | Jetson + i.MX8MP |
| 编译 OP-TEE OS | ✘(不能加载到 Secure World) | QEMU / i.MX8MP / RK3588 |
| 调试 TA/CA | ✘(Jetson 无 OP-TEE) | QEMU / i.MX8MP |
| 验证 BL32 加载流程 | 部分可参考 | RK3588 / i.MX8MP |
因此在后续的 OP-TEE 实战中,本篇依然提供完整的通用编译流程,但同时:
- 说明哪些步骤在 Jetson 上不可执行
- 哪些步骤依旧有助于理解 Jetson 的安全启动链路
这让工程师可以:
- 在 Jetson 上学习“安全启动链路 + 安全集成逻辑”
- 在 NXP/Rockchip/QEMU 上学习“OP-TEE 实战”
这样可以达到最完整的学习效果。
5.3(通用)获取 OP-TEE 源码
(此处保持通用 OP-TEE 教程,Jetson 不执行此步骤,只用于理解安全世界 OS 实现。)
git clone https://github.com/OP-TEE/optee_os.git
git clone https://github.com/OP-TEE/optee_client.git
git clone https://github.com/OP-TEE/optee_test.git
以下流程适用于:
- i.MX8MP
- RK3588
- QEMU ARMv8
- 其他主流 ARM SoC
Jetson 由于 NVIDIA 对 Secure Boot 限制较多,操作方式需按 L4T 文档定制,但架构一致。
5.1 获取源码
git clone https://github.com/OP-TEE/optee_os.git
git clone https://github.com/OP-TEE/optee_client.git
git clone https://github.com/OP-TEE/optee_test.git
5.2 编译 OP-TEE OS(Secure World)
示例:i.MX8MP 平台
make -C optee_os PLATFORM=imx-mx8mmevk CFG_ARM64_CORE=y
常见 PLATFORM 列表:
| 平台 | PLATFORM |
|---|---|
| i.MX8MP | imx-mx8mmevk |
| RK3588 | rockchip-rk3588 |
| QEMU | vexpress-qemu_armv8a |
输出文件:
- tee.bin
- tee.elf
- tee.srec
这些会被 TF-A/U-Boot 加载到 Secure World。
5.3 编译客户端库(CA 支持层)
make -C optee_client
生成:
- libteec.so
- tee-supplicant(必须随系统启动)
5.4 将 OP-TEE 集成到 TF-A
示例:RK3588
BL32=<path>/tee.bin make PLAT=rk3588 all
示例:i.MX8MP
BL32=<path>/tee.bin make PLAT=imx8mp bl31
TF-A 会将 tee.bin 放入 BL32 阶段执行。
6. TA(Trusted Application)开发:OP-TEE 的核心能力(Jetson 适用说明)
OP-TEE 的 TA 开发是 TEE 学习中最重要的能力,但需要再次明确:
-
Jetson AGX Orin 不支持加载自定义 OP-TEE TA(其 Secure World 并非 OP-TEE)
-
但 Jetson 工程师仍然必须理解 TA 机制,因为:
- TEE 是所有 SoC 的安全基石
- Nvidia 的安全世界虽然不可定制,但工作机制与 OP-TEE 类似
- 未来迁移到 i.MX8 / RK3588 / TI / Qualcomm 时可直接使用
因此,本节继续使用 OP-TEE 的通用 TA 开发示例,帮助工程师建立通用 TEE 思维模型。
TA 是 Secure World 的真正业务执行者,是 OP-TEE 开发中最关键的技能。
6.1 TA 的基本结构
hello_ta/
├── Makefile
├── user_ta_header_defines.h
├── ta.c
└── include/"+" 如何学习 OP-TEE:概念 + 实战篇(面向新人完整指南)
(以下为完整正文。)
# 如何系统学习 OP-TEE:概念、架构与实战(完整指南)
OP-TEE 是当今 ARM 平台可信执行环境(Trusted Execution Environment, TEE)的事实标准。本篇文章在保持完整系统讲解的基础上,**进一步以 Jetson AGX Orin 平台作为主线例子**,帮助读者理解 OP-TEE 在实际商业 SoC 上的集成方式、平台限制、可用特性,以及与 NVIDIA 安全启动链路的区别。无论你使用的是 **NXP i.MX8MP、NVIDIA Jetson AGX Orin、RK3588、Qualcomm 平台**,只要涉足安全启动、密钥保护、可信应用(TA)执行、DRM 或支付级安全场景,OP-TEE 都是必学的核心组件。
但对新人来说,OP-TEE 往往有两个问题:
1. **概念多、缩写多、容易混乱**:TEE、REE、Secure World、Normal World、CA、TA、GP API、SMC…
2. **实战步骤复杂**:编译、集成、调试、与 U-Boot/TF-A/内核配合、打包固件、烧录。
为了让完全没有背景的工程师也能顺利掌握,本教程从 **学习路径 → 基础概念 → 架构 → 实战步骤 → 调试方法 → 深度扩展** 全流程展开,强调:
- 概念准确
- 架构逻辑清晰
- 每一步都有可落地的实践
- 结合主流平台(Jetson / i.MX8MP / RK3588)给出真实经验
全文超过 **5000 字**,适合作为入门教程、公司培训材料或课程脚本使用。
---
# 1. 为什么要学习 OP-TEE?(学习动机)
### 1.1 现代系统必须“可信执行”
智能摄像头、工业控制器、车载计算单元、无人机、智能门锁等系统越来越依赖:
- 密钥保护(Key Store)
- 加密/解密与签名验证
- DRM 或版权保护
- 安全升级(OTA + Anti-rollback)
- 安全启动(Secure Boot)
这些关键安全能力不能放在普通系统内(Normal World,NW),否则很容易被:
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
504

被折叠的 条评论
为什么被折叠?



