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. spring framework 4 源码阅读(1) --- 前期准备

    在开始看代码之前,需要做的第一件事是下载代码. 在这里:https://github.com/spring-projects/spring-framework 下载完成了发现使用gradle做的源代码 ...

  2. SOSP 文档 - Windows Azure 存储:具有强一致性的高可用性云存储服务

    之前,我们在第 23 届 ACM操作系统原理研讨会 (SOSP)上发布了一篇文章,其中介绍了 Windows Azure存储的内部详细信息. 您可以在此处找到该文章.此次大会还发布了一段视频讲话( ...

  3. 【转】Android API 中文(14) —— ViewStub

    用一个XML源填充view.inflate(上下文对象,资源文件Id,父窗口组一般为null): 原文网址:http://www.cnblogs.com/over140/archive/2010/10 ...

  4. hdu1695:数论+容斥

    题目大意: 求x属于[1,b]和 y属于[1,d]的 gcd(x,y)=k 的方案数 题解: 观察发现 gcd()=k 不好处理,想到将x=x/k,y=y/k 后 gcd(x,y)=1.. 即问题转化 ...

  5. wifidog auth-server安装配置

  6. Java 内存区域和GC机制-java概念理解

    推荐几篇关于java内存介绍的文章 Java 内存区域和GC机制 http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html    ...

  7. Android 通知栏用法例子

    当程序意外退出时,可以去掉通知栏上显示的图标 1.创建TestNotificationActivity activity类, package com.notioni.test.notification ...

  8. android调试系列--使用ida pro调试so

    1.工具介绍 IDA pro: 反汇编神器,可静态分析和动态调试. 模拟机或者真机:运行要调试的程序. 样本:阿里安全挑战赛第二题:http://pan.baidu.com/s/1eS9EXIM 2. ...

  9. 多余的Using Namespaces或引用会影响程序的执行效率么?(转)

    转自:http://www.cnblogs.com/Interkey/p/UsingNameSpace.html 多余的Using Namespaces或引用会影响程序的执行效率么? 在.NET程序编 ...

  10. Activity-在ListFragment中为ListView增加空白视图

     有两种方法可以实现为ListView添加空白视图.但是原理都一样: 第一种方法是XML+代码添加: 1.定义emptyView视图 2.调用AdapterView的setEmptyView(empt ...