我正在使用带有ARM1176JZF-S处理器的raspberry pi B +上的信任区域扩展。根据arm11上的给定文档,将有3个异常向量表,每个用于安全世界,非安全(NS)世界和监视器模式。并且c12寄存器将保存安全和NS世界异常向量表基址的基址。
我将这两个地址添加到相应世界中的c12寄存器(Secure / NS)。我在两个世界都尝试过SWI(svc)。我发现它在安全的世界中运行良好,但在NS世界中,控件转到SWI的NS重置处理程序而不是SWI处理程序。 我使用了以下命令:
For secure world :
LDR r0, =_start //_start - base address of secure vector table
MCR p15, 0, r0, c12, c0, 0
For Non-secure World :
LDR r0, =_ns_start //ns_start - base address of non-secure vector table
MCR p15, 0, r0, c12, c0, 0
这是我的代码:https://github.com/avk7vk/arm_bare_metal/tree/master/trustzone-smc
请告诉我这里的问题。
答案 0 :(得分:1)
向量基址寄存器(VBAR)的前五位定义为“res0”,这意味着它们将被忽略并视为零。因此,矢量表必须是32字节对齐的。达到:
.align 5
_ns_start:
ldr pc, ns_Reset
...