如何系统学习 OP-TEE:概念、架构与实战

编程达人挑战赛·第5期 10w+人浏览 384人参与


📺 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 OSSecure 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-osSecure 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 OSOP-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特点
BootROMNVIDIA 固化,不可更改
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 BootJetson 自身即可
理解 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.MX8MPimx-mx8mmevk
RK3588rockchip-rk3588
QEMUvexpress-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项目实战教程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值