2010-07-18 21:30:27| 分類: WinCE | 標(biāo)簽: |字號大中小 訂閱
S3C2410處理器支持將啟動(dòng)代碼存儲(chǔ)在NAND Flash中。為了實(shí)現(xiàn)這一功能,2410配備了一個(gè)名為“Steppingstone”的內(nèi)部SRAM。在啟動(dòng)時(shí),NAND Flash中第一個(gè)4K字節(jié)的內(nèi)容將被加載到Steppingstone中并執(zhí)行。這個(gè)工作由MCU主動(dòng)完成,而我們只需將NAND Flash配置為Auto Boot模式即可。
一般來說,啟動(dòng)代碼會(huì)拷貝存儲(chǔ)在NAND Flash中的內(nèi)容至SDRAM中。在使用ECC校驗(yàn)時(shí),NAND Flash中數(shù)據(jù)的有效性將被確認(rèn)。在完成拷貝的工作后,啟動(dòng)代碼將跳轉(zhuǎn)到已加載到SDRAM中的主程序中,這時(shí)啟動(dòng)代碼的使命完成,MCU由主程序來控制。
WinCE操作系統(tǒng)從文件的組成來看一般分為兩部分:BOOTLOADER和NK.bin。在WinCE中,BOOTLOADER一般為EBOOT。它的主要功能是初始化硬件設(shè)備,主要包括CPU內(nèi)部的相關(guān)控制器、內(nèi)存、網(wǎng)絡(luò)、串口甚至USB口和LCD。在初始化完成后,它將通過網(wǎng)絡(luò)或USB從外部下載NK.bin,或從本地Flash中加載NK.bin并執(zhí)行,從而啟動(dòng)WinCE操作系統(tǒng)??梢钥吹?/span>Eboot雖然是啟動(dòng)代碼,但它得完成相當(dāng)多的工作,最終的映像文件也將超過4K。所以,我們不能直接將Eboot存放在NAND Flash的第一個(gè)4K字節(jié)中。我們需要一個(gè)更小的啟動(dòng)代碼,這就是通常所說的NBOOT(NAND BOOT)。
通過上面的介紹,我們知道了NBOOT在整個(gè)系統(tǒng)中扮演的角色,它負(fù)責(zé)將EBOOT加載到內(nèi)存并運(yùn)行。在EBOOT開始執(zhí)行后,NBOOT就退出了歷史的舞臺(tái),事實(shí)上也不再有上場的機(jī)會(huì)。
在NBOOT的代碼實(shí)現(xiàn)中,我們必須完成以下幾個(gè)部分。
1. 初始化CPU內(nèi)部相關(guān)控制器,如設(shè)置GPIO,關(guān)閉Watch Dog,關(guān)閉中斷,設(shè)置系統(tǒng)時(shí)鐘。
2. 初始化內(nèi)存。
3. 初始化串口,主要用來輸出調(diào)試信息。
4. 初始化NAND Flash,因?yàn)樵?/span>MCU啟動(dòng)時(shí)默認(rèn)是Auto Boot模式,為了從NAND Flash中讀取EBOOT,需要將其配置成 NAND Flash Mode。
5. 讀取NAND Flash中的EBOOT映像文件,并放在內(nèi)存指定的位置,這個(gè)地址是跟EBOOT有關(guān),介紹EBOOT時(shí)再詳細(xì)說明。
6. 完成讀取之后,跳轉(zhuǎn)到EBOOT的起始位置,執(zhí)行EBOOT代碼。
一般來說,前面兩個(gè)功能在startup.s中實(shí)現(xiàn),WinCE6.0下可以參考文件C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT"startup.s的相關(guān)代碼。后面四個(gè)功能可在main.c中實(shí)現(xiàn)??傊?,在實(shí)現(xiàn)必備功能的情況下,盡可能減少代碼量,以將最后的NBOOT映像文件控制在4K以內(nèi)。
NBOOT的編譯環(huán)境一般有兩種,ADS1.2(或RVDS)、Platform Builder。用ADS1.2編譯NBOOT是比較方便的,需要注意的就是RO Base和RW Base的設(shè)置,RO Base必須設(shè)置為0x0。否則,系統(tǒng)啟動(dòng)時(shí)NBOOT將不被運(yùn)行。在Post-Linker中選擇ARM from ELF,在Linker——ARM fromELF——Output Format中選擇Plain Binary,這樣,編譯完成后最終生成NBoot.bin。該文件就可以固化在NAND Flash的第0個(gè)BLOCK中。Platform Builder 6.0是作為VS2005的插件來用的,所以,我們現(xiàn)在也可以用VS2005來編譯NBOOT,這樣就免得再安裝ADS或RVDS等軟件。用VS2005來編譯NBOOT也有兩種方法,第一種跟編譯EBOOT映像文件類似,第二種是自己寫makefile文件,然后用命令行的方式調(diào)用ARM編譯器來編譯。兩種方法各有優(yōu)點(diǎn),第一種方法在編譯OS時(shí),會(huì)自動(dòng)編譯生成映像,而第二種方法可由ADS下的程序直接移植過來,不過,要寫好makefile文件是相當(dāng)困難的事情。一般還是少用為好。
----------------------------------------------------------
eboot.nb0 eboot.bin nk.nb0 nk.bin .bin文件和.nb0文件的差別: .nb0是可以直接燒到FLASH/ROM中的,是代碼鏡像,可以直接跳轉(zhuǎn)到其入口執(zhí)行。 兩個(gè)都是CE的鏡像,通過串口直接下載用nb0,pb下載用bin,nb0文件要大一些。 nb0是非壓縮的數(shù)據(jù),里面的數(shù)據(jù)是實(shí)際的NK展開以后在內(nèi)存里面的數(shù) |
聯(lián)系客服