有人可以向我解释一下,在CPU进入安全模式后,(监控程序设置NS = 0
),安全操作系统如何安排?
是不是现在CPU处于安全模式,定时器滴答中断将由安全操作系统而不是非安全世界处理?
答案 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>或正常)。如果您处于正常世界并且希望计时器中断该世界,则需要监控模式来处理它。
您可以通过两种可能的方式设置监控模式,
FIQ
。建议首选。在此模式下,监视器代码必须确保在正常世界中设置SCR#FIQ
(位2),但在安全中清除 em>世界。运行安全操作系统时将设置SCR#IRQ
(位1)(如果您希望正常中断中断安全操作系统)并在正常世界中清除
因此当安全计时器有一个FIQ
中断时,它会陷入监视模式,该模式执行世界开关 ref1 和运行安全操作系统计时器代码。此安全计时器可能会导致安全世界重新安排。 普通和安全世界调度程序交互的方式取决于软件。即,没有通用的答案。这取决于,
主要是 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
)。