Wince NANDFlash啓動和SD卡啓動過程分析

 

文件分類

文件名稱

源文件

作用

公有文件

私有文件

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下載內核到內存運行。
發佈了35 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章