u-boot第一阶段主要功能:分析cpu/arm920t/start.S

跳转到reset:

u-boot分析2:u-boot启动第一阶段

a.设置cpu为SVC管理模式

u-boot分析2:u-boot启动第一阶段

b.关闭看门狗,不关看门狗会引起板子重启

u-boot分析2:u-boot启动第一阶段

c.屏蔽所有中断

u-boot分析2:u-boot启动第一阶段

d.初始化内存SDRAM,首先需要判断是从flash启动,还是通过仿真器直接从RAM启动

u-boot分析2:u-boot启动第一阶段

e.设置栈、初始化时钟,设置好栈,为运行C代码做准备

u-boot分析2:u-boot启动第一阶段

此时栈空间示意图如下:

u-boot分析2:u-boot启动第一阶段

f.从flash拷贝代码到SDRAM,即u-boot第二阶段的代码

u-boot分析2:u-boot启动第一阶段

CopyCode2Ram 中有个巧妙的方法判断是从nandflash启动还是从norfalsh启动

u-boot分析2:u-boot启动第一阶段

u-boot分析2:u-boot启动第一阶段

g.清零bss段,调用_start_armboot,清零bss段,清零未初始化的全局变量,避免使用全局变量时出错。

u-boot分析2:u-boot启动第一阶段

u-boot分析2:u-boot启动第一阶段

跳转到第二阶段程序入口执行,第一阶段主要是初始化一些硬件,为后面做准备。功能比较简单。较复杂的功能放到第二阶段,用C代码来实现。第二阶段主要实现开发板的功能,烧写flash、网卡、USB、串口等,然后从flash读出内核,启动内核。

第二阶段代码分析见下一篇。

相关文章: