【一】Uboot-2017.11源码分析启动过程之汇编部分

1 设置中断向量表

CPU在上电后,首先从0x0000 0000地址开始执行程序,uboot编译后,在程序的起始地址处存放了中断向量表,该部分代码为汇编语言写的,代码存储于arch\arm\cpu\armv7目录下的start.S中,如下所示:

/*************************************************************************

 *

 * Startup Code (reset vector)

 *

 * Do important init only if we don't startfrom memory!

 * Setup memory and board specific bits priorto relocation.

 * Relocate armboot to ram. Setup stack.

 *

 *************************************************************************/

.globl reset

         .globl save_boot_params_ret

#ifdefCONFIG_ARMV7_LPAE

         .global        switch_to_hypervisor_ret

#endif

reset:

         /* Allow the board to save importantregisters */

         b       save_boot_params

save_boot_params_ret:

#ifdefCONFIG_ARMV7_LPAE

/*

 * check for Hypervisor support

 */

         mrc   p15,0, r0, c0, c1, 1                @ readID_PFR1

         and    r0,r0, #CPUID_ARM_VIRT_MASK    @ maskvirtualization bits

         cmp   r0,#(1 << CPUID_ARM_VIRT_SHIFT)

         beq    switch_to_hypervisor

switch_to_hypervisor_ret:

#endif

第32行,程序一开始声明了三个全局的三个标签reset,ave_boot_params_ret,switch_to_hypervisor_ret,接着开始执行reset标签处的代码,即b         save_boot_params,跳转至save_boot_params处,如下所示:

/*************************************************************************

 *

 * void save_boot_params(u32 r0, u32 r1, u32r2, u32 r3)

 *     __attribute__((weak));

 *

 * Stack pointer is not yet initialized at thismoment

 * Don't save anything to stack even ifcompiled with -O0

 *

 *************************************************************************/

ENTRY(save_boot_params)

         b       save_boot_params_ret           @ back to my caller

ENDPROC(save_boot_params)

         .weak         save_boot_params

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值