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). 执行指令,这个地址就是NAND FLASH NOR FLASH的片选起始地址。当你的系统设置为NAND BOOT的时候,UBL User Boot Loader )是必不可少的,不然RBL不能直接把UBOOTBOOT起来,由于RBL只支持14K NAND FLASH BOOT程序,而UBOOT编译出来后的bin文件通常都大于80K,特别是版本越高,UBOOT的代码越大,因此这时候就须要写一个UBLUBL NAND FLASH 读取UBOOT,而后把UBOOT COPY DDR2(RAM)的相关地址上,而后把UBOOT BOOT 起来。根据TI DAVIN RBL的规定,不一样型号的NAND FLASHUBL保存的地址是不一样的,512字节PAGE NAND(即SMALL PAGE),保存的地址是:0x000040002048字节PAGENAND (即LARGE PAGE)保存的地址是:0x20000。至于如何经过XDS560仿真器烧写UBL或经过UART BOOT烧写UBL,本人放在DAVINCI UBOOT移植的文章介绍。(提示:RBLUBL不要混淆!多看看BOOT的顺序图。)
UBL的移植,比较简单,固然,前提条件你已经搭好交叉编译环境。进入UBL文件包最上层的文件夹,使用make 就能够编译出:ubl_davinci_nand.binUBL主要有:
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 指定UBLSECTIONSUBL自己的入口地址;
ubl.c:从selfcopy函数开始运行,COPY本身到RAM,而后跳到正常入口地址,执行boot(),main()等函数,调用DM644xInit()COPY UBOOTRAM相关地址,最后执行UBOOT的入口地址(EntryPoint),这时UBOOT就能够运行了。
dm644x.c:主要配置最小系统,好比关中断、PLL1PLL2设置、DDR2 时序设置、UART设置,等等。
util.c:是一些相关的malloc等公共函数。
nand.c:主要是NAND FLASH的驱动;
nandboot.c:主要是实现NAND_Copy,把UBOOTNAND COPY到相应的DDR2(RAM)里。
UBL要移植的东西不是不少,主要是在dm644x.c里要定义好:
Uint32 PLL1_Mult = 22;  // DSP=594 MHz for DM6446DM6441通常使用Uint32 PLL1_Mult = 19;  // DSP=513 MHz。在PLL2Init()函数里,使用不一样型号的DDR,要设置不一样的参数,即时序参数等,这是关键的地方。
Nand.cnand.h主要移植就是定义好UBOOTNAND的存储地址,不一样型号的NAND FLASH ,好比SMALL PAGE512字节)和LARGE PAGE2048字节)这些都要修改除非你的NAND的类型和TI EVM 兼容。
nandboot.c主要任务就是如何把u-boot.bin或带有头的u-boot.img正确COPYDDR里,这里最容易出问题,编译出来的U-BOOT文件通常带有Valid magic numberMAGIC_NUMBER_VALID),入口地址entrypaoit,这些信息不对都使UBOOT 运行不起来,建议看一下或COPY UBOOTp_w_picpath.h
本人在本身设计的开发板上实现UBL的移植。UBLUBOOT运行起来,不少事情均可以作了,LINUX KERNELROOTFSNFSDSP,设备驱动,应用等等,均可开始循序渐进开发。
本文出自 “ 集成系统-人生观” 博客,请务必保留此出处 http://zjbintsystem.blog.51cto.com/964211/279709