uboot 启动流程:
设置cpu--》关闭看门狗--》屏蔽中断--》设置时钟频率--》设置堆栈--》清除bss段--》 |
设置cpu为svc32模式:
mrs r0,cpsr //mrs:将cpsr中的内容读进r0中 |
该段指令通过设置cpsr中的cpu工作模式位来设定其工作模式,svc32是超级保护模式
关闭看门狗,中断,设置时钟频率
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)//注意一些符号:=,#,[] /* /* FCLK:HCLK:PCLK = 1:2:4 */ |
如果是重启,执行下边部分,正常启动,则不执行
#ifndef CONFIG_SKIP_LOWLEVEL_INIT 跳转到下边部分,执行:清零cache,关闭mmu及caches, #ifndef CONFIG_SKIP_LOWLEVEL_INIT /* /* |
判断是否要重新加载uboot:判断r0与r1中的值是否相等,相等执行stack_setup,不等,执行下边的直到相等
#ifndef CONFIG_SKIP_RELOCATE_UBOOT ldr r2, _armboot_start copy_loop: |
设置堆栈
/* Set up the stack */ clear_bss: clbss_l:str r2, [r0] /* clear loop... */ |
进入step2:board.c
ldr pc, _start_armboot _start_armboot: .word start_armboot |