Skip to content

Latest commit

 

History

History
52 lines (36 loc) · 2.81 KB

File metadata and controls

52 lines (36 loc) · 2.81 KB

Replayer

本文档介绍 replayer 的整体架构、构建方式及使用流程。

工作流程

  1. 构建 replayer,将其安装到已安装 OP-TEE OS 的目标 RPi 5。
  2. 将 recording 传输到目标机,进行 replay。
  3. 获取 replay 的计算结果。

整体架构

replayer 包含两部分:运行在 REE (Rich Execution Environment, 此处为 Linux) 下的 Client Application (CA) 和运行在 TEE 下的 Trusted Application (TA)。replayer 本体代码位于 source/replayer 文件夹,部分代码来自 xzl & Heejin 的 baremetal replayer。

此外,本项目的 recorder 集成了在 Linux 内核态下的 replay 功能,可用于功能测试。

重放机制

replayer 通过读取 recording,执行相关函数,重放对应操作。这些函数与操作包括:

  1. replay_access_reg:重放读写寄存器的操作。
  2. replay_map_gpu_mem:重放映射内存的操作。
  3. replay_write_gpu_mem_fromfile:重放向 GPU 内存执行写入的操作,供 job 执行使用。

此外,由于 OP-TEE 的限制,replayer 不能调用内核中的函数,因此也包含了 v3d_mmu_flush_all 等重要函数。

OP-TEE PTA

由于 replayer 涉及许多敏感的读写操作,因此本项目的 TA 以 PTA (Pseudo Trusted Application) 形式实现。PTA 本质上是 OP-TEE OS 暴露给外界的接口,和 OP-TEE OS 拥有相同的权限。参考 https://optee.readthedocs.io/en/latest/architecture/trusted_applications.html。

构建

  1. 构建 optee_client,得到 libteec.so 等文件。参考https://optee.readthedocs.io/en/latest/building/gits/optee_client.html。
  2. 根据 optee_client 的构建产物文件夹,在 source/replayer 构建 replayer。参考https://optee.readthedocs.io/en/latest/building/gits/optee_examples/optee_examples.html。
  3. 将 source/replayer/ta下除pta_replay.h以外的文件复制到 <OPTEE_OS>/core/pta 文件夹,将pta_replay.h复制到 <OPTEE_OS>/lib/libutee/include 文件夹。
  4. 修改<OPTEE_OS>/core/arch/arm/plat-rpi5/conf.mk,加上以下段落:
CFG_REPLAY_PTA ?= y
CFG_SECURE_FIRMWARE_SUPPORT_AARCH64 ?= y
CFG_CORE_ARM64 ?= y
CFG_CORE_LARGE_PHYS_ADDR      ?= y   # make paddr_t 64-bit
CFG_CORE_ARM64_PA_BITS        ?= 40   # ≥ highest PA bit you need
CFG_LPAE_ADDR_SPACE_BITS      ?= 48   # 48-bit VA/PA space
CFG_TEE_RAM_VA_SIZE = 0x00C00000
CFG_CORE_HEAP_SIZE = 1024 * 4096
  1. 再次构建 OP-TEE OS。

可修改 CFG_TEE_TA_LOG_LEVEL 以查看 TA 的日志。

运行

为了运行 OP-TEE 应用,需要向目标机加入库 libteec.so,并新增 OP-TEE 设备树节点。两者在 source/optee 文件夹下均有提供。参考 https://optee.readthedocs.io/en/latest/building/gits/optee_client.html#optee-client 及 https://github.com/nodeax/linux-at91/commit/6f4de47f0265d75a7d3a1335b5191d464d611ebe。