mirror of
https://github.com/openharmony/tee_tee_dev_kit.git
synced 2026-08-24 19:13:10 -04:00
Merge branch 'master' of gitee.com:pete-lipeng/tee_tee_dev_kit
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# OpenTrustee兼容性测试
|
||||
OpenTrustee提供了acts兼容性测试套件,CA的具体目录在`test/xts/acts/tee`下,TA以签名后的二进制存放在`https://gitee.com/openharmony-sig/compatibility/tree/master/test_suite/resource/tee`资源目录下。
|
||||
## OpenTrustee的验证测试套件说明
|
||||
OpenTrustee提供了acts兼容性测试套件,CA的具体目录在`test/xts/acts/tee`下,TA以签名后的二进制存放在[《兼容性测试套件标准系统资源目录》](https://gitee.com/openharmony-sig/compatibility/tree/master/test_suite/resource/master/standard%20system/acts/resource)的tee路径下。
|
||||
| 测试CA | 测试TA | 说明 |
|
||||
| ------------ | ------------------------------------------------------------ | --- |
|
||||
| tee_test_client_api | 534d4152-542d-4353-b919-d3016a171fc5.sec | CA与TA通信API |
|
||||
@@ -8,11 +8,12 @@ OpenTrustee提供了acts兼容性测试套件,CA的具体目录在`test/xts/ac
|
||||
- 进入openharmony根目录,在test/xts/acts目录下执行编译命令,编译CA测试用例。
|
||||
|
||||
```Bash
|
||||
cd test/xts/acts
|
||||
./build.sh product_name=rk3568 system_size=standard target_subsystem=tee
|
||||
```
|
||||
|
||||
- 参考`https://www.openharmony.cn/certification/document/guid`中的《标准系统应用兼容性测试指导》章节,在Windows工作台上搭建运行环境
|
||||
- 从 `https://gitee.com/openharmony-sig/compatibility` 下载资源文件,将`test_suite/resource/master/standard system/acts`目录下的文件拷贝到`acts/resource`目录下
|
||||
- 参考[《openharmony兼容性测评服务》](https://www.openharmony.cn/certification/document/guid)中的《标准系统应用兼容性测试指导》章节,在Windows工作台上搭建运行环境
|
||||
- 从 `https://gitee.com/openharmony-sig/compatibility`下载资源文件,将`test_suite/resource/master/standard system/acts`目录下的文件拷贝到`acts/resource`目录下
|
||||
- 进入acts目录,直接执行run.bat,然后在命令框里输入以下命令运行用例
|
||||
|
||||
```Bash
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
# OpenTrustee调试机制
|
||||
# OpenTrustee调试机制介绍
|
||||
|
||||
## TEE侧日志查看
|
||||
## 日志
|
||||
当前OpenTrustee支持TEE侧日志系统,在TEEOS中提供LIB接口供TA和OpenTrustee Framework调用记录日志。
|
||||
|
||||
当前OpenTrustee支持TEE侧日志系统,在TEE中提供LIB接口供TA和OpenTrustee Framework调用记录日志。使用维测接口获取TEE侧信息的说明如下:
|
||||
通过`hdc shell`打开命令行窗口,输入tlogcat即可查看日志。
|
||||
|
||||
## 日志级别
|
||||
### 日志级别
|
||||
|
||||
当前TEE中日志分为以下5个级别。
|
||||
|
||||
@@ -56,15 +54,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
> **说明:**
|
||||
>新开发TA推荐用上述日志接口,不建议使用其他接口。
|
||||
|
||||
### 日志使用限制<a name="section413233117432"></a>
|
||||
|
||||
1. 日志内存大小是有限的,当日志写入比较快时,会出现日志被覆盖的情况,日志内存采用的是内核申请的PAGES内存,大小是256K。
|
||||
2. 增加TA日志时,要符合安全规范,不能打印用户隐私信息、内存地址等,不打印调试日志,且一条日志内容要做到字符精简。
|
||||
|
||||
### 使用方法<a name="section61772276175810"></a>
|
||||
### 使用方法
|
||||
|
||||
在源代码文件中包含tee\_log.h,使用与日志级别对应的日志打印接口打印日志。
|
||||
|
||||
@@ -110,4 +100,13 @@ tee\_log.h中默认使用的日志级别为INFO,即默认打印使用tloge、t
|
||||
</table>
|
||||
|
||||
2. 直接修改tee\_log.h中定义的TA\_LOG\_LEVEL\_DEFAULT为期望的级别。多个TA共用同一个tee\_log.h文件且期望打印的日志级别不一致时,不能选用此方式。
|
||||
3. 直接修改tee\_log.h中定义的TA\_LOG\_LEVEL为期望的级别。多个TA共用同一个tee\_log.h文件且期望打印的日志级别不一致时,不能选用此方式。
|
||||
3. 直接修改tee\_log.h中定义的TA\_LOG\_LEVEL为期望的级别。多个TA共用同一个tee\_log.h文件且期望打印的日志级别不一致时,不能选用此方式。
|
||||
|
||||
### 日志使用限制
|
||||
|
||||
1. 日志内存大小是有限的,当日志写入比较快时,会出现日志被覆盖的情况,日志内存采用的是内核申请的PAGES内存,大小是256K。
|
||||
2. 增加TA日志时,要符合安全规范,不能打印用户隐私信息、内存地址等,不打印调试日志,且一条日志内容要做到字符精简。
|
||||
|
||||
### TEE侧日志查看
|
||||
|
||||
通过`hdc shell`打开命令行窗口,输入tlogcat即可查看日志。
|
||||
@@ -41,7 +41,7 @@ hdc file send tlogcat /system/bin/
|
||||
|
||||
## Tzdriver的适配和构建
|
||||
|
||||
tzdriver是TEE的内核驱动,主要功能是在整个TEE子系统中起连接作用,是使用TEE OS服务的桥梁,tzdriver处理来自于tee\_client的ioctl命令,并通过smc指令从REE切换到TEE。
|
||||
tzdriver是TEE的内核驱动,主要功能是在整个TEE子系统中起连接作用,是使用TEEOS服务的桥梁,tzdriver处理来自于tee\_client的ioctl命令,并通过smc指令从REE切换到TEE。
|
||||
|
||||
### 适配指导以及适配实例
|
||||
|
||||
@@ -112,7 +112,7 @@ tzdriver有一些特性或者选项,可以选择配置,控制这些选项的
|
||||
|
||||
```
|
||||
#
|
||||
# TEE OS
|
||||
# TEEOS
|
||||
#
|
||||
CONFIG_TZDRIVER=y
|
||||
CONFIG_CPU_AFF_NR=1
|
||||
@@ -177,7 +177,7 @@ tzdriver部件跟随kernel一起编译,以rk3568为例,可以重编boot_linu
|
||||
芯片使能TEE时,需要对Loader和ATF进行适配。
|
||||
|
||||
### TEE Loader的适配
|
||||
TEE Loader主要负责加载安全镜像并将启动参数传递给TEE OS的功能。启动参数包含TEE OS用到的安全内存地址和大小,串口的地址,gic寄存器配置,以及其它拓展参数。
|
||||
TEE Loader主要负责加载安全镜像并将启动参数传递给TEEOS的功能。启动参数包含TEEOS用到的安全内存地址和大小,串口的地址,gic寄存器配置,以及其它拓展参数。
|
||||
|
||||
**表 2** 启动参数列表
|
||||
|
||||
@@ -199,14 +199,14 @@ TEE Loader主要负责加载安全镜像并将启动参数传递给TEE OS的功
|
||||
</tr>
|
||||
<tr id="row1618618496132"><td class="cellrowborder" valign="top" width="20.31%" headers="mcps1.2.4.1.1 "><p id="p292mcpsimp"><a name="p292mcpsimp"></a><a name="p292mcpsimp"></a>phys_region_size</p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="28.64%" headers="mcps1.2.4.1.2 "><p id="p294mcpsimp"><a name="p294mcpsimp"></a><a name="p294mcpsimp"></a>TEE OS内存大小</p>
|
||||
<td class="cellrowborder" valign="top" width="28.64%" headers="mcps1.2.4.1.2 "><p id="p294mcpsimp"><a name="p294mcpsimp"></a><a name="p294mcpsimp"></a>TEEOS内存大小</p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="51.05%" headers="mcps1.2.4.1.3 "><p id="p320093615420"><a name="p320093615420"></a><a name="p320093615420"></a>2MB的整数倍。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="row01861049151317"><td class="cellrowborder" valign="top" width="20.31%" headers="mcps1.2.4.1.1 "><p id="p297mcpsimp"><a name="p297mcpsimp"></a><a name="p297mcpsimp"></a>phys_region_start</p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="28.64%" headers="mcps1.2.4.1.2 "><p id="p299mcpsimp"><a name="p299mcpsimp"></a><a name="p299mcpsimp"></a>TEE OS内存起始物理地址</p>
|
||||
<td class="cellrowborder" valign="top" width="28.64%" headers="mcps1.2.4.1.2 "><p id="p299mcpsimp"><a name="p299mcpsimp"></a><a name="p299mcpsimp"></a>TEEOS内存起始物理地址</p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="51.05%" headers="mcps1.2.4.1.3 "><p id="p1020063614220"><a name="p1020063614220"></a><a name="p1020063614220"></a>2MB的整数倍。</p>
|
||||
</td>
|
||||
@@ -229,13 +229,13 @@ TEE Loader主要负责加载安全镜像并将启动参数传递给TEE OS的功
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="28.64%" headers="mcps1.2.4.1.2 "><p id="p98811215461"><a name="p98811215461"></a><a name="p98811215461"></a>其它参数</p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="51.05%" headers="mcps1.2.4.1.3 "><p id="p18872120461"><a name="p18872120461"></a><a name="p18872120461"></a>格式需要和TEE OS核对。</p>
|
||||
<td class="cellrowborder" valign="top" width="51.05%" headers="mcps1.2.4.1.3 "><p id="p18872120461"><a name="p18872120461"></a><a name="p18872120461"></a>格式需要和TEEOS核对。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
#### 开发实例<a name="section3748141455319"></a>
|
||||
#### 开发实例
|
||||
|
||||
- 下面展示了在芯片使能TEE时,使用 TEE Loader配置启动参数的开发实例。详细示例代码位于 `base/tee/tee_os_framework/sample/teeloader` 目录。
|
||||
|
||||
@@ -257,7 +257,7 @@ static struct platform_info g_teeos_cfg;
|
||||
|
||||
static uintptr_t g_teeos_base_addr = 0;
|
||||
|
||||
/* 设置TEE OS的起始地址size的大小 */
|
||||
/* 设置TEEOS的起始地址size的大小 */
|
||||
int32_t set_teeos_mem(uintptr_t teeos_base_addr, uint64_t size)
|
||||
{
|
||||
g_teeos_base_addr = teeos_base_addr;
|
||||
@@ -270,7 +270,7 @@ int32_t set_teeos_mem(uintptr_t teeos_base_addr, uint64_t size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 设置TEE OS的串口地址和类型 */
|
||||
/* 设置TEEOS的串口地址和类型 */
|
||||
void set_teeos_uart(uint64_t uart_addr)
|
||||
{
|
||||
g_teeos_cfg.uart_addr = uart_addr;
|
||||
@@ -299,7 +299,7 @@ bool copy_extend_datas(void *extend_datas, uint64_t extend_length)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 拷贝启动参数到目标位置,配置TEE OS属性后调用此接口 */
|
||||
/* 拷贝启动参数到目标位置,配置TEEOS属性后调用此接口 */
|
||||
bool copy_teeos_cfg(void)
|
||||
{
|
||||
if (g_teeos_cfg.phys_region_start == 0)
|
||||
@@ -337,16 +337,16 @@ uint64_t get_teeos_size(void)
|
||||
CHCORE_PLAT=new_plat
|
||||
```
|
||||
> **注意:**
|
||||
启动参数的适配方法可以按照产品的习惯要求采用不同的方法,例如结构体中直接填写相应的参数,或者增加配置文件的方法。启动参数也可以直接配置在TEE OS 中,以 RK3568 平台为例(详见 `base/tee/tee_os_kernel/kernel/arch/aarch64/plat/rk3568/machine.c`)。
|
||||
启动参数的适配方法可以按照产品的习惯要求采用不同的方法,例如结构体中直接填写相应的参数,或者增加配置文件的方法。启动参数也可以直接配置在TEEOS 中,以 RK3568 平台为例(详见 `base/tee/tee_os_kernel/kernel/arch/aarch64/plat/rk3568/machine.c`)。
|
||||
|
||||
### TEE ATF适配指导
|
||||
|
||||
- ARM从v6架构开始就引入了TrustZone技术,将AMR核的工作状态分为安全态和非安全态两种,在芯片级别对硬件资源提供保护和隔离。在实现了BL32(即安全OS)的平台,需要在ATF中添加SPD模块来实现安全世界和非安全世界的切换,对于teeos,我们提供了teed模块,位于 `base/tee/tee_os_framework/sample/teed`。**按照ATF的编译框架,在ATF根目录下的Makefile里面添加如下选项可以使能teed**。
|
||||
- ARM从v6架构开始就引入了TrustZone技术,将AMR核的工作状态分为安全态和非安全态两种,在芯片级别对硬件资源提供保护和隔离。在实现了BL32(即安全OS)的平台,需要在ATF中添加SPD模块来实现安全世界和非安全世界的切换,对于TEEOS,我们提供了teed模块,位于 `base/tee/tee_os_framework/sample/teed`。**按照ATF的编译框架,在ATF根目录下的Makefile里面添加如下选项可以使能teed**。
|
||||
```makefile
|
||||
SPD := teed
|
||||
```
|
||||
- 同时,TEE OS 需要适配 ATF 中的 teed,适配代码位于`base/tee/tee_os_kernel/kernel/arch/aarch64/trustzone/spd/teed`目录中,此代码开发者适配新平台时无需修改。
|
||||
- 另外,SMC在TEEOS中负责CA和TA的交互、ATF和TEE的交互,TEE OS的适配需要关注SMC通信参数。下表进行了具体介绍。
|
||||
- 同时,TEEOS 需要适配 ATF 中的 teed,适配代码位于`base/tee/tee_os_kernel/kernel/arch/aarch64/trustzone/spd/teed`目录中,此代码开发者适配新平台时无需修改。
|
||||
- 另外,SMC在TEEOS中负责CA和TA的交互、ATF和TEE的交互,TEEOS的适配需要关注SMC通信参数。下表进行了具体介绍。
|
||||
|
||||
**表 3** teed smc id管理列表
|
||||
|
||||
@@ -433,14 +433,14 @@ uint64_t get_teeos_size(void)
|
||||
</table>
|
||||
|
||||
#### 兼容opteed
|
||||
对于无法修改ATF的单板,TEE OS提供了兼容opteed的方案,具体适配代码位于 `base/tee/tee_os_kernel/kernel/arch/aarch64/trustzone/spd/opteed` 目录中。
|
||||
对于无法修改ATF的单板,TEEOS提供了兼容opteed的方案,具体适配代码位于 `base/tee/tee_os_kernel/kernel/arch/aarch64/trustzone/spd/opteed` 目录中。
|
||||
另外,若需要使能新的 TEED,可以在`spd`目录下添加相应 TEED 的适配代码,并且在 `base/tee/tee_os_kernel/config.mk` 中更新 CHCORE_SPD 配置.
|
||||
|
||||
```makefile
|
||||
CHCORE_SPD=new_teed
|
||||
```
|
||||
|
||||
## TEE OS镜像的构建指导
|
||||
## TEEOS镜像的构建指导
|
||||
|
||||
以RK3568芯片为例,TEEOS的二进制文件(bl32.bin)被打包在uboot.img中,以下是构建TEEOS镜像的指导。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user