dm365启动分析以及RBL、UBL、Uboot的简单介绍
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
?
如果能正常啟動的話內核就下載成功了。
總結
以上是生活随笔為你收集整理的dm365启动分析以及RBL、UBL、Uboot的简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于英伟达显卡驱动程序(GeForce)
- 下一篇: 高级编程语言的发展