ARM的启动过程是什么?

Fen*_*ang 53 boot arm bootloader

我们知道,对于X86架构:按下电源按钮后,机器开始执行0xFFFFFFF0处的代码,然后它开始在BIOS中执行代码以进行硬件初始化.BIOS执行后,它使用bootloader将操作系统映像加载到内存中.最后,操作系统代码开始运行.对于ARM体系结构,使用后的启动过程按电源按钮是什么?谢谢!

Igo*_*sky 61

目前,ARM体系结构中有两种异常模型(重置被视为一种异常):

经典型号,用于预Cortex芯片和当前的Cortex-A/R芯片.在其中,0的内存包含几个异常处理程序:

 Offset  Handler
 ===============
 00      Reset 
 04      Undefined Instruction
 08      Supervisor Call (SVC)
 0C      Prefetch Abort
 10      Data Abort
 14      (Reserved)
 18      Interrupt (IRQ)
 1C      Fast Interrupt (FIQ)
Run Code Online (Sandbox Code Playgroud)

当异常发生时,处理器只是从特定偏移量开始执行,因此通常该表包含代码中进一步处理完整处理程序的单指令分支.典型的经典矢量表如下所示:

00000000   LDR   PC, =Reset
00000004   LDR   PC, =Undef
00000008   LDR   PC, =SVC
0000000C   LDR   PC, =PrefAbort
00000010   LDR   PC, =DataAbort
00000014   NOP
00000018   LDR   PC, =IRQ
0000001C   LDR   PC, =FIQ
Run Code Online (Sandbox Code Playgroud)

在运行时,向量表可以重新定位到0xFFFF0000,这通常实现为紧耦合的内存范围,以实现最快的异常处理.但是,上电复位通常从0x00000000开始(但有些芯片可以通过处理器引脚设置为0xFFFF0000).

新的微控制器模型用于Cortex-M系列芯片.在那里,0处的向量表实际上是向量(指针)的表,而不是指令.第一个条目包含SP寄存器的启动值,第二个条目包含复位向量.这允许直接在C中写入重置处理程序,因为处理器设置堆栈.同样,该表可以在运行时重新定位.Cortex-M的典型向量表如下所示:

__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     MemManage_Handler         ; MPU Fault Handler
                DCD     BusFault_Handler          ; Bus Fault Handler
                DCD     UsageFault_Handler        ; Usage Fault Handler
                [...more vectors...]
Run Code Online (Sandbox Code Playgroud)

请注意,在现代复杂芯片(如OMAP3或Apple A4)中,执行的第一段代码通常不是用户代码,而是片上Boot ROM.它可以检查各种条件以确定从何处加载用户代码以及是否根本加载它(例如,它可能需要有效的数字签名).在这种情况下,用户代码可能必须符合不同的启动约定.

  • 这是一个很好而全面的答案,但有一个不正确的说法:在ARM处理器上支持"高向量"(实际上是ARM11以上),上电复位(以及随后由软件更改的异常)使用位于_either_的向量表0x00000000或0xffff0000.通过配置输入信号做出决定,因此可以在不同的SoC之间变化.例如参见http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/Bgbciiaf.html (7认同)