本帖最后由 mrbushy 于 2015-9-6 20:30 编辑
在移植uboot之前先对uboot启动流程经行初步了解首先查看sp52101芯片手册1.1版本第518页和520页框图:
查看芯片手册517 、518、521页关于uboot 的启动流程概述:如下
以上英文手册大致意思总结如下:
S5PV210上电将iROM(interal ROM)处执行固化的启动代码,它对系统时钟进行初始化,对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到iRAM(0xd002_0000处,其中0xd002_0010之前的16个字节存储的的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;BL1执行完成后,开始执行BL2,BL2加载内核,把OS在SDRAM中运行起来。
BL0,BL1,BL2:
(1)BL0:是指S5PV210的iROM中固化的启动代码
作用:初始化系统时钟,设置看门狗,初始化堆和栈,加载BL1
(2)BL1:是批在iRAM自动从外扩存储器(nand/sd/u***)中拷贝的uboot.bin二进制文件的头最大16K代码
作用:初始化RAM,关闭Cache,设置栈,加载BL2
(3)BL2:是指在代码重定向后在内存中执行的uboot的完整代码
作用:初始化其它外设,加载OS内核按照芯片手册上的启动分析图及上面的描述,总结启动流程为:
(4)三者之间的关系:(Interal ROM固化代码)BL0将BL1(bootloader的前16KB--BL1)加载到iRAM;BL1然后在iRAM中运行将BL2(整个bootloader)加载到SDRAM(DDR);BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。
在这个过程中,u-boot需要初始化的硬件是CPU和DDR,所以,这两个硬件必须在u-boot阶段就做好初始化的工作。
操作系统的内核映像一般是存储在 Flash 上的,当 Bootloader 将内核复制
到 RAM 里之后可能还需要解压。但是对于有自解压能力的内核而言是不需要
Bootloader 来解压的。
而 Bootloader 调用内核的方法就是直接跳转到内核的第一条指令处。在调
用内核之前下列的条件必须要满足:
1.CPU 寄存器的设置
① R0 为 0;
② R1 为机器码;
③ R2 为启动参数,标记列表在 RAM 中的起始基地址。
2.CPU 工作模式
① 必须禁止中断(IRQ 和 FIQ) ;
② CPU 必须设置为 SVC 模式。
3.Cache 和 MMU 的设置
① MMU 必须关闭;
② 指令 Cache 可以打开或关闭;
③ 数据 Cache 必须关闭。
了解了uboot的启动流程现在看一下uboot源码的文件结构:
这是初步的根据自学资料整理的uboot启动过程的分析,主要是概念性的接下来是针对各个启动过程的具体代码分析系统时钟配置。flah配置以及RAM配置等的代码与原理分析学习总结分享。
下篇预告《nandflash原理及配置代码分析》