文件分類 |
文件名稱 |
源文件 |
作用 |
|
公有文件 |
私有文件 |
|||
Boot ROM |
- |
- |
- |
處理器製造時,燒寫到內部的一段固定的代碼,通過判斷引導配置引腳,選擇第一個外部引導代碼。 |
XLDR |
XLDRNAND.nb0 |
platform.c startup.s jumpto.s |
main.c |
NANDFlash上的第一段代碼,用於選擇第二段外部引導代碼。 |
XLDRSD.nb0 |
sdmain.c |
位於SD卡,用於選擇第二段外部引導代碼。 |
||
MLO |
MLO |
- |
是XLDRSD.nb0的實際的文件名。 |
|
EBOOT |
EBOOTND.nb0 |
main.c menu.c stub.c flashmenu.c mmu.c startup.s jumpto.s |
flash.c cfg.c |
位於NANDFlash上的第二個分區,用於引導內核的啓動。 |
EBOOTSD.nb0 |
flash.c cfg.c |
位於SD卡,用於引導內核啓動。 |
||
LOGO |
Logo.nb0 |
- |
開機LOGO |
|
NK |
NK.bin |
- |
內核鏡像 |
從NANDFlash啓動的過程:
(1) 首先執行startup.s的代碼,拷貝數據段和代碼段到SRAM,最後跳轉到main.c中的XLDRMain()函數運行。
(2) main.c中的XLDRMain()函數,首先將NANDFlash中的EBOOTND.nb0拷貝到內存中,最後調用jumpto.s中的jumpto函數跳轉到EBOOTND.nb0的Starup.s處運行。
(3) 在startup.s中主要激活MMU然後跳轉到EBOOT的main函數運行。
(4) Main函數中使能設備時鐘,執行BootloaderMain()函數,BootloaderMain()函數位於platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平臺,然後執行OEMPreDownload ()函數。最後調用函數OEMLaunch(),啓動內核。
(5) OEMPreDownload ()函數位於main.c文件中,初始化鍵盤,顯示開機LOGO,設置NANDFlash的引導保留塊(0~13),讀取引導配置(EBOOT區域的最後一個sector),讀取按鍵值shift+NO(只在插入可啓動的SD時有效)或shift+*,如果按下shift+*,顯示菜單,進行菜單中的相關操作。然後調用函數OALKitlDeviceType(),判斷是將從SD卡還是從NANDFlash下載內核到內存運行。
從SD卡啓動的過程:
(1) 首先執行startup.s的代碼,拷貝數據段和代碼段到SRAM,最後跳轉到sdmain.c中的XLDRMain()函數運行。
(2) sdmain.c中的XLDRMain()函數,首先將SD卡中的EBOOTSD.nb0拷貝到內存中,最後調用jumpto.s中的jumpto函數跳轉到EBOOTSD.nb0的Starup.s處運行。
(3) 在startup.s中主要激活MMU然後跳轉到EBOOT的main函數運行。
(4) Main函數中使能設備時鐘,執行BootloaderMain()函數,BootloaderMain()函數位於platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平臺,然後執行OEMPreDownload ()函數。最後調用函數OEMLaunch(),啓動內核。
OEMPreDownload ()函數位於main.c文件中,初始化鍵盤,顯示開機LOGO,設置NANDFlash的引導保留塊(0~13),讀取引導配置(EBOOT區域的最後一個sector),讀取按鍵值shift+NO(只在插入可啓動的SD時有效)或shift+*,如果按下shift+*,顯示菜單,進行菜單中的相關操作。如果按下shift+NO,依次燒寫xldrnand.nb0,ebootnd.nb0,nk.bin, logo.nb0到Flash的對應分區,然後調用函數OALKitlDeviceType(),判斷是將從SD卡還是從NANDFlash下載內核到內存運行。