ARM TrustZone - 安全和非安全操作系统中调度程序的行为

时间:2014-03-26 11:24:08

标签: arm trust-zone

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

1 个答案:

答案 0 :(得分:1)

监控模式设置NS=0将设置CP15寄存器从监控模式中可见。见:monitor mode IFAR/IFSR...。当监控模式切换到另一种模式 NS=0时,该模式为安全世界版本;这意味着存储的CP15寄存器是安全版本。此外,总线周期上的NS位清零。

如果设置了NS=1,那么当监控模式切换时,存储的CP15寄存器是正常版本;主要是正常世界MMU将是活跃的。此外,{em}总线周期上设置了NS位。 TZ vs hypervisor

  

如何安排安全操作系统?

监控模式可以做到这一点。 SCR(cp15 c1,c1,0)有一些位,用于确定 monitor 向量表是使用还是当前CPU世界( secure < / em>或正常)。如果您处于正常世界并且希望计时器中断该世界,则需要监控模式来处理它。

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

  1. 将所有安全中断设为FIQ
  2. 捕获所有要监控的中断。
  3. 建议首选。在此模式下,监视器代码必须确保在正常世界中设置SCR#FIQ(位2),但在安全中清除 em>世界。运行安全操作系统时将设置SCR#IRQ(位1)(如果您希望正常中断中断安全操作系统)并在正常世界中清除

    因此当安全计时器有一个FIQ中断时,它会陷入监视模式,该模式执行世界开关 ref1 和运行安全操作系统计时器代码。此安全计时器可能会导致安全世界重新安排。 普通安全世界调度程序交互的方式取决于软件。即,没有通用的答案。这取决于,

    1. 监控模式
    2. 安全操作系统。
    3. 正常世界操作系统。
    4. 主要是 ARM TrustZone 本身不处理安全操作系统调度。您需要编写使用提供的原语来实现此功能的软件。 ARM TrustZone 仅促进实现它的不同方式。 TrustZone Whitepaper

      有关其他设置,请参阅:How to develop programs for TrustZone Ref1:世界开关为所有使用的模式保存/恢复所有通用CPU寄存器。即,在正常安全世界交换机上,R0-R15(以及所有库存副本)加上可能的NEON / VFP必须保存到正常世界< / em>商店。同样,必须为安全世界重新加载寄存器。监控模式sp为访问这些世界上下文提供了良好的锚点。在正常世界初始化之前,应在安全启动期间设置监控模式sp。这很像传统的OS上下文切换。 SCR#NS(位0)设置正确;您可以在寄存器切换之前或之后执行此操作,具体取决于您保存寄存器的方式(即,通过模式切换或srs)。