u-boot第一阶段主要功能:分析cpu/arm920t/start.S
跳转到reset:
a.设置cpu为SVC管理模式
b.关闭看门狗,不关看门狗会引起板子重启
c.屏蔽所有中断
d.初始化内存SDRAM,首先需要判断是从flash启动,还是通过仿真器直接从RAM启动
e.设置栈、初始化时钟,设置好栈,为运行C代码做准备
此时栈空间示意图如下:
f.从flash拷贝代码到SDRAM,即u-boot第二阶段的代码
CopyCode2Ram 中有个巧妙的方法判断是从nandflash启动还是从norfalsh启动
g.清零bss段,调用_start_armboot,清零bss段,清零未初始化的全局变量,避免使用全局变量时出错。
跳转到第二阶段程序入口执行,第一阶段主要是初始化一些硬件,为后面做准备。功能比较简单。较复杂的功能放到第二阶段,用C代码来实现。第二阶段主要实现开发板的功能,烧写flash、网卡、USB、串口等,然后从flash读出内核,启动内核。
第二阶段代码分析见下一篇。