RBL, UBL, Uboot的关系

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,设备驱动,应用等等,都可开始按部就班开发。

时间: 2024-11-05 16:25:09

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

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

一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windows操作系统的C.D盘这种概念机制,FLASH对应硬盘.但linux是挂载点的概念,根文件系统是一个整体,组织到一个树状的目录结构中.这种文件组织遵守文件系统科学分类标准FHS,一种国际标准.运行.维护系统所必须的各种 在开发.测试阶段,基本上都是使用NFS(网络文件系统),NFS文件系统是在你的开

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

一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4个区,第一个为boot区,一个为boot参数区(传递给内核的参数),一个为内核区,一个为文件系统区.(但是有的内核就会有很多分区,比如内核参数会有两个,还有会Logo的地址) 而对于bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统--.这些起始地

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

uboot 与系统内核中MTD分区的关系: 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 1:在内核MTD中可以定义分区A~B,C~D......并予以绝对的地址赋值给每个分区.我们可以来看看在内核中是怎样来对MTD进行分区的:arch/arm/plat-s3c24xx/common-smdk.c static struct mtd_partition smdk_default_nand_part[] = { [0] = {

TI Davinci DM6446开发攻略——UBL移植

 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)

Thinking XML:通用商业语言(UBL)

用于商业的XML格式很混乱,而通用商业语言(Universal Business Language,UBL)就志在统一这个混乱的领域.最近,UBL背后的小组首次发布了该产品,供公开评审.本文中,Uche Ogbuji首次对UBL作了深入探讨. 正如我在上一篇专栏文章中提到的那样,通用商业语言(UBL)OASIS技术委员会在2001年10月17日宣告成立.UBL是用于商业交易的文档库,它是从中小型组织以及大型组织的角度来设计的.UBL背后的委员会(UBL TC)对他们的雄心作了极佳的概括: UBL

调试U-Boot笔记(十)

   前面学习了NorFlash的芯片手册,了解了NorFlash的擦除与编程流程.与u-boot源代码对比,符合NorFlash的指令流程.     擦除指令序列为:          [0xAAA] = AA     [0x554] = 55     [0xAAA] = 80     [0xAAA] = AA     [0x554] = 55     [SectorAddr] = 30     对应在flash.c文件里的源代码为:          在状态判断时,从刚擦除的扇区地址上读取数

linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系

按各地址起作用的顺序,uboot引导linux内核启动涉及到以下地址: load address: entry point: 这两个地址是mkimage时指定的 bootm address:bootm为uboot的一个命令,以此从address启动kernel kernel运行地址:在具体mach目录中的Makefile.boot中指定,为kernel启动后实际运行的物理地址 mkimage -n 'linux-3.2.1' -A arm -O linux -T kernel -C none -

u-boot源码分析

本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: 1.u-boot工程的总体结构 2.u-boot的流程.主要的数据结构.内存分配. 3.u-boot的重要细节,主要分析流程中各函数的功能. 4.基于FS2410板子的u-boot移植.实现了NOR Flash和NAND Flash启动,网络功能. 这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读.下面主要以smdk2410为分析对象. 一.u-boot工程的总体结构: 1.源代码组织 对于ARM而言,主要的目

jQuery动态效果显示人物结构关系图的方法

  这篇文章主要介绍了jQuery动态效果显示人物结构关系图的方法,涉及jQuery操作json结构数据及鼠标事件的技巧,需要的朋友可以参考下 这是一个人物关系图,可动态展示,效果非常漂亮.点击文字可出现动态关系图的转换效果. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48