标签:style blog class c code tar
其实S5PV210的启动过程网上一搜一大把,这里就不详细讲了。下面我们结合U-Boot的启动过程和S5PV210启动过程结合起来对比。
根据S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf,我们可以得知,S5PV210的启动过程分为3个阶段:
BL0阶段,三星固化在内部ROM里面的代码究竟做了什么工作?查阅S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf我们可以得知,BL0的固化代码做了以下的工作:
关闭看门狗
初始化iCache (即 instruction cache, 指令用的缓存)
初始化栈
初始化堆
初始化块设备拷贝函数库 (它是个函数库,我们待会移植时会用到从SD卡复制到SDRAM的函数)
初始化PLL和系统时钟 (默认的系统时钟频率才400MHz,我们待会将它提高到1GHz)
把BL1的代码复制到内部RAM
检查BL1的校验码 (这就是BL1代码前16字节的作用)
如果校验失败,内部ROM将会以第二启动顺序 (SD/MMC
通道2)
查看是否安全启动模式 (我们这里不关心)
跳转到BL1
我们先看看U-Boot的启动顺序。在U-Boot中,我们先启动SPL (位于U-Boot源码的SPL文件夹中),SPL负责把U-Boot代码从启动设备 (SD卡/Nand Flash)拷贝到SDRAM中,再跳转到SDRAM执行剩下的U-Boot代码。
这里对比一下S5PV210的启动顺序,我们可以知道,SPL就是所谓的BL1阶段,然后我们没有BL2阶段,而是直接跳到SDRAM执行剩下的U-Boot代码。为什么?因为前面说了,内部RAM只有96K大小,而一个U-Boot也有100+K,SPL有16K,内部RAM肯定放不下。所以我们只能把SPL放在内部RAM,让SPL把U-Boot代码从启动设备拷贝到SDRAM里面,再跳转执行。
总结一下:
BL0:固化在内部ROM
BL1:U-Boot里面的SPL
BL2:没有BL2阶段
下面我们来做一件很爽的事情。下载完U-Boot源码之后你会发现,U-Boot占用很大,支持很多开发板和CPU。但是其实对于嵌入式来说,我们每次移植只关心我们的目标开发板和CPU,其它开发板和CPU对于我们来说都是多余的。因此,我们可以进行U-Boot目录的精简。而且,精简U-Boot目录结构有个好处,就是移植时出现的错误,你使用grep "错误信息" . -nR查询错误相关文件时,能少显示很多无关的文件。还有,对于我这种有“洁癖”的人来说,必须精简..... 唉~
这里我们以Tiny210开发板为例,它使用的是armv7的CPU架构,here we go:
Source Code: https://github.com/a226035102/U-Boot-2014.01_for_tiny210
U-Boot-2014.01 for Tiny210移植手册(零) ---- 移植前的准备,布布扣,bubuko.com
U-Boot-2014.01 for Tiny210移植手册(零) ---- 移植前的准备
标签:style blog class c code tar
原文地址:http://www.cnblogs.com/comeonjiji/p/3731627.html