理清一下Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的關係
一、在掌上型電腦裡要使用NAND FLASH儲存資料和程式,但是必須有NOR FLASH來啟動。除了SAMSUNG處理器,其他用在掌上型電腦的主流處理器還不支援直接由NAND FLASH啟動程式。因此,必須先用一片小的NOR FLASH啟動機器,再把OS等軟體從NAND FLASH載入SDRAM中運行。
二、Bootloader的概念就是一個用於引導的loader,在系統上電的時候最先被運行,然後對硬體平台做最基本的初始化,最後把作業系統載入起來。不同的嵌入式作業系統都有自己的Bootloader,但是本質功能都是一樣的。
三、在WinCE中用的最多的就是EBOOT,是一個基於網路的Bootloader,而且可以根據需要帶有命令列菜單功能,網路調試功能以及檔案系統的相關功能。在這裡我只談ARM平台的引導,一般基於不同的硬體設計,會有不同的引導方式:
1、NORFlash Boot:一般ARM處理器的片選0都會接有NORFlash,這樣在ARM上電以後,會從0地址開始執行程式,也就是從NORFlash的0地址開始執行。所以把EBOOT燒到NORFlash的0地址開始的地方,這樣在上電以後,EBOOT在NORFlash裡面開始執行,也可以自拷貝到SDRAM中執行。最後載入WinCE image並運行。
2、NANDFlash Boot with EBOOT:由於NORFlash容量小,價格貴,現在很多ARM處理器支援NandFlash引導。不同廠家的處理器對Nandflash的引導略有區別,具體要看datasheet。但是本質就是先從Nandflash中讀出一個小的Loader來運行,這個Loader再從Nandflash中載入EBOOT到SDRAM中運行,最後EBOOT載入WinCE image,就是NK.bin。
a、如果在NandFlash引導的時候不需要EBOOT,也可以不用EBOOT。這樣就是系統啟動 後從Nandflash中載入一個小的Loader,小的Loader對硬體系統作基本的初始化,然後 直接載入WinCE image,一般應該是NK.nb0,然後運行。
3、這裡來說一下NK.bin與NK.nb0,兩個不同的WinCE image。
a、NK.nb0:就是一個可以直接啟動並執行WinCE映像檔案,直接拷貝到SDRAM中就可以運行。
b、NK.bin:被稱為Windows CE binary image data format檔案格式,是一種包含了多個獨立紀錄(Section)的二進位檔案。在載入的時候,需要分別載入,不同的Section載入到不同的地方。所以NK.bin需要Bootloader進行解釋性載入。但是他的Size會比NK.nb0小。可以使用viewbin命令查詢NK.bin中的紀錄資訊。
nboot,eboot和uboot三者均為bootloader。
----nboot是samsung系列cpu為了能將nondflash裡的前4KB程式複製到SRAM中運行,而寫的。nboot很小(小於等於4k),一般用在從nandflash啟動的情況,nandflash不支援xip,所以必須有一個可以執行的程式將燒寫在其中的eboot搬到記憶體中,nboot就是幹這個的。所以nboot一般配合eboot一起使用。
----eboot,即ethernet boot,因為起始時,都是通過網口更新的。現在大都加入了USB下載功能,eboot可以單獨使用,就是把eboot燒寫到norflash中,norflash支援xip,所以eboot可以自己把自己搬到記憶體中。
----uboot是linux下主要使用的,不過現在已經剝離開來,ce下已經可以移植了,只是用來debug的多,實際合入工程的少,畢竟與wince系統的契合度不高。
NOR:EBoot->WinCE(NK.bin)
NAND:NBOOT->EBoot->WinCE(NK.bin)
NAND:EBoot->WinCE(NK.nb0)