3.18. sample_trustzone 使用说明
3.18.1. 功能概述
sample_trustzone 分别
sample_ta 添加
数据
自加 命令 TA_SAMPLE_CMD_INC_VALUE: 由 TA 将传入 的 数值 加 1,并 返回 给 CA 数据
自减 命令 TA_SAMPLE_CMD_DEC_VALUE: 由 TA 将传入 的 数值 减 1,并 返回 给 CA 字符串
回显 命令 TA_SAMPLE_CMD_ECHO_STR: 由 TA 将传入 的 字符串 追加 [TA],并回显 给 CA
3.18.1.1. 软件架构说明

3.18.1.2. 代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_trustzone目录
结构
sample_trustzone
├── sample_ca
│ ├── Makefile
│ └── sample_ca.c
└── sample_ta
├── Makefile
├── include
│ └── sample_ta.h
├── sample_ta.c
├── sub.mk
└── user_ta_header_defines.h
3.18.1.3. API 流程说明

3.18.2. 编译
下面
3.18.2.1. sample_ta 编译
拷贝 sample_ta 源码
注意: sample_ta 并miniboot/optee/hobot_tee_devkit/ta/customer 下
使用
cp app/samples/platform_samples/sample_trustzone/sample_ta miniboot/optee/hobot_tee_devkit/ta/customer/ -rf
创建 UUID
使用
系统
UUID 可以

如ed53d67d-4e58-4b9a-8514-0a61c3c94401
配置 UUID
使用
上
路径 sample_ta/include/sample_ta.h
#define TA_SAMPLE_UUID \
{ 0xed53d67d, 0x4e58, 0x4b9a, \
{ 0x85, 0x14, 0x0a, 0x61, 0xc3, 0xc9, 0x44, 0x01} }
路径 sample_ta/Makefile
# The UUID for the Trusted Application
BINARY=ed53d67d-4e58-4b9a-8514-0a61c3c94401
将 sample_ta 添加
到 编译 选项
修改 miniboot/optee/hobot_tee_devkit/ta/customer/Makefile,将 sample_ta 追加CTA_DIRS
CTA_DIRS := sample_ta
编译
在 SDK 根目录./bd.sh miniboot,将miniboot/optee/hobot_tee_devkit/out/ta/sample_ta。
TA 运行[UUID].ta,根据ed53d67d-4e58-4b9a-8514-0a61c3c94401.ta。
3.18.2.2. sample_ca 编译
配置 UUID
使用
CA 是
// 匹配之前步骤配置的 TA UUID
TEEC_UUID uuid = { 0xed53d67d, 0x4e58, 0x4b9a, \
{ 0x85, 0x14, 0x0a, 0x61, 0xc3, 0xc9, 0x44, 0x01} };
// ...(省略部分代码)...
// 在 open session 的时候传入 UUID
res = TEEC_OpenSession(&ctx, &sess, &uuid,
TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin);
// ...(省略部分代码)...
编译
在 sample_ca 源码make 命令
cd app/samples/platform_samples/sample_trustzone/sample_ca
make
详细
3.18.3. 部署
下面
3.18.3.1. sample_ta 部署
将out/deploy/system/usr/lib/optee_armtz 目录。
执行 ./bd.sh system,将 sample_ta 程序
刷写/usr/lib/optee_armtz
3.18.3.2. sample_ca 部署
刷写/app/platform_samples/sample_trustzone/sample_ca。
3.18.4. 运行
3.18.4.1. 程序运行方法
直接
执行程序 ./sample_ca -h可以获得 帮助 信息:
3.18.4.2. 程序参数选项说明
Usage: sample_ca [OPTIONS] [value]
Options:
-i <value> Increase value From TA
-d <value> Decrease value From TA
-c <string> Echo string From TA
-h Show this help message
选项:
i <value>: 由 TA 将传入 的 数值 加 1,并 返回 给 CA d <value>: 由 TA 将传入 的 数值 减 1,并 返回 给 CA c <string>: 由 TA 将传入 的 字符串 追加 [TA],并回显 给 CA h: 显示帮助 信息。
3.18.4.3. 运行效果
验证数据自加命令
执行命令 ./sample_ca -i 10,将 10 传给 sample_ta。
打印 log 如下
Establish Context with OP-TEE!
Establish Session with TA!
I/TC: RPMB: Using generated key
D/TA: TA_CreateEntryPoint:39 has been called
D/TA: TA_OpenSessionEntryPoint:68 has been called
D/TA: inc_value:105 has been called
I/TA: Got value: 10 from NW
I/TA: Increase value to: 11
TA incremented value to 11
Disconnect Session with TA!
D/TA: TA_DestroyEntryPoint:50 has been called
Disconnect Context with OP-TEE!
可以
验证数据自减命令
执行命令 ./sample_ca -d 10,将 10 传给 sample_ta。
打印 log 如下
Establish Context with OP-TEE!
Establish Session with TA!
D/TA: TA_CreateEntryPoint:39 has been called
D/TA: TA_OpenSessionEntryPoint:68 has been called
D/TA: dec_value:125 has been called
I/TA: Got value: 10 from NW
I/TA: Decrease value to: 9
TA incremented value to 9
Disconnect Session with TA!
D/TA: TA_DestroyEntryPoint:50 has been called
Disconnect Context with OP-TEE!
可以
验证字符串回显命令
执行命令 ./sample_ca -c hello,将
打印 log 如下
Establish Context with OP-TEE!
Establish Session with TA!
D/TA: TA_CreateEntryPoint:39 has been called
D/TA: TA_OpenSessionEntryPoint:68 has been called
D/TA: echo_str:146 has been called
I/TA: Got sting from NW: hello
TA Echo: hello[TA]
Disconnect Session with TA!
D/TA: TA_DestroyEntryPoint:50 has been called
Disconnect Context with OP-TEE!
可以hello[TA] 给 CA
3.18.5. 常见问题
3.18.5.1. 执行 CA 程序调用 TA 提示 Verify key 错误

解决
方法: TA 的加载 需 依赖 user root key。 关于 user root key 的 烧录 方法,请 参考 efuse