<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    RBL, UBL, Uboot的關系

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    RBL, UBLUboot的關系

    1)RBL=ROM Bootloader,UBL=user Bootloader。

    2)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點將闡述如何得到這個文件)就行了。


    UBL的程序設計,相對UBOOT、KERNEL、ROOTFS、設備驅動、DSP開發來說,還是比較簡單。我們先從DAVINCI的啟動說起,了解UBL在DAVIN系統中的位置和作用。對于固件程序燒寫在NAND FLASH 的Davinci dm644x嵌入式系統, 上電啟動的過程如下:

     RFID設備管理軟件

     

     

     

    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把UBOOT運行起來,很多事情都可以做了,LINUX KERNEL,ROOTFS,NFS,DSP,設備驅動,應用等等,都可開始按部就班開發。RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全