一、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 ();
}
}
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 ();
}
}