210板uboot启动过程详解

一、start.S
cpu/s5pc11x/start.S


1、入口:
.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


2、执行reset
reset:
msr cpsr_c, #0xd3  @ I & F disable, Mode: 0x13 - SVC


1)初始化level 2 chache
bl disable_l2cache //关闭level 2 cache
bl set_l2cache_auxctrl_cycle
bl enable_l2cache




2)关闭level 1 指令/数据cache
Invalidate L1 I/D




3)disable MMU stuff and caches




4)判断210的启动方式
r2 = 210的启动方式


cmp r2, #0x2 @ 2KB 5-cycle
moveq r3, #BOOT_NAND


cmp     r2, #0xc
moveq   r3, #BOOT_MMCSD


---------------------------------------------------------------
二、底层硬件初始化--lowlevel_init
board/samsung/gec210(smdkc110)/lowlevel_init.S

bl lowlevel_init
1、关闭看门狗
2、init system clock 
3、Memory initialize --->初始化内存
4、init UART  ---》输出"O"
5、init tzpc
6、bl nand_asm_init  --->初始换nand flash
7、输出一个“K”




---------------------------------------------------------------
三、回到start.S,准备进入C环境


1、确定从nand启动,将uboot的整体(BL2)拷贝到DDR2
nand_boot:
mov r0, #0x1000
bl copy_from_nand  //将uboot的整体(BL2)拷贝到DDR2
b after_copy




2、enable_mmu:


3、stack_setup


4、PC = start_armboot() // C函数的入口地址


ldr pc, _start_armboot


_start_armboot:
.word start_armboot --->C函数的入口地址(函数名)
---------------------------------------------------------------
四、进入C环境
start_armboot()
{
1、uboot自身所使用的数据结构(gd_t和bd_t)的初始化


//LCD初始化,并显示一个图片。


2、循环
//等待bootdelay时间,如果时间没到就进入uboot的命令
//如果时间到,就自动加载操作系统
for (;;) {
main_loop (); 
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值