|
啟動(dòng)代碼是系統(tǒng)上電或復(fù)位以后運(yùn)行的第一段代碼,它的作用是在用戶程序運(yùn)行之前對系統(tǒng)硬件及軟件運(yùn)行環(huán)境進(jìn)行必要的初始化并在最后使程序跳轉(zhuǎn)到用戶程序,它直接面對ARM 處理器內(nèi)核及硬件控制器進(jìn)行編程,所執(zhí)行的操作與具體的目標(biāo)系統(tǒng)緊密相關(guān)。
S3C2440 支持兩種方式的啟動(dòng):Nor Flash 啟動(dòng)和Nand Flash 啟動(dòng)。Nor Flash 和Nand Flash 都是非易失性存儲(chǔ)器,Nor Flash 的特點(diǎn)是芯片內(nèi)執(zhí)行,程序可以直接在其中運(yùn)行,而不必將程序讀取到RAM 中運(yùn)行。Nor Flash 雖然具有這個(gè)優(yōu)點(diǎn),但是它的性價(jià)比遠(yuǎn)低于Nand Flash,因而很多系統(tǒng)采用Nand Flash 啟動(dòng)。Nand Flash 的特點(diǎn)是采用非線性存儲(chǔ)模式,程序無法在其中運(yùn)行,它只能作為程序或數(shù)據(jù)的存儲(chǔ)載體,存儲(chǔ)在其中的程序只能先拷貝到RAM 中才能運(yùn)行。 從Nor Flash 啟動(dòng)時(shí),與nGCS0 相連的Nor Flash 就被映射到nGCS0 片選的空間,其地址被映射為0x00000000;從Nand Flash 啟動(dòng)時(shí),S3C2440 芯片內(nèi)部自帶的一塊容量為4K 的被稱為“Steppingstone”(“起步階石”)的BootSRAM 被映射到nGCS0 片選的空間,其地址被映射為0x00000000。當(dāng)系統(tǒng)上電或復(fù)位時(shí),程序會(huì)從0 地址處開始執(zhí)行,因此我們編寫的啟動(dòng)代碼要確保存儲(chǔ)在0 地址處。
當(dāng)啟動(dòng)方式為Nor Flash 啟動(dòng)時(shí),沒有額外需要考慮的問題,因?yàn)檫@種情況下程序在系統(tǒng)啟動(dòng)前就存儲(chǔ)在Nor Flash 中,我們只要保證將啟動(dòng)代碼保存在Nor Flash 開始的位置即可,系統(tǒng)上電或復(fù)位時(shí),0 地址處的啟動(dòng)代碼就會(huì)被執(zhí)行。
在啟動(dòng)方式為Nand Flash 啟動(dòng)的情況下,系統(tǒng)啟動(dòng)前所有的程序存儲(chǔ)在Nand Flash 中,系統(tǒng)的啟動(dòng)過程稍微有點(diǎn)復(fù)雜:系統(tǒng)上電或復(fù)位時(shí),0 地址處為S3C2440 內(nèi)部自帶的BootSRAM,啟動(dòng)前里面沒有任何存儲(chǔ)內(nèi)容,啟動(dòng)后S3C2440 先通過硬件機(jī)制將Nand Flash 前4K 的內(nèi)容拷貝至其中,然后再運(yùn)行里面的程序(從0 地址處)。這種情況下我們需要保證將啟動(dòng)代碼保存在Nand Flash 開始的位置,并且啟動(dòng)代碼的大小要小于4K。如果系統(tǒng)的所有程序在編譯鏈接后的大小小于4K,那在系統(tǒng)的啟動(dòng)代碼中無需考慮將程序從Nand Flash 搬運(yùn)到SDRAM 這個(gè)問題,因?yàn)樗械某绦蛟趩?dòng)時(shí)即全部由Nand Flash 拷貝至BootSRAM,程序在BootSRAM 中運(yùn)行即可;如果系統(tǒng)的所有程序在編譯連接后的大小大于4K,那在系統(tǒng)的啟動(dòng)代碼中需要包含一段將系統(tǒng)的全部程序從Nand Flash 搬運(yùn)到SDRAM 的代碼,因?yàn)橄到y(tǒng)啟動(dòng)時(shí)只將Nand Flash 的前4K 拷貝到了BootSRAM 中,還有部分程序保存在Nand Flash 中, Nand Flash 中是無法運(yùn)行程序的,需要將所有程序拷貝至SDRAM 并在其中運(yùn)行,所以在系統(tǒng)的啟動(dòng)代碼中要包含這段有關(guān)程序拷貝的代碼,并在所有程序拷貝完成后使程序跳轉(zhuǎn)到SDRAM 中運(yùn)行。也就是說在啟動(dòng)方式為NandFlash 啟動(dòng)的情況下,因?yàn)镹and Flash 的特性,程序需要涉及到兩次的搬移,一次是從Nand Flash 搬移到BootSRAM,搬運(yùn)的程序量大小是4K,目的是使系統(tǒng)能夠啟動(dòng);第二次搬運(yùn)是從Nand Flash 搬運(yùn)到系統(tǒng)的SDRAM,如果系統(tǒng)的所有程序量小于4K,這一步可以省略,搬運(yùn)的程序量大小是系統(tǒng)的所有程序,目的是使程序在SDRAM 中運(yùn)行。第一次搬運(yùn)是S3C2440 通過硬件機(jī)制自動(dòng)實(shí)現(xiàn)的,我們無需干預(yù),第二次則需要我們程序員來實(shí)現(xiàn)。
|
|