在imx6的板子上做了一些试验,以前也写了一些测试代码,https://github.com/shc5840/mx6q-collage-trustzone
好像记得最后是我在uboot以前以安全的状态写了一个while循环,然后切换到非安全模式加载了uboot,启动kernel,
发现非安装状态下当时只能起一个核,多核启动就有问题了,还有就是关于gic中断这边的配置貌似也有点影响。
这里分享一下个人理解的哪些寄存器需要设置:
这里记录一下看的armv7-a的架构文档和cortex-a9的manual文档中提到关于secure和non-secure的知识点
实现安全扩展的cp15寄存器:
cp15的banked寄存器for secure and non-secure:
安全扩展实现cp15访问受限制的寄存器:
.
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