uboot启动流程(2)之reset函数源码详解

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

大部分转载了大神的博客: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 行跳转到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值