如何重新定位ARM异常向量?
基本上,我需要能够以一种方式重新映射它们,所以当ARM核心尝试执行向量时,它应该执行自定义的异常向量,该异常向量存储在内核的RAM位中,而不是存储在位于的0x0 ROM中。这有可能吗?还是我打算将中断从ROM路由到内核?
从本质上讲,是否有一种方法告诉ARM核心,“这里是向量table"?的新地址,我知道您可以在高向量模式下启动CPU,但这不是我要找的。”我需要能够动态地将向量基设置为自定义地址。
发布于 2012-01-23 11:54:31
这在很大程度上取决于你正在工作的核心。
皮质-M3芯片可以使用系统控制块中的向量表偏移寄存器(VTOR)改变基址。有些实现可能限制可能的地址。
在“传统”芯片(ARM7 7/9,Cortex-A/R)中,我认为没有一个芯片允许你指定任意的基座,尽管它们中的大多数可以在00000000和FFFF0000之间切换,少数允许使用“RAM的开始”地址。
但是,如果芯片有MMU,通常可以在FFFF0000上映射RAM页面并在那里复制处理程序。我相信Linux就是这么做的。
发布于 2014-03-26 03:19:33
此外,如果您的处理器有安全扩展,您可以使用VBAR(向量基本地址寄存器)。
MCR p15, 0, <Rt>, c12, c0, 0
参见ARM架构参考手册中的B4.1.156。
发布于 2016-10-26 10:34:50
对于皮层-A9处理器,这可以通过使用Cp15协处理器寄存器中的VBAR寄存器来完成。寄存器的用途是保存Monitor异常向量的基址。
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 Registerhttps://stackoverflow.com/questions/8969792
复制相似问题