Uboot启动ARM的start.s分析

Uboot启动ARM的start.s分析

    Uboot中,第一个启动文件是位于CPU/{architecture}目录下的start.s,以ARM720T为例,简单看看uboot的启动过程

 

_start: b reset
 ldr pc, _undefined_instruction
 ldr pc, _software_interrupt
 ldr pc, _prefetch_abort
 ldr pc, _data_abort
 ldr pc, _not_used
 ldr pc, _irq
 ldr pc, _fiq

_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

 

_start是整个程序的入口,他是ARM体系结构中的reset中断,可以看到,在reset中断向量中是一条跳转语句,b reset

   reset处理的流程如下:

  1. 将CPU设置为SVC32模式
  2. 如果没有定义了CONFIG_SKIP_LOWLEVEL_INIT,那么将忽略对cpu_init_crit,cpu_init_crit同样也是定义在start.s中.cpu_init_crit针对不同的处理器做的工作是不一样的.相关的宏定义有CONFIG_IMPA7,CONFIG_EP7312,CONFIG_ARMADILLO,CONFIG_NETARM,CONFIG_S3C4510B,CONFIG_INTEGRATOR,CONFIG_ARCH_INTEGRATOR.
  3. 接下来就是uboot的relocate,如果定义了CONFIG_SKIP_RELOCATE_UBOOT,uboot的relocate
  4. 初始化堆栈指针,这是调用函数的基础,在第二步中虽然调用了cpu_init_crit,但该函数使用汇编编写,没有进行堆栈操作.同时,ARM体系结构使用LR保存函数调用返回地址.所以可以在堆栈初始化前调用.
  5. 清除BBS段内容
  6. 调用start_armboot,进入C语言处理程序

同时start.s中包含对于中断服务程序的定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值