现在的位置: 首页 > 综合 > 正文

dm365启动分析以及RBL、UBL、Uboot的简单介绍

2013年10月09日 ⁄ 综合 ⁄ 共 3271字 ⁄ 字号 评论关闭

dm365启动方式有许多种,我们的板子上面有一个拨码开关,EM_A[13:11]用来选择启动方式,参照tm320dm365的原理图,启动方式有:

EM_A[13:11]

BOOT from

000

ROM(NAND):从NAND flash启动

001

AEMIF:外部存储器接口启动

010

ROM(MMC/SD):SD卡启动

011

ROM(UART):串口UART启动

100

ROM(USB):USB启动

101

ROM(SPI);SPI启动

110

ROM(EMAC):网口启动

111

ROM(HPI):HPI启动

注:EMIF是指外部存储器接口,Externel Memory Interface,EMIF可实现DSP与不同类型存储器的连接。参考:http://baike.baidu.com/view/1924708.htm

HPI:是一个与主机通信的并行接口,HostPort Interface。主要用于DSP与其他总线或CPU进行通信。参考:http://baike.baidu.com/view/1049410.htm

 

在datasheet中有:

 

这里OneNAND/NOR Boot就是AEMIF启动。

 

启动的话我们主要是使用NAND启动和串口启动。我们在烧写UBL和U-Boot的时候是通过串口烧写的,所以需要将这个拨码开关设置为011,此时通过串口将UBL和U-Boot烧写到Flash中。而烧写完成后下载内核时,我们需要将拨码开关设置为NAND启动模式000,此时,下载内核就是从Flash启动了。

 

RBL:ARM ROM Boot Loader,UBL:UserBootloader

RBL是TI固化在芯片ROM中的bootloader。DM365上电启动后会先运行RBL,然后通过RBL加载UBL,再通过UBL加载uboot,而uboot是用来加载linux内核的。UBL是一级Bootloader,Uboot是二级Bootloader。

UBL是TI自己写的一小段程序,这段程序用于初始化PLL、DDR以及其他的一些外设,然后进行将代码从flash拷贝到DDR的功能。UBL大小是有限制的,因此才有二级Bootloader。

参考:http://bbs.ednchina.com/BLOG_ARTICLE_3009260.HTM

http://blog.csdn.net/jaylondon/article/details/6579169

 

参考这个链接:http://www.eefocus.com/bbs/article_1087_380415.html

前面已经写过了RBL、UBL、Uboot的简单介绍。

这个链接中写:RBL只支持14K NAND FLASH的BOOT程序。

但是实际上我看UBL_DM36x_NAND.bin文件已经有20KB了,Uboot编译的bin文件已经是302KB。

但是不管怎么样,RBL应该是不能boot这么大的uboot的,所以需要UBL。UBL从NAND flash读取uboot(需要我们先烧写到nand中),然后将uboot复制到DDR的相关地址上,然后把uboot给boot起来。

根据TI davinci RBL的规定,不同型号的NAND Flash,UBL保存的地址是不同的,512字节PAGE的NAND,保存的地址是:0x000040000;2048字节page的NAND,保存的地址是:0x00020000.

 

我们使用的NAND Flash是:MT29F16G08FAAWC:A,查阅datasheet可知,

page size:2112 bytes(2048+64 bytes)

block size:64 pages(128K +4K bytes)

plane size:2048 blocks

devices size:16Gb:16384 blocks

因此,我们使用的是16G:16384*128K*8b=16G bits

 

 

因此按照上面的说明,RBL已经固化在芯片中了,我们只需要烧写UBL和Uboot就行了。下面说明如何烧写:

参看强哥给的:dm365操作系统下载说明.txt

这里我按照我自己搭建的环境写:

在/home/下建立一个davinci的文件夹,方便以后好找。

先将/home/dm365/dm365/dvsdk_4_02_00_06/psp/board_utilities/serial_flash/dm365/下的文件sfh_DM36x.exe、UBL_DM36x_NAND.bin拷贝到/home/davinci文件夹下。

 

注:sfh_DM36x.exe是TI提供的flash串行烧写程序,位于TI安装目录/home/lvfly/dm365/dvsdk_dm365_4_02_00_06/psp/board_utilities/serial_flash/dm365下

UBL_DM36x_NAND.bin是TI提供的UBL二进制文件(也提供了源码),我们不需要修改就可以使用。

 

同时将u-boot.bin拷贝到/home/davinci/文件夹下。这里有一点疑问:在../psp/prebuilt_images/文件夹下有一个u-boot-dm365-evm.bin文件,而在../psp/u-boot-2010.12/文件夹中有一个u-boot.bin文件,按照强哥所说:这两个文件是一样的,我查看了下properties,大小是一样的,都是302.6KB(309880 bytes).

 

强哥说uboot需要修改,但是现在我还不知道怎么改。2013.5.13

 

下载UBL和Uboot:

1.首先需要擦写flalsh(在terminal下执行)

命令:/home/davinci/sfh_DM36x.exe -nanderase -v -p /dev/ttyUSB0

 /dev/ttyUSB0代表USB转串口设备,名称和具体插入的串口设备相关(也可能是/dev/ttyUSB1),可通过dmesg | grep ttyUSB* 查看

 

注意:由于TI软件的bug,该命令需要执行两次

 

2.烧写flash

命令:/home/davinci/sfh_DM36x.exe -nandflash/home/davinci/UBL_DM36x_NAND_backup.bin /home/davinci/u-boot.bin -v -p/dev/ttyUSB0

 

注意:由于TI软件的bug,该命令需要执行两次

 

然后就可以下载内核了。

Linux内核的下载:

内核的下载此时需要将拨码开关调至NAND启动000,然后在docklight工程中操作。

执行的命令如下:

setenv nfshost192.168.0.120           //这个是你的主机的ip

setenv serverip 192.168.0.120     //这个也是主机ip

setenv ipaddr 192.168.0.248       //这个是板子的ip

setenv bootargs mem=60M console=ttyS0,115200n8 root=/dev/nfs rwnfsroot=192.168.0.120:/home/dm365/dm365/dvsdk_dm365_4_02_00_06/filesystem/dm365rootfsip=dhcp dm365_imp.oper_mode=0 davinci_capture.device_type=1davinci_enc_mngr.ch0_mode=pal

setenv rootpath /home/dm365/dm365/dvsdk_dm365_4_02_00_06/filesystem/dm365rootfs

setenv bootfile uImage-dm365-evm.bin

setenv bootcmd 'dhcp;bootm'

setenv ethaddr 12:34:56:78:9a:bc

tftp 0x80700000 uImage

bootm

 

如果能正常启动的话内核就下载成功了。

抱歉!评论已关闭.