uboot学习笔记之uboot版本选择(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDNmianfeixiazai001/article/details/82286817

1、uboot程序版本选择

我们嵌入式产品,不论是软件还是硬件,选择的标准并不是配置越高越好,软件版本越新越好,而应该是满足我们的需求就可以。因此我们在网络上下载uboot版本代码的时候,就是本着这个原则。

uboot是德国的denx公司开发的开源代码,所以获取源码的方法也很简单,直接在百度搜索“uboot  denx官网”就可以了,或者直接在浏览器中输入“ftp://ftp.denx.de/pub/u-boot/”,选择适合版本。

注意,在下载uboot源码的时候,要想支持设备数,需要下载2013版本及其之后的版本,在2012及其之前的版本是不支持dts设备树的。

2、S3C6410开发板启动

在学习uboot之前我们要先了解下开发板的整体结构,因为uboot的本质就是BootLoader,完成操作系统的启动加载。那么最终是将系统OS搬移到内存中运行。具体结构如下:

上述图片就是S3C6410芯片启动的大致流程,一上电PC寄存器默认初始值就是0x00000000,肯定会先从iROM(片内ROM)读取芯片厂商固化好的程序,结合图片中流程叙述:

1、执行iROM程序完成将SD卡/flash/eMMC中的BL1代码拷贝到片内RAM(iRAM)

2、拷贝BL1到iRAM,并且跳转到片内iRAM执行代码

3、将uboot整体代码拷贝到片外RAM

由于iRAM大小有限,因此不能完成太多的功能,只是先判断当前程序运行的位置是在iRAM还是SDRAM,如果是在iRAM,直接完成一些后续基本硬件的初始化,最重要的是要初始化好内存控制器,然后将BL1和BL2整体拷贝到片外RAM(SDRAM)。注意,uboot中关于BL1部分的代码有一个重要的要求:必须都是未知无关代码。

4、跳转到片外RAM执行

重新执行一遍uboot(从BL1开始),判断当前程序执行位置是在iRAM还是片外RAM,根据判断结果,决定需要需要直接跳转到BL2(因为在iRAM中的时候,已经执行过BL1了)                                                                                                                                   

3、S5PV210开发板启动

和S3C6410相比较,将iROM由32KB扩增为64KB,iRAM由16KB扩增为96KB,三星公司的本意是将iRAM扩增之后,直接将BootLoader(uboot)的镜像从片外ROM中直接拷贝到iRAM中去运行,这样就不需要再将BootLoader(uboot)分成BL1和BL2了,只要将BootLoader直接拷贝到iRAM运行之后,将操作系统直接从外存拷贝到片外RAM:

主要流程如下:

①一开机上电,CPU从片内ROM中读取程序

②CPU在执行片内ROM程序过程中,完成将片外ROM的BL(BootLoader)加载到片内RAM中

③执行BootLoader程序,然后将存放在片外ROM中的操作系统(主要是内核)拷贝到片外RAM中

但是,uboot的源码设计者并没有采用三星公司设计的这种方案,因为实际uboot.bin的代码大小比iRAM的大小要大的多(一般都是100-200KB,甚至更大),所以uboot程序设计者将整个uboot代码分为两部分:uboot-spl.bin(16KB)、uboot.bin(剩下部分)。在开机启动的时候,任然是先将uboot-spl.bin先加载到iRAM,然后将uboot.bin加载到片外RAM,然后跳转到片外RAM的uboot.bin部分,完成操作系统的引导。

猜你喜欢

转载自blog.csdn.net/CSDNmianfeixiazai001/article/details/82286817