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

    UBL的程序设计,相对UBOOT、KERNEL、ROOTFS、设备驱动、DSP开发来说,还是比较简单。我们先从DAVINCI的启动说起,了解UBL在DAVIN系统中的位置和作用。对于固件程序烧写在 NAND FLASH Davinci dm644x 嵌入式系统, 上电启动的过程如下:
 TI Davinci DM6446开发攻略――UBL移植_第1张图片
 
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 ,设备驱动,应用等等,都可开始按部就班开发。

你可能感兴趣的:(休闲,ti,Davinci,UBL,DM6446)