u-boot1.1.6代码分析

 

 

arm920t启动流程

第一阶段启动过程

start.S
1、设置cpu为管理这个模式
 mrs r0,cpsr
 bic r0,r0,#0x1f
 orr r0,r0,#0xd3
 msr cpsr,r0
2、关闭看门狗
 # define pWTCON  0x53000000
 ldr r0, =pWTCON
 ldr r1, =0
 str r1, [r0]
3、设置时钟分频系数 

     FCLK:HCLK:PCLK = 1:2:4   400 200 100
 # define CLKDIVN 0x4C000014
       /* clock divisor register */

 ldr r0, =CLKDIVN
 mov r1, #3
 str r1, [r0]
4、cpu初始化
 1)初始化缓存
 2)去使能mmu
 3)初始化sdram
5、代码重定位  从U-boot 到 ram(内存)

 设置栈                   //调用c语言时都要先设置栈
 拷贝u-boot代码到内存
6、清除bss段
 设置为0
 ldr r0, _bss_start            /* find start of bss segment */
 ldr r1, _bss_end              /* stop here */
 mov  r2, #0x00000000  /* clear */

 

7、跳转执行
 进行第二部分引导程序 
 ldr pc, _start_armboot


 第二阶段启动过程:

u-boot-1.1.6\lib_arm\board.c

入口函数:start_armboot

u-boot1.1.6代码分析