【问题标题】:Relocate the ARM exception vectors?重新定位 ARM 异常向量?
【发布时间】:2012-01-23 09:55:40
【问题描述】:

如何重新定位 ARM 异常向量

基本上,我需要能够以某种方式重新映射它们,因此当 ARM 内核尝试执行向量时,它应该执行存储在内核 RAM 位而不是 ROM 中的自定义异常向量 位于0x0。那可能吗?还是我打算将中断从 ROM 路由到内核?

那么本质上,有没有办法告诉 ARM 内核,“这里是你的向量表的新地址”?我知道你可以启动 CPU在高矢量模式下,但这不是我想要的。我需要能够动态地将向量基数设置为自定义地址。

【问题讨论】:

    标签: arm interrupt-handling armv6


    【解决方案1】:

    这高度依赖于您正在使用的内核。

    Cortex-M3 芯片可以使用系统控制块中的向量表偏移寄存器 (VTOR) 更改基地址。某些实现可能会限制可能的地址。

    在“传统”芯片(ARM7/9、Cortex-A/R)中,我认为没有一个允许您指定任意基数,尽管它们中的大多数可以在 00000000 和 FFFF0000 之间切换,少数允许使用“RAM 的开始”地址。

    但是,如果芯片具有 MMU,您通常可以在 FFFF0000 映射 RAM 页面并将您的处理程序复制到那里。我相信这就是 Linux 所做的。

    【讨论】:

    • 对于 armv7(Cortex-A7、-A8 等)在移动异常表的架构参考手册中搜索 VBAR、MVBAR 和 HVBAR。
    【解决方案2】:

    此外,如果你的处理器有安全扩展,你可以使用 VBAR(Vector Base Address Register)

    MCR p15, 0, <Rt>, c12, c0, 0

    请参阅 ARM 架构参考手册中的 B4.1.156。

    【讨论】:

      【解决方案3】:

      对于 cortex-A9 处理器,这可以通过使用 Cp15 协处理器寄存器中的 VBAR 寄存器来完成。向量基地址寄存器的目的是保存监视器异常向量的基地址。

       MRC p15, 0, <Rd>, c12, c0, 0    ; Read Secure or Non-secure Vector Base Address Register
       MCR p15, 0, <Rd>, c12, c0, 0    ; Write Secure or Non-secure Vector Base Address Register
      

      【讨论】:

        【解决方案4】:

        系统寄存器 VBAR 指定向量表的基地址。 VBAR 可以从 PL1 或更高版本更改。与大多数系统寄存器一样,VBAR 在实施安全扩展 (TrustZone) 时也会被存储。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          • 2014-08-11
          • 2021-02-08
          • 1970-01-01
          相关资源
          最近更新 更多