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

ARM TrustZone—安全和非安全操作系统中调度程序的行为,arm,trust-zone,Arm,Trust Zone,有人能向我解释一下,在CPU进入安全模式后,(监控程序设置NS=0),安全操作系统是如何安排的? 现在CPU处于安全模式,计时器滴答声中断将由安全操作系统而不是非安全世界处理吗?监视器模式设置NS=0将设置从监视器模式可见的CP15寄存器。请参阅:。当监视器模式切换到另一种模式和NS=0,则该模式为安全世界版本;这意味着存储的CP15寄存器是安全版本。此外,NS位在总线循环中清除 如果设置了NS=1,则当监视器模式切换时,存储的CP15寄存器为正常版本;主要是正常世界MMU将处于活动状态。此外,

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

监视器模式设置
NS=0
将设置从监视器模式可见的CP15寄存器。请参阅:。当监视器模式切换到另一种模式
NS=0
,则该模式为安全世界版本;这意味着存储的CP15寄存器是安全版本。此外,
NS
位在总线循环中清除

如果设置了
NS=1
,则当监视器模式切换时,存储的CP15寄存器为正常版本;主要是正常世界MMU将处于活动状态。此外,
NS
位设置在总线周期上

安全操作系统是如何安排的

监视器模式可以做到这一点。
SCR
(cp15 c1,c1,0)具有确定是使用监控向量表还是当前CPU世界(安全还是正常)的位。如果你在一个正常的世界里,你希望有一个定时器来中断这个世界,你需要监视器模式来处理它

您可以通过两种可能的方式设置监视器模式

  • 将所有安全中断设置为
    FIQ
  • 捕获所有中断以进行监视
  • 推荐首选。在此模式下,监视器代码必须确保在正常情况下设置了
    SCR#FIQ
    (位2),但在安全情况下设置为清除。运行安全操作系统时(如果您希望正常中断来中断安全操作系统),将设置
    SCR#IRQ
    (位1),并在正常情况下清除

    因此,当安全计时器有一个
    FIQ
    中断时,它会进入监控模式,该模式执行一个world switchref1并运行安全操作系统计时器代码。此安全计时器可能会导致安全世界重新调度。正常和安全的世界调度程序的交互方式取决于软件。也就是说,没有通用的答案。这取决于

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

    请参阅:了解一些可选设置。

    参考1:world switch保存/恢复所有使用的模式的所有通用CPU寄存器。也就是说,在普通到安全的世界交换机上,R0-R15(以及所有存储副本)加上NEON/VFP必须保存到普通世界存储中。同样,必须为安全世界重新加载寄存器。监控模式
    sp
    为访问这些世界上下文提供了良好的定位。监控模式
    sp
    应在安全引导期间,在正常世界初始化之前设置。这很像传统的操作系统上下文切换。适当设置了
    SCR#NS
    (位0);您可以在寄存器切换之前或之后执行此操作,具体取决于您保存寄存器的方式(即,通过模式切换或通过
    srs
    )。

    如果两个世界运行在同一物理核心上,则上述关于通过监视器将模式从非安全世界切换到安全世界的解释适用。这种理解正确吗?在多核环境中,如果TEE有一个专用核(假设安全操作系统为非SMP),而非安全世界有另一个核/s,那么您在解释中解释的工作原理是否会改变?我阅读了ARM的白皮书——“使用TZ构建安全系统”(第5.4节)。如果SMC调用是在非安全操作系统(运行在除TEE以外的内核中)中进行的,会发生什么?当然可以。如果你的问题是“安全操作系统”是如何安排在第二个内核上的,那就没有意义了。那是你的问题吗?在这种情况下,它与AMP(非对称多处理)相同。不需要更昂贵的TZ CPU,只需要TZ感知CPU(Cortex-R等)。