zoukankan      html  css  js  c++  java
  • uboot学习之uboot启动流程简述

    一、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. 从存储介质上(比如SDeMMC and 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 

  • 相关阅读:
    boost::asio::error的用法浅析
    boost::asio::buffer
    sqlserver2008安装图解
    WCF 聊天室程序代码详细讲解教程
    C#中使用Property Grid(属性面板)控件
    TXT>Access 使用DAO数据源!(VB Code)
    读取INI文件 VbCode
    Pet Shop 4
    模式行为型
    C#编程规范
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7341989.html
Copyright © 2011-2022 走看看