S5PV210-uboot解析(二)-start.S解析

start.S解析

首先是头文件包含

# include   <config.h>
# include   <version.h>
# if   defined(CONFIG_ENABLE_MMU)
# include   <asm/proc/domain.h>
#endif
# include   <regs.h>
 
#ifndef CONFIG_ENABLE_MMU
#ifndef CFG_PHY_UBOOT_BASE
#define CFG_PHY_UBOOT_BASE CFG_UBOOT_BASE
#endif
#endif

config.h是在配置时生成的文件,里面包含的是linux/autoconf.h,在mkconfig文件中可以看到生成的指令,内部包含板子的型号等参数。
version.h是uboot版本号,由Makefile生成。

asm/proc/domain.h不是uboot的原生目录,是配置时创建的符号链接,实际指向asm-arm/proc-armv/domain.h
regs.h也是配置时生成的,实际为s5pc110.h
上面两个目录这样配置是为了增强可移植性。

接着定义两个宏 CFG_PHY_UBOOT_BASE CFG_UBOOT_BASE 为uboot的物理地址,CFG_UBOOT_BASE地址为0x33e00000

# if   defined(CONFIG_EVT1) && !defined(CONFIG_FUSED)
     .word  0x2000
     .word  0x0
     .word  0x0
     .word  0x0
#endif

宏CONFIG_EVT1已经被定义了,后面定义4个字,由于210是32位,所以一个字就是4个字节。这里定义4个字是为了填充uboot前16字节,因为210sd卡启动时会有16B的校验头,所以这里预先填充16字节的数据,以后计算校验头的时候直接覆盖前16字节。

.globl _start
_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

start.S的开始,这里虽然定义了异常向量表,但是由于uboot主要是用作启动,运行过程很短,所以基本不会用到。
开头的 b reset 跳转到reset,reset就是代码真正有意义的起始位置。 构建异常向量表

.global _end_vect
_end_vect:
 
     .balignl  16 , 0xdeadbeef

这里定义了结束时候的动作, .balignl是为了字节对齐,后面第一个参数表示16字节对齐,第二个参数表示填充内容,当地址偏移4个地址就填充0xdeadbeef,直到地址16字节对齐为止。0xdeadbeef本身没有别的意思,只是十六进制的数刚好组成了两个单词,坏牛肉,意思就是没用的东西,用来填充内存的。

_TEXT_BASE:
     .word   TEXT_BASE

/*
  * Below variable is very important because we use MMU in U-Boot.
  * Without it, we cannot run code correctly before MMU is ON.
  * by scsuh.
  */
_TEXT_PHY_BASE:
     .word   CFG_PHY_UBOOT_BASE
 
.globl _armboot_start
_armboot_start:
     .word _start
 
/*
  * These are defined in the board-specific linker script.
  */
.globl _bss_start
_bss_start:
     .word __bss_start
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值