• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Tzdriver驱动
2
3## 简介
4
5Tzdriver是部署在REE侧的内核驱动,支持REE和TEE之间通信。Tzdriver处理来自于Tee Client的命令,发送指令从REE切换到TEE。Tzdriver通过管理共享内存,支持REE和TEE之间共享数据。
6
7Tzdriver驱动包含如下主要模块:
8
9smc:发送smc指令,将CPU从REE侧切换到TEE侧运行。
10
11session_manager:管理REE与TEE之间的通信会话。
12
13mailbox:REE和TEE之间通过mailbox共享数据。
14
15cmd_monitor:监控smc指令的运行,提供超时检测机制。
16
17tzdebug:创建debugfs调试节点,方便开发人员调试TEE功能。
18
19tlogger:TEE日志驱动模块,支持TEE日志记录和打印。
20
21图1 Tzdriver驱动架构图
22
23![](figures/tzdriver.drawio.png)
24
25## 目录
26
27```
28/kernel/linux/common_modules/tzdriver
29├── core
30│   ├── cmdmonitor.c                # smc指令执行监控
31    ├── gp_ops.c                    # GP TEE规范处理逻辑
32    ├── mailbox_mempool.c           # REE和TEE共享内存管理
33    ├── session_manager.c           # CA访问TA的session管理
34    ├── smc_smp.c                   # 发送smc指令切换到TEE
35    ├── tzdebug.c                   # 调试模块
36├── tlogger                         # TEE日志驱动
37```
38
39## 配置选项
40
41如果要使能Tzdriver驱动,需要修改linux内核代码仓中设备的defconfig文件,增加Tzdriver的配置选项:
42
43```
44#
45# TEEOS
46#
47CONFIG_TZDRIVER=y
48CONFIG_CPU_AFF_NR=1
49CONFIG_KERNEL_CLIENT=y
50CONFIG_TEELOG=y
51CONFIG_PAGES_MEM=y
52CONFIG_THIRDPARTY_COMPATIBLE=y
53```
54
55各选项其含义如下表所示:
56
57**表 1** 配置选项说明
58
59| 参数                         | 说明                                                         |
60| ---------------------------- | ------------------------------------------------------------ |
61| CONFIG_TZDRIVER              | Tzdriver模块开关。                                             |
62| CONFIG_CPU_AFF_NR            | CA绑核功能,非零值代表限制仅cpuid小于CONFIG_CPU_AFF_NR的CPU可以进入TEE,0代表无限制,当前只支持在0核运行,所以值为1。 |
63| CONFIG_KERNEL_CLIENT         | 支持内核CA选项。                                               |
64| CONFIG_TEELOG                | TEE日志开关,建议开启。                                    |
65| CONFIG_PAGES_MEM             | TEE日志内存管理,建议开启。                                |
66| CONFIG_THIRDPARTY_COMPATIBLE | 兼容第三方opteed的适配,例如适配RK3568芯片需要开启此选项。     |
67
68## 编译命令
69
70Tzdriver驱动跟随kernel一起编译,以rk3568为例,可以单独编译boot_linux.img,编译命令如下
71
72```
73./build.sh --product-name rk3568 --ccache --build-target kernel --gn-args linux_kernel_version=\"linux-5.10\"
74```
75
76## 相关仓
77
78[tee_client](https://gitee.com/openharmony/tee_tee_client)
79