uboot启动过程理解
对于2440而言,启动的方式不多。一般就是外界一个NAND FLASH ,2440内部有个NAND FLASH
Controller,会自动把NAND FLASH的前4K拷贝到2440的片内SRAM。2440这个片内SRAM就是所谓的
Stepping Stone刚好也是4K。
在制作启动代码时,就是uboot。一般会把uboot分为两个部分,一般就会叫做BL1和BL2。
BL1和BL2两者相加就是整个uboot。这两个部分各有分工。
为了符合2440的特点,BL1的大小会被设置为4K,这4K需要完成的任务有:
1、配置好内存(对于2440来说,内存就是SDRAM)。
2、配置好内存后,将整个uboot搬运到SDRAM运行。
此时BL1的使命就完成了,接下来是BL2,他在SDRAM上运行,将FLASH上的OS也搬运到SDRAM
运行。那么整个boot的过程就完成了。
芯片换代升级,变成S5PV210,此时启动的方式不想2440那么单一了,如SD卡启动,emmc启动,USB启动,等等启动方式,其次外部的内存也不再是SDRAM这种简单的内存了,而是DDR这种内存。所以一开始需要做的准备工作大大增加。
所以,S5PV210内部多了一个叫做IROM的东西,他的内部固化了一下程序,在上电之后IROM会启动内部的程序,将外部的某些设备进行简单的初始化,如SD卡,emmc等。
内部的SRAM也从4k升级到了96k.就是为了满足更复杂的配置要求。
那么接下来,来看看三星官方推荐的uboot启动过程
和2440启动过程类似,在上电的时候它会自动将外部的固定大小的程序拷贝到片内的SRAM。
对于2440来讲,这个大小是4K。而对于210来讲这个大小是16K。
假设,我们现在选择的是SD卡启动,那么我们的uboot当然会放到SD卡中。同理为了满足,
210的特性,uboot同样会被分为两个部分——BL1和BL2;BL1的大小当然就是16K。
那么,在上电之后,这个16K会被自动的拷贝到片内的SRAM,这个过程由芯片内部的
IROM完成(这个过程通常被称之为BL0)。而此时片内的SRAM并没有被填满,还有80K的容量。
三星想,这80K的容量也够BL2放的了。所以,按照三星设想,当BL1被加载到SRAM之后。
BL1开始运行,此时BL1的任务只要把BL2也搬运到SRAM就可以了。然后让BL2去配置DDR,
并且将OS搬运到DDR运行。
也就是说,三星给BL1分配的任务是搬运BL2到SRAM;给BL2分配的任务是配置DDR并且搬运OS
到DDR运行。
但是,在学校Uboot的过程中,发现Uboot并没有采用三星推荐的启动过程。原因是随着Uboot的
发展,Uboot的大小变得很大,远超过了96K。就是说Uboot无法整个都放入片内的SRAM。那么让就
不能采取三星的方式。
所以Uboot给BL1和BL2重新分配任务:(当然BL1的大小还只能是16K,这是应为IROM里的程序是固定的,它只会将前16K的内容拷贝到SRAM。)
Uboot将BL1委以重任,不仅需要将DDR配置好,还要将BL2搬运到DDR上运行。
BL2就只需要将OS搬运到DDR运行即可。
那么,3星推荐的做法,和Uboot的做法他们的区别就出来的:
1、Uboot交给BL1的任务要比三星交给BL1的任务要多。他首先需要配置DDR,其次再将
BL2搬运到DDR运行。而三星交给BL1的任务,仅仅是将BL2搬运到片内的SRAM运行。
2、UBoot的方式,BL2是在DDR上运行的,而三星的方式BL2是在片内的SRAM运行的。
3、UBoot的方式,BL2只需搬运OS到DDR;三星的方式,BL2需要先配置DDR,在将OS搬运到
DDR。
总结:
1、SRAM他在芯片的内部,他可以直接访问,而无需初始化。而DDR,SDRAM这种外部
内存是需初始化的,需要我们写一些配置程序,初始化之后才可以访问。所以不管是
2440,还是210,还是intel。都遵循逐步启动的过程。
2、对于2440来说,先需要将外部Flash的前4K内容加载到SRAM,然后通过在SRAM里运行的代码
去初始化SDRAM,并搬运主体程序到SDRAM。
3、对于210来讲也是这样,会先将外部Flash的前16K内容拷贝到SRAM。
4、区分BL0 和BL1,BL2。BL0其实是固化在芯片内部的一段程序。而BL1和BL2是组成Boot的两个部分
BL1的大小是必须根据芯片的特性设计的。对于2440来说你的BL1不应该超过4K,对于210来说BL1不应该超过16K。
5、我们自己写boot的时候,也可以参照三星步骤,只要你的BL2不大于80K即可。
7、DDR或者是SDRAM会比片内的SRAM大很多倍,所以只要外部内存被初始化好了之后,很多东西(如BL2)一定程度上就不再受大小的限制了。
uboot启动过程理解的更多相关文章
- U-Boot启动过程完全分析
U-Boot启动过程完全分析 1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段 ...
- U-Boot启动过程完全分析<转>
转载自:http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html 1.1 U-Boot工作过程 U-Boot启动内核的过程可 ...
- 【ARM-Linux开发】U-Boot启动过程--详细版的完全分析
---------------------------------------------------------------------------------------------------- ...
- U-Boot启动过程
开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数.看一下board/smdk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序.第一个要链接的是c ...
- tiny4412学习之u-boot启动过程
这个文档简要分析了tiny4412自带的u-boot的启动过程,这个u-boot启用了mmu,并且命令的接收和执行方式跟以前的不同. 文档下载地址: http://pan.baidu.com/s/1s ...
- spring容器启动过程理解
一.一切从手动启动IoC容器开始 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultLi ...
- U-Boot 启动过程和源码分析(第二阶段)-main_loop分析
1> main_loop common/main.c /******************************************************************** ...
- Am335x u-boot 启动过程中的系统频率配置
Am335x的时钟结构分为:ADPLLS和ADPLLLJ 1.ADPLLS用来配置Core_CLK,Dispaly_clk,ARM系统CLK(mpu_clk),DDR PLLs_clk 2.ADPLL ...
- (一)U-Boot启动过程--详细版的完全分析
博客地址:http://blog.csdn.net/hare_lee/article/details/6916325
随机推荐
- Vue + Spring Boot从零开始搭建个人网站(一) 之 项目前端Vue.js环境搭建
前言: 最近在考虑搭建个人网站,想了想决定采用前后端分离模式 前端使用Vue,负责接收数据 后端使用Spring Boot,负责提供前端需要的API 就这样开启了我边学习边实践之旅 Vue环境搭建步骤 ...
- mongodb2.X添加权限
1.连接mongodb数据库(如果mongo命令没有做环境变量配置,需要定位到有mongo命令的目录) root@AY140709212620347s22Z:~# mongo MongoDB shel ...
- CSS样式----CSS样式表的继承性和层叠性(图文详解)
本文最初于2017-07-29发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 本文重点 CSS的继承性 CSS的层叠性 计算权重 ...
- 关于动态加载js
已知一个需要动态加载的js的文件路径数组,动态加载数组里面所有的js文件. 加载分两种情况: 1. 并行加载,不管js的执行顺序. 2. 串行加载,即一个一个加载,上一个加载完再加载下一个,直到最后. ...
- python的函数(二)
1,函数的变量 2,函数的返回值 1,函数的变量 1.0,函数的变量分为局部变量和全局变量. def fun(): x = 100 print x 这个x是局部变量,函数执行完后,x的变量就会销毁,只 ...
- HDFS Lease Recovey 和 Block Recovery
这篇分析一下Lease Recovery 和 Block Recovery hdfs支持hflush后,需要保证hflush的数据被读到,datanode重启不能简单的丢弃文件的最后一个block,而 ...
- SQL Server 合并复制如何把备份的发布端或订阅端BAK文件还原为数据库
SQL Server的合并复制,是可以备份发布端和订阅端数据库为BAK文件的,但是问题是合并复制在数据库中自动创建的系统表.触发器.表中的RowGuid列等也会被一起备份. 这里我们举个例子,下面图中 ...
- Windows10 家庭版没有本地组策略解决方法
windows 家庭版默认是没有本地组策略的, win+R运行gpedit.msc提示不存在 下面的代码保存一个cmdorbat 脚本文件add_gpedit.cmd, 并执行 add_gpedit. ...
- [IDEA_4] IDEA 从 GitHub 上 pull 项目到本地
0. 说明 通过参考的链接我们已经知道了怎么安装配置 Git .GitHub ,如何使用 IDEA 将本地项目上传到 GitHub. 现在是学习怎么通过 IDEA 将项目从 GitHub pull ...
- 【转】Zookeeper学习---zookeeper 选举机制介绍
[原文]https://www.toutiao.com/i6593162565872779784/ zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的 ...