一、uboot启动分为了三个阶段BL0、BL1、BL2;
BL0表示上电后运行ROM中固化的一段程序,其中ROM中的程序是厂家写进去的,所以具体功能可能根据厂家芯片而有所不同。功能如下:

  1. 初始化系统时钟、特殊设备的控制器、启动设备、看门狗、堆栈、SRAM等硬件;
  2. 验证B1镜像,并且加载BL1镜像到SRAM中,然后跳转到BL1镜像的地址上。

BL0需要将BL1加载到对应的RAM上,这就涉及到它的启动模式,详细如下:
1.OneNand Boot模式
要了解OneNAND先得了解NOR Flash和NAND Flash。与NOR Flash相比,NAND Flash的读数据速度稍慢,但是擦写速度快得多,并且在容量、使用寿命、成本上也占有较大优势。NOR Flash的编程简单,而NAND Flash的编程较为复杂(因为它的flash管理需要特殊的接口)。NAND Flash一般用于存储数据,而NOR Flash一般用于存储启动代码。
NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节(有限的地址引脚是限制其容量的因素之一)。NAND Flash使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。为了弥补NAND Flash的不足,三星公司在NAND Flash芯片内集成了一个RAM接口,命名为OneNAND Flash,这类Flash拥有与NOR Flash相同的简单接口,而且不受地址引脚的限制,即容量与地址引脚无关。
其实OneNAND 其实就是采用了NOR的接口,NAND的架构,是两者的性能得到了综合。这就有了X-LOADER的产生,以前我们接触到的都是BOOTLOADER,其实这个X-LOADER也起到初始化的作用,因为我们的BOOTLOADER是放在NAND的架构下的,而CPU却是从NOR的接口下读取BOOTLOADER到SDRAM中的,所以现在要做一个工作就是要如何将BOOTLOADER在OneNAND的架构下从NAND复制到SDRAM中,这就是X-LOADER的功能了,它不仅初始化OneNAND,并且把U-BOOT从NAND的架构下复制到BufferRam中,再复制到SDRAM中。
X-LOADER还支持从SD、MMC下引导Uboot,他在CPU下有对MMC的初始化程序,可以直接把uboot.bin从MMC下复制到SDRAM中。说到底这个X-LOADER就是起到初始化OneNAND和引导U-BOOT的作用。
参考:
blog.csdn.net/flower_fancy/article/details/5935618
2.Nand Boot
从nand flash中启动uboot.和上面类似,烧写过程可以参考下面的两篇博客。
参考:
blog.csdn.net/ropenyuan/article/details/6637155
blog.csdn.net/q1302182594/article/details/51324094
3.MMC Boot
先了解一下MMC、SD、SDIO三种卡。MMC卡和SD卡都是纯粹的存储卡,而SDIO是SD+IO,也就是既有存储功能,又有IO控制功能,不过也有纯IO功能的SDIO设备。并且,这三种卡可以使用同一个插槽,系统还能正确的识别!可能是由于历史原因,在开始有linux的时候,还只存在mmc卡(不存在SD和SDIO卡),所以在linux系统里面关于这三种卡的名称统统用“mmc“来命名。
关于SD与MMC的区别主要在数据位宽(MMC:8BIT,SD:4BIT);卡的激活(MMC:CMD1,SD:ACMD41);CMD6的用法上面,详细参考blog.csdn.net/lwj103862095/article/details/38334859
参考:
blog.csdn.net/xieweihua2012/article/details/12785491
4.UART Boot
与前面相比,数据从串口读取,且不需要验证header。
5.USB Boot
与前面相比,数据从USB读取,且不需要验证header。

模式 硬件支持 BL1镜像存放起始位置 BL1镜像是否需要header
OneNand Boot OneNand flash page0
Nand Boot Nand flash page0
SD / MMC Boot SD / MMC block1
eSSD Boot eSSD block1
eMMC Boot eMMC block0
UART Boot UART
USB Boot USB

BL1是上电后启动的第二个阶段。BL1阶段会将其镜像或者代码从存储介质上(比如SD)上加载到内部SRAM上,因此它是运行在内部SRAM上的。
主要工作:初始化和SDRAM相关的部分时钟、初始化外部SDRAM、从存储介质上(比如SD)将BL2镜像加载到SDRAM上、验证BL2镜像并跳转到BL2镜像所在的地址上
BL2是上电后启动的第三个阶段,BL2阶段会将其镜像或者代码从存储介质上(比如SD)上加载到外部SDRAM上。
BL2就是指传统意义上的bootloader,也就是我们这里的uboot的主体,负责flash操作、uboot命令操作等等,并且最终目标是加载OS和启动OS,如linux。
参考:
blog.csdn.net/ooonebook/article/details/52916202

二、接下来从bootloader开始说起
Bootloader是在操作系统运行之前执行的一段小程序。而这段小程序的最终目的,正确地设置好软硬件环境,使之能够成功地引导操作系统。
主要工作包括初始化部分硬件,包括时钟、内存等等;加载内核到内存上;加载文件系统、atags或者dtb到内存上;根据操作系统启动要求正确配置好一些硬件;启动操作系统。
嵌入式几种常见的bootloader:
uboot是最常见的bootloader,开源,常用于ARM,MIPS等平台。支持monitor功能。
superboot 不开源,友善之臂的tiny210代码中默认使用这个bootloader
LK(Little Kernel)常用于高通平台,支持monitor功能。

uboot-spl

由uboot编译生成,对应于BL1阶段,也就是BL1的镜像,uboot-spl.bin。其代码运行于IRAM中
主要工作有:

  1. 初始化部分时钟(和SDRAM相关)
  2. 初始化DDR(外部SDRAM)
  3. 从存储介质上(比如SD\eMMC\nand flash)将BL2镜像加载到SDRAM上
  4. 验证BL2镜像的合法性
  5. 跳转到BL2镜像所在的地址上

uboot.bin

由uboot编译生成,对应于BL2阶段,也就是BL2的镜像,uboot.bin。其代码运行于SDRAM中.
主要工作有:

  1. 初始化部分硬件,包括时钟、内存等等
  2. 加载内核到内存上
  3. 加载文件系统、atags或者dtb到内存上
  4. 根据操作系统启动要求正确配置好一些硬件
  5. 启动操作系统

monitor工作,主要是处理命令行的命令,以下是部分操作:

  1. flash操作
  2. 环境变量操作
  3. 启动操作

下一篇:http://www.cnblogs.com/yeqluofwupheng/p/7347925.html

uboot学习之uboot启动流程简述的更多相关文章

  1. uboot学习之五-----uboot如何启动Linux内核

    uboot和内核到底是什么?uboot实质就是一个复杂的裸机程序:uboot可以被配置也可以做移植: 操作系统内核本身就是一个裸机程序,和我们学的uboot和其他裸机程序没有本质的区别:区别就是我们操 ...

  2. Android FM模块学习之一 FM启动流程

    最近在学习FM模块,FM是一个值得学习的模块,可以从上层看到底层. 上层就是FM的按扭操作和界面显示,从而调用到FM底层驱动来实现广播收听的功能. FM启动流程:如下图: 先进入FMRadio.jav ...

  3. ASP.NET Core MVC 源码学习:MVC 启动流程详解

    前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...

  4. nginx学习十一 nginx启动流程

    今天用了一天的时间看nginx的启动流程,流程还是非常复杂.基本的函数调用有十几个之多.通过看源代码和上网查资料,弄懂了一些函数.有些函数还在学习中,有些函数还待日后学习,这里记录一下今天所学.加油! ...

  5. ThinkPHP5.0源码学习之框架启动流程

    ThinkPHP5框架的启动流程图如下: ThinkPHP5的启动流程按照文件分为三步: 1.请求入口(public/index.php) 2.框架启动(thinkphp/start.php) 3.应 ...

  6. uboot学习之uboot.bin的运行流程

    上篇博客:http://www.cnblogs.com/yeqluofwupheng/p/7347925.html 讲到uboot-spl的工作流程,接下来简述一下uboot.bin的工作流程,这对应 ...

  7. uboot学习之BL3的流程

    BL2的最后通过汇编调用了board_init_r函数,此时进入BL3的阶段,此时的主要工作: 这一阶段涉及的文件及任务如下 arch/arm/lib/board.c           1. boa ...

  8. Tiny4412 Android 启动流程

    Android系统的启动主要包括三个阶段: ①BootLoader启动 ②Linux Kernel启动 ③Android系统启动 前面我们大致分析了前面两个步骤,即u-boot和内核的启动流程(内核启 ...

  9. Caddy源码阅读(二)启动流程与 Event 事件通知

    Caddy源码阅读(二)启动流程与 Event 事件通知 Preface Caddy 是 Go 语言构建的轻量配置化服务器.https://github.com/caddyserver/caddy C ...

随机推荐

  1. 阿里云部署 Flask + WSGI + Nginx 转载详解

    我采用的部署方案是: Web 服务器采用 uwsgi host Flask 用 Supervisor 引用 uwsgi 作常规启动服务 基于 Nginx 作反向代理 首先, 阿里云服务器可以通过 SS ...

  2. unity之局域网

    Unity自5.1以后支持新版的网络系统Unet,Unet是什么,优缺点是什么,和以前的网络系统有什么区别,请自行去百度.本篇要实现的功能是创建网络游戏的Player主角,以及实现移动同步.本教程来源 ...

  3. Java入门指南-02 变量

    一.回顾上一篇讲到了常用的DOS命令.如何创建第一个程序.打印.注释与空白. 那么我们已经学会了使用System.out.println() 可以来输出一个值.进一步的,我们可以用它来显示简单的算术运 ...

  4. POJ 3067 Japan (树状数组求逆序对)

    POJ - 3067 题意:有(1-n)个城市自上到下在左边, 另有(1-m)个城市自上到下在右边,共有m条高速公路,现求这m条直线的交点个数,交点不包括在城市处相交. 题解:先将高速公路读入,然后按 ...

  5. CodeForces 293E Close Vertices 点分治

    题目传送门 题意:现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路劲长度 <= l, 总权重 <= w. 题解: 1.找到树的重心. 2.求出每个点到 ...

  6. hdu 4614 Vases and Flowers(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意: 给你N个花瓶,编号是0  到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. ...

  7. CF934A A Compatible Pair

    A Compatible Pair time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. POJ 1390 Blocks (区间DP) 题解

    题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分. 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在 ...

  9. HDU 1015 Safecracker (DFS)

    题意:给一个数字n(n<=12000000)和一个字符串s(s<=17),字符串的全是有大写字母组成,字母的大小按照字母表的顺序,比如(A=1,B=2,......Z=26),从该字符串中 ...

  10. [DP]换钱的方法数

    题目三 给定数组arr, arr中所有的值都为整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求换钱有多少种方法. 解法一 --暴力递归 用0 ...