大部分转载了大神的博客:uboot启动流程(2)之reset函数源码详解_蒋文韬的博客-CSDN博客
部分穿插了对自身平台内容的理解。
=========================================================================
reset 函数源码详解
从 u-boot.lds 中我们已经知道了入口点是 arch/arm/lib/vectors.S 文件中的_start,代码如下:
vectors.S 代码段
38 /*
39 *************************************************************
40 *
41 * Exception vectors as described in ARM reference manuals
42 *
43 * Uses indirect branch to allow reaching handlers anywhere in
44 * memory.
45 **************************************************************
46 */
47
48 _start:
49
50 #ifdef CONFIG_SYS_DV_NOR_BOOT_CFG
51 .word CONFIG_SYS_DV_NOR_BOOT_CFG
52 #endif
53
54 b reset
55 ldr pc, _undefined_instruction
56 ldr pc, _software_interrupt
57 ldr pc, _prefetch_abort
58 ldr pc, _data_abort
59 ldr pc, _not_used
60 ldr pc, _irq
61 ldr pc, _fiq
=========================================================================
(以下是我的平台的代码,上篇有介绍。这里的定义多了一个“_reset_vec”变量,但实际上该变量的值还是“.word reset”)
/*
*************************************************************************
*
* Indirect vectors table
*
* Symbols referenced here must be defined somewhere else
*
*************************************************************************
*/
/*
*use _reset_vec as the variable name because the name "_reset" has been used in other place
*export _reset_vec for fix the vector table after code relocate
*modify by wangwei. 2014-12-01
*/
.globl _reset_vec
.globl _undefined_instruction
.globl _software_interrupt
.globl _prefetch_abort
.globl _data_abort
.globl _not_used
.globl _irq
.globl _fiq
_reset_vec: .word reset
_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq
=========================================================================
第 48 行_start 开始的是中断向量表,其中 54~61 行就是中断向量表,和我们裸机例程里面一样。54 行跳转到

本文详细解读了ARM平台U-Boot启动过程中reset函数的源码,涉及中断向量表、处理器模式设置、向量表重定位等内容,展示了从vector.S到start.S中关键函数的执行流程。

598

被折叠的 条评论
为什么被折叠?



