Trusty OS (TOS) 分区

Trusty 是 Google 的可信执行环境 (TEE) 操作系统实现,与 Android 并行运行。本文列出了使用 Arm Trustzone 技术提供 TEE 的设备需遵循的规范。如果您的 ARM 设备将 Trusty 用作安全操作系统解决方案,则应按照下面几个部分所述的方式实现引导加载程序。

初始化 TOS

如需加载并初始化 Trusty 操作系统 (TOS),引导加载程序应:

  • 设置并配置所有可用的 RAM。
  • 至少初始化 1 个串行端口。
  • 验证 TOS 映像的签名。
  • 将 TOS 加载到 RAM 中(不支持通过闪存或 TCM 执行)。
  • 设置状态和寄存器后跳转到 TOS 映像中的第一条指令,如下所述。

跳转到 TOS 映像

请在入口配置以下状态:

  • 将 MMU 设为已关闭
  • Flush 并关闭数据缓存(指令缓存可保持开启或关闭)
  • 将所有中断(IRQ 和 FIQ)设为已停用
  • 在 ARMv7 上,将 CPU 设为 SVC 模式;在 ARMv8 上,将 CPU 设为 EL3 模式
  • 将寄存器配置为以下状态:
    • r0/x0:分配给 TOS 的内存大小。
    • r1/x1:包含平台相关启动参数的连续内存块的物理地址。此内存块的布局因平台而异。
    • r2/x2:上述内存块的大小。
    • r14/x30:TOS 初始化后(在非安全模式下)要跳转到的返回地址。

在 64 位平台上:

  • 只有 w0-w2 用于参数,所以 x0-x2 应仅包含 32 位值。
  • x30 可以包含一个 64 位值。
  • x0 中的值与 TOS 入口点的基址相加时,结果应为一个 32 位的值。同样,当寄存器 x2 中的大小值与 x1 中的启动参数块的地址相加时,结果也应为一个 32 位的值。

从 TOS 返回

完成初始化后,TOS 会在非安全模式下(SCR.NS 设置为 1)返回到引导加载程序,以便引导加载程序可以继续加载主要操作系统(即 Android)。