RBL, UBLUboot的关系

1)RBL=ROM Bootloader,UBL=user Bootloader。

2)RBL为TI固化在芯片ROM中的bootloader,OMAP上电启动过后首先将运行RBL,然后通过RBL加载UBL,再通过UBL加载uboot,而uboot就是用来加载Linux内核的。如果在具体应用过程中不需要使用到Linux(实际上一般都会用到的),uboot甚至是UBL都可以省去。UBL为一级Bootloader,uboot为二级Bootloader,一级Bootloader的大小是有限制的(应该是64KB以下,没查到具体数值),这也是为什么会有二级Bootloader的原因。如果一个应用程序小于这个大小,那么我们可以不需要烧写UBL,而只用烧写该应用程序相应的bin文件(下面第3点将阐述如何得到这个文件)就行了。

UBL的程序设计,相对UBOOT、KERNEL、ROOTFS、设备驱动、DSP开发来说,还是比较简单。我们先从DAVINCI的启动说起,了解UBL在DAVIN系统中的位置和作用。对于固件程序烧写在NAND FLASH 的Davinci dm644x嵌入式系统, 上电启动的过程如下:

 
 
RBL(ARM ROM Boot Loader)在芯片出厂的时候就已经烧写到ROM里了,这不需要大家关心,上电后,RBL会自动从EMIFA EM_CS2 memory space (0x0200 0000). 执行指令,这个地址就是NAND FLASH 或NOR FLASH的片选起始地址。当你的系统设置为NAND BOOT的时候,UBL(User Boot Loader)是必不可少的,否则RBL不能直接把UBOOT给BOOT起来,因为RBL只支持14K NAND FLASH 的 BOOT程序,而UBOOT编译出来后的bin文件一般都大于80K,特别是版本越高,UBOOT的代码越大,所以这时候就需要写一个UBL。UBL 从NAND FLASH 读取UBOOT,然后把UBOOT COPY 到 DDR2(RAM)的相关地址上,然后把UBOOT 给BOOT 起来。根据TI DAVIN RBL的规定,不同型号的NAND FLASH,UBL保存的地址是不同的,512字节PAGE 的NAND(即SMALL PAGE),保存的地址是:0x00004000;2048字节PAGE的NAND (即LARGE PAGE)保存的地址是:0x20000。至于如何通过XDS560仿真器烧写UBL或通过UART BOOT烧写UBL,本人放在DAVINCI UBOOT移植的文章介绍。(提示:RBL和UBL不要混淆!多看看BOOT的顺序图。)
UBL的移植,比较简单,当然,前提条件你已经搭好交叉编译环境。进入UBL文件包最上层的文件夹,使用make 就可以编译出:ubl_davinci_nand.bin。UBL主要有:
ubl.c
dm644x.c
util.c
nand.c
nandboot.c
nor.c
norboot.c
uart.c
uartboot.c
ubl_davinci.lds
相关的*.h 文件和两个makefile文件。如果最上层的makefile选择$(MAKE) -C src FLASH=nand,表示使用ARM nand flash boot模式,这时NOR,UART BOOT模式相关的c文件不会编译。
介绍一下:
ubl_davinci.lds: 指定UBL的SECTIONS及UBL本身的入口地址;
ubl.c:从selfcopy函数开始运行,COPY自己到RAM,然后跳到正常入口地址,执行boot(),main()等函数,调用DM644xInit(),COPY UBOOT到RAM相关地址,最后执行UBOOT的入口地址(EntryPoint),这时UBOOT就可以运行了。
dm644x.c:主要配置最小系统,比如关中断、PLL1、PLL2设置、DDR2 时序设置、UART设置,等等。
util.c:是一些相关的malloc等公共函数。
nand.c:主要是NAND FLASH的驱动;
nandboot.c:主要是实现NAND_Copy,把UBOOT从NAND COPY到相应的DDR2(RAM)里。
UBL要移植的东西不是很多,主要是在dm644x.c里要定义好:
Uint32 PLL1_Mult = 22;  // DSP=594 MHz for DM6446,DM6441一般使用Uint32 PLL1_Mult = 19;  // DSP=513 MHz。在PLL2Init()函数里,使用不同型号的DDR,要设置不同的参数,即时序参数等,这是关键的地方。
Nand.c及nand.h主要移植就是定义好UBOOT在NAND的存储地址,不同型号的NAND FLASH ,比如SMALL PAGE(512字节)和LARGE PAGE(2048字节)这些都要修改除非你的NAND的类型和TI EVM 兼容。
nandboot.c主要任务就是如何把u-boot.bin或带有头的u-boot.img正确COPY到DDR里,这里最容易出问题,编译出来的U-BOOT文件一般带有Valid magic number(MAGIC_NUMBER_VALID),入口地址entrypaoit,这些信息不对都使UBOOT 运行不起来,建议看一下或COPY UBOOT的image.h。
UBL把UBOOT运行起来,很多事情都可以做了,LINUX KERNEL,ROOTFS,NFS,DSP,设备驱动,应用等等,都可开始按部就班开发。

RBL, UBL, Uboot的关系的更多相关文章

  1. dm3730和dm6437,dm6446,AM335x启动过程的不同

    dm3730的启动流程为RBL+X-loader+uboot+uImage分别在片内ROM(fireware),片内SRAM,片外的DDR,片外的DDR. 之所以建立这样一个复杂的启动过程,我个人的理 ...

  2. MTD NANDFLASH驱动相关知识介绍

    转:http://blog.csdn.net/zhouzhuan2008/article/details/11053877 目录 MTD总概述 MTD数据结构 MTD相关层实现 MTD,Memory ...

  3. 【图像处理】【SEED-VPM】6.文件目录结构

    ———————————————————————————————————————————————————————————————————————— seed-vpm6467 \ Hardware Tes ...

  4. exynos 4412 电源管理芯片PMIC 的配置及使用方法

    /** ****************************************************************************** * @author    Maox ...

  5. TI Davinci DM6446开发攻略——根文件系统的裁剪和移植

    一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...

  6. DM368 UBL和u-boot的裁剪

    转载:http://blog.csdn.net/olei_oleitao/article/details/7919307   一.DM36X的BOOT过程介绍 DM36x的BOOT过程和DM6446. ...

  7. U-boot与linux的关系

    基本上没有啥关系,U-boot的话你也知道,说白了就像是Dos工具箱,本身算是个精简的Linux系统了,主要是负责硬件的初始化和引导,本身带有一些工具,作为引导程序,常作为嵌入式设备的引导.当真正的系 ...

  8. uboot环境变量与内核MTD分区关系

    uboot 与系统内核中MTD分区的关系: 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 1:在内核MTD中可以定义分区A~B, ...

  9. u-boot中分区和内核MTD分区关系

    一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4 ...

随机推荐

  1. hdu 5391 Zball in Tina Town(打表找规律)

    问题描述 Tina Town 是一个善良友好的地方,这里的每一个人都互相关心. Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大11倍.在第二天的时候, ...

  2. jQuery中ready与load事件的区别

    1.摘要 大家在编程中使用jQuery还有JS的时候一定会在使用之前这样: //document ready $(document).ready(function(){ ...code... }) / ...

  3. Log4j使用说明

    Log4J实例应用开发 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对Logger.Appender及Layout的分别使用.Log4j支持两种配置文件格式,一 ...

  4. 未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。

    这个一般出如今三层给B层与D层之间加抽象工厂-接口-映射.时候出的错.出错的地方是抽象工厂. --如图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTA ...

  5. c++ 11 多线程教学(1)

    本篇教学代码可在GitHub获得:https://github.com/sol-prog/threads. 在之前的教学中,我展示了一些最新进的C++11语言内容: 1. 正则表达式(http://s ...

  6. 理解JavaScript 的原型属性

    1.原型继承 面向对象编程可以通过很多途径实现.其他的语言,比如 Java,使用基于类的模型实现: 类及对象实例区别对待.但在 JavaScript 中没有类的概念,取而代之的是一切皆对象.JavaS ...

  7. css3标签

    -moz代表firefox浏览器私有属性 -ms代表ie浏览器私有属性 -webkit代表chrome.safari私有属性 -o代表opera私有属性 border-radius:2em; 向div ...

  8. EF加载实体的方式

    原文:Loading Related Entities EF加载数据的方式: 预加载 eager loading 延迟加载 lazy loading 显示加载 explicit loading 预先加 ...

  9. DBHerperl类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  10. java 静态文件使用注解

    spring框架为我们代码的编写带来了极大的便利,特别是注解的使用.但是有个问题,当我们在静态文件中使用注解的时候,这个时候就会报错了.如以下代码: @Autowired private UserSe ...