uboot第一阶段

前提:系统启动步骤(uboot 200K)
1、iROM中,先判断Soc是从Nand中启动还是在SD卡启动
2、将BL1、2读进SRAM(96K)中,这是uboot的第一阶段,这阶段uboot第一部分在SRAM中运行,汇编阶段,将uboot
3、将BL3读进SRAM中,这是uboot的第二阶段,C阶段,初始化好DRAM,此时的阶段uboot第二部分已经在DRAM运行了,准备将整个uboot和OS读进SDRAM中
*************************************************uboot第一阶段**********************************************************
第一阶段: 汇编阶段
在SRAM中
注重Soc内部
****************************************************************************************************************************
注:uboot第一阶段
****************************************************************************************************************************
第一阶段开始正式分析:
.word 0x2000\.word 0x0\.word 0x0\.word 0x0 //开头需要16个字节做校验头,先用16字节填充SD卡或者Nand镜像
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
}
.balignl 16,0xdeadbeef //让当前地址对齐
_TEXT_BASE: //Makefile中会产生这个uboot的链接地址c3e00000
.word TEXT_BAS
CFG_PHY_UBOOT_BASE // uboot在DDR中的物理地址33e00000
msr cpsr_c //设置CPU为SVC模式
bl disable_l2cache //禁止L2 cache,具体意思可以先不理会
bl set_l2cache_auxctrl //L2 cache相关初始化
bl enable_l2cache //使能L2 cache
moveq   r3, #BOOT_MMCSD //保存SOC是从什么地方启动的
ldr sp, =0xd0036000 //设置栈,二层调用的话,防止LR丢失,先将LR入栈,跳转后就压栈
sub sp, sp, #12
mov fp, #0
lowlevel_init //跳转到lowlevel_init
str r1, [r0, #WSPR] //关看门狗
str r1, [r0, #WSPR]

ldr r0, =OMAP2420_SDRC_BASE 电锁存
ldr r1, =0x00000010
str r1, [r0, #0x10]

bic r1, pc, r0 //用来获取当前运行的地址
ldr r2, _TEXT_BASE //加载链接地址到r2,最后比较r1和r2是否相等,用于判断是冷启动还是热启动









































 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值