天天看點

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不能直接把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,裝置驅動,應用等等,都可開始按部就班開發。

本文轉自 zjb_integrated 51CTO部落格,原文連結:http://blog.51cto.com/zjbintsystem/279709,如需轉載請自行聯系原作者

繼續閱讀