专题4-我是bootloader设计师-Souce Insight+ARM启动流程分析

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

一、bootloader设计蓝图
写在前面:不想当将军的士兵不是好士兵,不想当设计师的程序员不是好程序员

1、bootloader的作用
就像航天器的助推器,将航天器带到指定的轨道。(启动linux内核)
代码包括两部分:
第一部分代码主要为第二部分代码做硬件准备;
第二部分代码主要完成一些高级功能,如内核启动、根文件系统启动。

2、设计方法–模仿uboot
自主模式:不需要人为干预,自动运行
开发模式:运行uboot的命令去开发

3、建立并分析uboot的工程
学会用Souce-Insight工具去分析大型的程序。
1、project–newproject
2、解压:在linux将2440的uboot的解压,注意linux的tai解压时分大小写的,比如Makefile和makefile能分开解压,但在windows中其中一个会被覆盖掉,所以只能在linux下解压
3、利用samba服务器映射到z盘(\192.168.1.108\root\home\S3-ARM\part4\uboot)
4、add and remove Project files,打开z盘(z:)–add all(共用3000+个文件)
5、注意默认状态下,只添加了.c和.h的文件,汇编文件没有添加。option–document option–c source file–手动添加.s和*.S文件(又用200+个文件)
6、为快速查看工程中函数的具体实现,使用《同步》功能,即点击上面有本小书的图标,几分钟后完成。鼠标点击函数会在下面出现函数的具体实现,双击则跳转到函数实现的文件中去了。

二、ARM处理器的启动流程
bootloader先做什么后做什么取决于arm的启动流程

1、支持的启动方式

2440:nor(2M)和nand(256M)
6410:SD卡和nand

2、地址布局

2440:处理器上电后,首先从0地址取第一条指令(nor flash的最前端)
搜索关键词:mapping,注意0x30000000就是SDRAM的起始地址。
这里写图片描述

6440:
0地址是镜像区域,内存运行时会将代码映射到镜像区域开始运行。
这里写图片描述

210:
这里写图片描述

3、启动流程

由于nand flash 不能参与统一编址,所以不能直接放到0地址处去运行。

2440:
BootSRAM(4k,又叫4k的stoping store,垫脚石)和nand flash的关系。

从nand启动的流程:首先cpu将nand flash前4k字节的数据自动的复制到stoping store(SRAM)中去(主要完成初始化工作),nand剩下的内容(例如操作系统)复制到内存(SDRAM)中,执行到stoping store中的程序后,再跳到内存中去执行。

6440:
首先运行iROM中(BL0)的程序,iROM是芯片厂商给大家固化好的软件,这个软件通常称为零阶段的bootloader(bootloader0),主要工作:1)完成硬件的初始化 2)将放在nand flash中的bootloader1最前面的8k拷贝到stoping store中去。(BL1再将剩余的bootloader(BL2)拷贝到SDRAM,完成整个bootloader的运行)
(首先iROM会映射到镜像区域(0地址处)开始运行)
这里写图片描述

210:
BL1 max size 16k,BL2 max size 80k,剩余的bootloader拷贝到内存中(SDRAM)。
210的启动还要更好玩一些,210内置了一块96KB大小的SRAM(叫iRAM),同时还有一块内置的64KB大小的NorFlash(叫iROM)。210的启动过程大致是:
第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),执行。这一段IROM代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的DRAM,因此这一段IROM是不能负责初始化外接的DRAM的,因此这一段代码只能初始化SoC内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。
第二步:从IRAM去运行刚上一步读取来的BL1(16KB),然后执行。BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80KB)然后运行;
第三步:从IRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。
这里写图片描述

6440和210与2440启动的不同:
2440是从垫脚石(本身就是0地址,不需要映射)开始运行的,6440和210是从iROM(需要映射到镜像区域)开始运行的。

备注:
内存:
SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用
DRAM 动态内存 特点是容量大、价格低,缺点是上电后不能直接使用,需要软件初始化后才可以使用
PC机 内存需求大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM.

外存:
NorFlash:特点是容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质。
NandFlash(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,也就是说上电CPU直接读取,需要CPU直接读取,需要一些初始化软件,通过时序接口读写。

猜你喜欢

转载自blog.csdn.net/lvjianxin6015/article/details/53980594