TI Davinci DM6446开发攻略——UBL移植
来源:互联网 发布:cms网站管理系统 在线 编辑:程序博客网 时间:2024/04/30 08:12
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zjbintsystem.blog.51cto.com/964211/279709
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的移植。UBL把UBOOT运行起来,很多事情都可以做了,LINUX KERNEL,ROOTFS,NFS,DSP,设备驱动,应用等等,都可开始按部就班开发。
本文出自 “集成系统-踏上文明的征程” 博客,请务必保留此出处http://zjbintsystem.blog.51cto.com/964211/279709
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——UBL移植
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- TI Davinci DM6446开发攻略——开发环境搭建
- 图
- Channel.me:这是一个神奇的网站
- 屏蔽跑跑卡丁车结束后的广告
- 70个新鲜实用的JavaScript和Ajax技术(下)
- ERROR:Application requires API version 12.Device API version is 11 (Android 3.0).
- TI Davinci DM6446开发攻略——UBL移植
- extjs4.0.2a gridpanel看不到横向滚动条的一种原因
- 扩大TCP的连接数
- 寂寞虚空从不存在
- C#中使用ref和out一点认识!
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- Davinci DM6446开发攻略——u-boot-1.3.4移植(1)
- dump文件定位程序崩溃代码行
- TLB和cache