UBoot启动代码第一阶段流程
2013-09-11 09:30
281 查看
http://blog.csdn.net/xautfengzi/article/details/7470134
前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了。现做一些注释,方便以后温习。
第一阶段代码主要位于start.S中,其流程如下:
1.设置中断向量表。
2.设置CPU为管理员模式。
3.禁狗。
4.关中断。
5.设置系统时钟。
6.跳至cpu_init_crit。(注意bl指令,bl指令是相对跳转,绝对跳转用mov lr,pc。由于此阶段代码是位置无关代码,所以在跳至的细节部分要仔细理解)
6.1.使缓存无效。
6.2.禁用MMU和缓存。
6.3.跳转至lowlevel_init设置内存时钟。
7.初始化NAND控制器。
8.设置堆栈、FP指针、ro、r1、r2这三个寄存器,作为实参。
9.跳转至nand_read_II中将UBoot拷贝至SDRAM中。
10.将刚才拷贝至SDRAM中的前4k内容与steppingStone里面的内容做比较。
11.设置SP指针,清空bss段。
12.跳至start_armboot,即第二阶段。
第一阶段结束时,内存中的分布如下图所示:
前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了。现做一些注释,方便以后温习。
第一阶段代码主要位于start.S中,其流程如下:
1.设置中断向量表。
2.设置CPU为管理员模式。
3.禁狗。
4.关中断。
5.设置系统时钟。
6.跳至cpu_init_crit。(注意bl指令,bl指令是相对跳转,绝对跳转用mov lr,pc。由于此阶段代码是位置无关代码,所以在跳至的细节部分要仔细理解)
6.1.使缓存无效。
6.2.禁用MMU和缓存。
6.3.跳转至lowlevel_init设置内存时钟。
7.初始化NAND控制器。
8.设置堆栈、FP指针、ro、r1、r2这三个寄存器,作为实参。
9.跳转至nand_read_II中将UBoot拷贝至SDRAM中。
10.将刚才拷贝至SDRAM中的前4k内容与steppingStone里面的内容做比较。
11.设置SP指针,清空bss段。
12.跳至start_armboot,即第二阶段。
第一阶段结束时,内存中的分布如下图所示:
相关文章推荐
- UBoot启动代码第一阶段流程
- uboot第一阶段启动流程
- Uboot优美代码赏析2:第一阶段_硬件平台启动start.s分析 .
- uboot - 启动流程分析【第一阶段】
- Uboot优美代码赏析2:第一阶段_硬件平台启动start.s分析
- uboot启动流程webee210启动第一阶段state_one
- uboot启动第一阶段详细分析
- Uboot启动流程(图+代码)
- Linux kernel启动流程第一阶段
- 第一阶段 串联流程 TODO + 伪代码
- U-Boot启动第一阶段代码分析
- [kernel 启动流程] (第四章)第一阶段之——dtb的验证
- 嵌入式 uboot第二阶段启动流程小结以及在uboot添加自定义命令
- [kernel 启动流程] (第二章)第一阶段之——设置SVC、关闭中断
- uboot文件配置 & uboot启动第一阶段
- uboot 开始阶段启动代码分析
- [kernel 启动流程] (第五章)第一阶段之——临时内核页表的创建
- [kernel 启动流程] (第六章)第一阶段之——打开MMU
- [kernel 启动流程] (第四章)第一阶段之——dtb的验证
- U-Boot启动第一阶段代码分析