从Cortex A8/DM3730上的特权上下文访问安全(TrustZone)指令的最简单方法



我有一件非常奇怪的事情需要做:访问一些"安全"的指令,这些指令实际上不需要在安全的上下文中完成。简而言之:我需要进入安全模式,但不是因为我想要硬件TPM之类的功能。我只需要访问某些指令,否则我不会有这些指令。

我们在Gumstix Overo FireSTORM COM上做这件事。我的理解是这些引导是安全的,但在某个地方(MLO?u-boot?)它们切换到了非安全模式,但我可能错了。关键是,我们肯定是在非安全(但有特权,请参阅下文)模式下这样做的。

(我写了这个问题,关于直接访问A8分支预测器的GHB/BTB,如果你对我想做的事情感到好奇:直接写入ARM Cortex A8的分支预测器中的全局历史缓冲区(GHB)或BTB?)

现在,所有这些都将在u-boot中完成(我们有Overo FireSTORM COM),所以幸运的是,我有"特权"执行。不用担心。我已经研究了其他StackOverflow问题,但似乎没有任何关于如何确切地进入安全模式的内容。我真正想做的就是访问一些CP15寄存器,然后回到非安全模式(并可能重复这个过程)。

我已经查看了SMC的说明,但我找不到任何关于如何适当地捕获呼叫/呼叫到哪里/如何设置呼叫等的文档。

这些信息在哪里?

概括一下,我想做的是:

FROM PRIVILEGED EXECUTION: 
Do stuff
Tweak GHB // requires secure execution
Do more stuff
Tweak GHB 
Do more stuff
...
...
...
Do stuff

任何帮助都将不胜感激!

多亏了@artlessnoise,我在u-boot源文件中找到了这个文件:/u-boot/arch/arm/cpu/armv7/nonsec_virt.S.

它包含以下代码:

/*
* secure monitor handler
* U-boot calls this "software interrupt" in start.S
* This is executed on a "smc" instruction, we use a "smc #0" to switch
* to non-secure state.
* We use only r0 and r1 here, due to constraints in the caller.
*/
   .align  5
_secure_monitor:
   mrc     p15, 0, r1, c1, c1, 0           @ read SCR
   bic     r1, r1, #0x4e                   @ clear IRQ, FIQ, EA, nET bits
   orr     r1, r1, #0x31                   @ enable NS, AW, FW bits
#ifdef CONFIG_ARMV7_VIRT
   mrc     p15, 0, r0, c0, c1, 1           @ read ID_PFR1
   and     r0, r0, #CPUID_ARM_VIRT_MASK    @ mask virtualization bits
   cmp     r0, #(1 << CPUID_ARM_VIRT_SHIFT)
   orreq   r1, r1, #0x100                  @ allow HVC instruction
#endif
   mcr     p15, 0, r1, c1, c1, 0           @ write SCR (with NS bit set)
#ifdef CONFIG_ARMV7_VIRT
   mrceq   p15, 0, r0, c12, c0, 1          @ get MVBAR value
   mcreq   p15, 4, r0, c12, c0, 0          @ write HVBAR
#endif
   movs    pc, lr                          @ return to non-secure SVC

大概如果我修改了mcr p15指令的掩码,我可以简单地"关闭"移动到不安全模式。然而,这可能会扼杀u-boot。

因此,问题是:我如何设置适当的向量,以便在进行SMC调用时,我跳回到安全模式,并能够进行GHB/BTB修补?

感谢任何其他帮助!

Gumstix上的DM3730是GP(通用)设备,这意味着它禁用了TrustZone。你不可能进入它。

请参阅https://stackoverflow.com/a/8028948/6839

相关内容

  • 没有找到相关文章

最新更新