gpt4 book ai didi

arm - ARM 的启动过程是怎样的?

转载 作者:行者123 更新时间:2023-12-02 21:00:37 27 4
gpt4 key购买 nike

众所周知,对于X86架构:按下电源按钮后,机器开始执行0xFFFFFFF0处的代码,然后开始执行BIOS中的代码以进行硬件初始化。 BIOS 执行后,它使用引导加载程序将操作系统镜像加载到内存中。最后,操作系统代码开始运行。对于ARM架构,使用按下电源按钮后的启动过程是怎样的?谢谢!

最佳答案

目前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)

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

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

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

新的微 Controller 模型用于 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...]

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

关于arm - ARM 的启动过程是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6139952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com