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)。