3

有人可以向我解释一下,在 CPU 进入安全模式后,(监控程序设置NS = 0),安全操作系统是如何安排的?是不是现在 CPU 处于安全模式,计时器滴答中断将由安全操作系统而不是非安全世界处理?

4

1 回答 1

2

监控模式设置NS=0将设置从监控模式可见的 CP15 寄存器。请参阅:监控模式 IFAR/IFSR ...。当监控模式切换到其他模式 NS=0,则该模式为安全世界版本;这意味着存储的 CP15 寄存器是安全版本。该位在总线周期NS上也是清零的。

如果NS=1置位,则当监听模式切换时,banked CP15 寄存器为普通版本;主要是普通世界的MMU会被激活。此外,该NS位在总线周期上设置。TZ 与管理程序

如何安排安全操作系统?

监控模式执行此操作。( SCRcp15 c1, c1, 0) 具有确定是否使用监视向量表当前 CPU 世界(安全正常)的位。如果你在一个正常的世界里,你希望一个计时器来打断那个世界,你需要监控模式来处理它。

您可以通过两种可能的方式设置监控模式,

  1. 将所有安全中断设置为FIQ.
  2. 捕获所有要监视的中断。

推荐第一选择。在这种模式下,监控代码必须确保SCR#FIQ(位 2)在正常世界中设置,但在安全世界中清晰。(SCR#IRQ位 1)将在运行安全操作系统时设置(如果您希望正常中断来中断安全操作系统)并在正常世界中清除。

因此,当安全计时器有FIQ中断时,它会陷入监视模式,该模式执行世界切换ref1并运行安全 OS计时器代码。此安全计时器可能会导致安全世界重新安排时间。正常安全的世界调度程序交互的方式取决于软件。即,没有通用的答案。这取决于,

  1. 监控模式
  2. 安全的操作系统。
  3. 正常世界的操作系统。

主要是ARM TrustZone不自己处理安全 OS调度。您需要编写使用提供的原语来实现这一点的软件。 ARM TrustZone仅有助于实现它的不同方式。TrustZone 白皮书

请参阅:如何为 TrustZone 开发程序以了解一些替代设置。
Ref1:世界切换为所有使用的模式保存/恢复所有通用 CPU 寄存器。即,在普通安全的世界切换上,必须将 R0-R15(和所有银行副本)加上可能的 NEON/VFP 保存到普通世界商店。同样,必须为安全世界重新加载寄存器。监控模式sp为访问这些世界上下文提供了一个很好的锚点。监控模式sp应在安全启动期间设置,在正常之前世界初始化。这很像传统的操作系统上下文切换。( SCR#NSbit 0) 设置得当;您可以在寄存器切换之前或之后执行此操作,具体取决于您保存寄存器的方式(即,通过模式切换或通过srs)。

于 2014-03-26T18:46:50.507 回答