u-boot 第一阶段

u-boot 第一阶段 

 

  代码位置 cpu/arm920t/start.S 

         

  流程分析:

  

               1.保存一些全局变量,用于启动程序将代码从flash拷贝到RAM或其他使用。有一些变量的值是通过链接脚本得到的,如

 

                      TEXT_BASE 位于board2440config.mk 中  

                    __bss_start、_end  位于board2440u-boot.lds 中  

 

  2.设置CPU保护模式

 

3.关闭看门狗

 

4.屏蔽所有中断

 

5. 执行cpu_init_crit   关闭 I/D Cache 、MMU   

                              调用lowlevel_init  位置 :board2440lowlevel_init.S 

      功能 :初始化SDRAM   为复制FLASH中代码到RAM做准备,FLASH中运行慢,但掉电不丢失,u-boot 就存储在FLASH中

                     we do sys-critical inits only at reboot, not when booting from ram!  意思说 cpu_init_crit  只在上电时执行,而在仿真调试时,代码是由仿真器写到SDRAM中,说明

SDRAM已被初始化,则不需要重复执行!

 

6.  设置栈  为了能调用C函数clock_init 初始化时钟

 

7. 初始化时钟  clock_init  仿照 board2440smdk2440.c board_init    为了由12M转化为400M 加快运行速度

 

8.把FLASH中的u-boot代码移到RAM中

 

9.初始化内存中bss段中数据为0     bss段保存 静态变量、全局变量

 

10.跳转到 _start_armboot  u-boot 第二阶段初始化烧写FLASH、串口、网卡、USB等设备以方便开发及启动内核。

 
 
原文地址:https://www.cnblogs.com/80scd/p/5872176.html