u-boot 第一阶段
u-boot 第一阶段
代码位置 cpu/arm920t/start.S
流程分析:
1.保存一些全局变量,用于启动程序将代码从flash拷贝到RAM或其他使用。有一些变量的值是通过链接脚本得到的,如
TEXT_BASE 位于board\2440\config.mk 中
__bss_start、_end 位于board\2440\u-boot.lds 中
2.设置CPU保护模式
3.关闭看门狗
4.屏蔽所有中断
5. 执行cpu_init_crit 关闭 I/D Cache 、MMU
调用lowlevel_init 位置 :board\2440\lowlevel_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 仿照 board\2440\smdk2440.c board_init 为了由12M转化为400M 加快运行速度
8.把FLASH中的u-boot代码移到RAM中
9.初始化内存中bss段中数据为0 bss段保存 静态变量、全局变量
10.跳转到 _start_armboot u-boot 第二阶段初始化烧写FLASH、串口、网卡、USB等设备以方便开发及启动内核。