2

我正在研究具有 ARM1176JZF-S 处理器的树莓派 B+ 上的信任区扩展。根据 arm11 上的给定文档,安全世界、非安全(NS)世界和监控模式分别有 3 个异常向量表。c12 寄存器将保存安全和 NS 世界异常向量表基地址的基地址。

我将这两个地址都添加到了相应世界(安全/NS)中的 c12 寄存器中。我在两个世界中都尝试了 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

请让我知道这里的问题。

4

1 回答 1

1

矢量基地址寄存器 (VBAR) 的低五位定义为“res0”,这意味着它们将被忽略并视为零。因此,您的向量表必须是 32 字节对齐的。通过以下方式实现:

    .align 5
_ns_start:
    ldr pc, ns_Reset
    ...
于 2014-11-10T09:41:27.423 回答