天天看点

TrustZone 寄存器相关配置

在imx6的板子上做了一些试验,以前也写了一些测试代码,https://github.com/shc5840/mx6q-collage-trustzone

好像记得最后是我在uboot以前以安全的状态写了一个while循环,然后切换到非安全模式加载了uboot,启动kernel,

发现非安装状态下当时只能起一个核,多核启动就有问题了,还有就是关于gic中断这边的配置貌似也有点影响。

这里分享一下个人理解的哪些寄存器需要设置:

TrustZone 寄存器相关配置

这里记录一下看的armv7-a的架构文档和cortex-a9的manual文档中提到关于secure和non-secure的知识点

实现安全扩展的cp15寄存器:

TrustZone 寄存器相关配置

cp15的banked寄存器for secure and non-secure:

TrustZone 寄存器相关配置
TrustZone 寄存器相关配置

安全扩展实现cp15访问受限制的寄存器:

TrustZone 寄存器相关配置

.

TrustZone 寄存器相关配置

cpu在non-secure时要进入monitor模式可以通过interrput 、abort、smc命令

cpu在secure时进入monitor模式可以直接设置cpsr寄存器

目前理解的设置有

①设置cpu模式,强制进入monitor模式

②设置SCR寄存器,0b110000  AW-1 FW-1 EA-0 FIQ-0 IRQ-0 NS-0

③设置MVBAR

④设置NSACR,0b1110011111111111111 Bit[18]NS_SMP-1,Bit[17]TL-1,Bit[16]PLE-1, Bit[15]NSASEDIS-0,Bit[14]NSD32DIS-0, Bit[0-13] coprocessor - 1( enable 0-13协处理器能够在non-secure状态下访问,如果设置enable,就必须设置CPACR寄存器来决定访问的level), Bit19-20这里我没有设置,Bit14和 Bit15必须是相同的值

⑤设置CPACR,0x05555555,bit[31]ASEDIS-0,bit[30]D32DIS-0,cp0-13-b01 

现在发现gic的配置问题,如何在non-secure状态启动kernel

https://gitorious.org/freedreno/kernel-msm/commit/26e44869e1e730ec7434e899dfd5857530b63415

http://blog.csdn.net/crosskernel/article/details/21225591