Trusty 是 Google 的可信执行环境 (TEE) 操作系统实现,在 Android 之外独立运行。本文介绍了使用 Arm Trustzone 技术提供 TEE 的设备需遵循的规范。如果您的 ARM 设备将 Trusty 用作安全操作系统解决方案,则应按照下面几个部分所述的内容实现引导加载程序。
初始化 TOS
如需加载并初始化 Trusty 操作系统 (TOS),引导加载程序应:
- 设置并配置所有可用的 RAM。
- 至少初始化 1 个串行端口。
- 验证 TOS 映像的签名。
- 将 TOS 加载到 RAM 中(不支持通过闪存或 TCM 执行)。
- 在按下方说明设置完状态和寄存器后,跳转到 TOS 映像中的第一条指令。
调用 TOS 映像
请在入口配置以下状态:
- 将 MMU 设为已关闭
- 清空并关闭数据缓存(可以开启或关闭指令缓存)
- 将所有中断(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 位值。被添加到x1
中的启动参数块的地址中时,寄存器 x2 中的大小值也是如此。
从 TOS 返回
完成初始化后,TOS 会在非安全模式下(SCR.NS 设置为 1
)返回到引导加载程序,以便引导加载程序可以继续加载主要操作系统(即 Android)。