2014-03-26 55 views

回答

1

监视器模式设置NS=0会将CP15寄存器设置为从监视器模式可见。请参阅:monitor mode IFAR/IFSR...。当监控模式切换到另一模式NS=0,那么该模式是安全世界版本;这意味着分区CP15寄存器是安全版本。 总线周期也清除NS位。

如果NS=1被设置,则当监视模式开关,编组CP15寄存器是正常版本;主要是正常世界MMU将被激活。此外,NS位设置为总线周期TZ vs hypervisor

如何安全OS被定?

监视模式执行此操作。所述SCR(CP15 C1,C1,0)具有确定监视器向量表是否使用位当前CPU世界(安全正常)。如果您处于正常的世界并且您希望定时器打断该世界,您需要监视器模式来处理它。

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

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

建议您首选。在这种模式下,显示器的代码必须确保SCR#FIQ(位2)设置在正常的世界中,但在安全世界中清除。在运行安全操作系统时(如果想让正常的中断来中断安全操作系统),将会设置SCR#IRQ(位1),并在正常的世界中清除。

所以当安全定时器具有FIQ中断,它捕捉到监控模式,它做了世界开关REF1和运行安全的OS计时器代码。这安全计时器可能会导致安全的世界重新安排。世界日程安排程序互相交互的方式取决于软件。也就是说,没有通用的答案。这取决于,

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

主要ARM的TrustZone本身并不处理安全的OS调度。你需要编写使用提供的原语来实现这个功能的软件。 ARM TrustZone仅有助于实现它的不同方式。 TrustZone Whitepaper

参见:How to develop programs for TrustZone的一些替代设置。
Ref1:A 世界开关保存/恢复所有通用CPU寄存器使用模式。即,正常安全世界开关,R0-R15(和所有银行拷贝)加上可能NEON/VFP必须保存到正常世界存储。同样,必须重新加载寄存器以用于安全世界。监视器模式sp为访问这些世界范围提供了良好的锚点。监视模式sp应该在安全启动期间在世界初始化之前被设置,在正常世界初始化之前。这很像传统的OS上下文切换。 SCR#NS(位0)被适当设置;您可以在寄存器切换之前或之后执行此操作,具体取决于您如何保存寄存器(即按模式开关或按srs)。

+0

以上关于通过Monitor将模式从NonSecure世界切换到Secure World的说明适用于两个世界都运行在同一个物理内核上的情况。这种理解是否正确?如果是多核环境,如果我们有一个TEE专用内核(假设安全操作系统是非SMP),另一个是非安全世界的核心,那么解释中解释的工作原理是否会发生变化?我阅读了ARM的白皮书 - “使用TZ构建安全系统”(第5.4节)。在非安全操作系统(在TEE以外的核心运行)中进行SMC呼叫时会发生什么情况? – Souvik

+0

当然可以。如果您的问题是如何在第二个核心上安排'安全操作系统',那么这将毫无意义。这是你的问题吗?在这种情况下,它与AMP(非对称多处理)相同。不需要昂贵的TZ CPU,只需要支持TZ的CPU(Cortex-R等)。 –