源地址:http://blog.csdn.net/chlputi/archive/2011/05/11/6411004.aspx
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(16K,32頁) ; 2048 字節 PAGE 的 NAND (即 LARGE PAGE )保存的地址是: 0x20000 (128K,64頁)。
------------------------------------------------------我想說的話-----------------------------------------------------------------------
看來TI的片子與三星的有所不同。
據我瞭解,三星的片子上電後會自動從nandflash中搬移4kb到RAM,然後這4K的程序會完成後面的搬移工作。
而TI的片子,說RBL會從nand裏執行指令,所以先nand的頭上要放個ubl來幫助uboot boot起來。
不知道我這樣理解是否正確。
——————————————————————————————————————————————
2011-8-11 添加
RBL, UBL, Uboot的關係:RBL=ROM Bootloader,UBL=user Bootloader。RBL爲TI固化在芯片ROM中的bootloader,OMAP上電啓動過後首先將運行RBL,然後通過RBL加載UBL,再通過UBL加載uboot,而uboot就是用來加載Linux內核的。如果在具體應用過程中不需要使用到Linux(實際上一般都會用到的),uboot甚至是UBL都可以省去。UBL爲一級Bootloader,uboot爲二級Bootloader,一級Bootloader的大小是有限制的(應該是64KB以下,沒查到具體數值),這也是爲什麼會有二級Bootloader的原因。如果一個應用程序小於這個大小,那麼我們可以不需要燒寫UBL,而只用燒寫該應用程序相應的bin文件(下面第3點將闡述如何得到這個文件)就行了。