OP-TEE Hello World 入门实战:从构建到 Host / TA 交互的完整解析
关键词:OP-TEE、Trusted Application(TA)、Client Application(CA/Host)、TEEC_InvokeCommand、TEE_Param、Secure World / Normal World
1. 为什么要写这篇文章
在学习 OP-TEE 的过程中,很多资料要么停留在“概念介绍”,要么直接跳到复杂的安全存储、密钥管理,中间缺少一个真正“能跑起来、能看清调用链”的实例。
hello_world 示例恰好填补了这个空白:
- 它足够简单(只做整数加减)
- 却完整覆盖了 OP-TEE 的核心机制
- Host 与 TA 的交互路径清晰
- 非常适合作为第一个实战级入门案例
本文基于一次完整的实际构建与运行过程,对 hello_world 示例进行系统整理,目标是:
读完本文,你应该能明确回答:OP-TEE 的功能,究竟是“怎么通过 Host 和 TA 协同实现的”。
2. OP-TEE 的基本运行模型(先建立正确认知)
在深入代码之前,必须先建立一个非常重要的认知:
2.1 OP-TEE 不是“你直接写 Secure OS”
在 OP-TEE 体系中,你能直接编写的代码只有两类:
| 世界 | 代码类型 | 作用 |
|---|---|---|
| Normal World | Client Application(CA / Host) | 发起请求 |
| Secure World | Trusted Application(TA) | 处理安全逻辑 |
OP-TEE OS 本身只是一个安全运行环境,真正的“功能”永远在 TA 里。
2.2 Host / TA 的关系是什么?
可以用一句话概括:
Host 是客户端,TA 是一个运行在 Secure World 的同步 RPC 服务。
调用关系是:
Host (Linux 用户态)
↓ TEEC_InvokeCommand
OP-TEE Driver (Kernel)
↓ SMC
OP-TEE OS
↓
TA_InvokeCommandEntryPoint
TA 执行完后,结果会原路返回到 Host。
3. hello_world 示例整体结构
hello_world 示例由两部分组成:
hello_world/
├── host/ # Normal World 客户端程序
│ └── main.c
└── ta/ # Secure World Trusted Application
├── hello_world_ta.c
├── include/
└── Makefile
这两个目录缺一不可,它们分别对应 OP-TEE 的两侧世界。
4. Host 端代码详解(Normal World)

4.1 Host 的角色是什么?
Host 代码的职责非常明确:
- 初始化 OP-TEE 上下文
- 打开一个 TA Session
- 构造参数(TEE_Param)
- 通过
TEEC_InvokeCommand发起请求 - 接收 TA 的返回结果
4.2 关键数据结构:TEEC_Operation
在 main.c 中,有一段非常关键的代码:
memset(&op, 0, sizeof(op));
op.paramTypes = TEEC_PARAM_TYPES

最低0.47元/天 解锁文章
1万+

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



