找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3382|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

S3C2440 啟動代碼分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72008 發(fā)表于 2015-1-12 02:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
啟動代碼是系統(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 支持兩種方式的啟動:Nor Flash 啟動和Nand Flash 啟動。Nor Flash 和Nand Flash 都是非易失性存儲器,Nor Flash 的特點(diǎn)是芯片內(nèi)執(zhí)行,程序可以直接在其中運(yùn)行,而不必將程序讀取到RAM 中運(yùn)行。Nor Flash 雖然具有這個優(yōu)點(diǎn),但是它的性價比遠(yuǎn)低于Nand Flash,因而很多系統(tǒng)采用Nand Flash 啟動。Nand Flash 的特點(diǎn)是采用非線性存儲模式,程序無法在其中運(yùn)行,它只能作為程序或數(shù)據(jù)的存儲載體,存儲在其中的程序只能先拷貝到RAM 中才能運(yùn)行。      從Nor Flash 啟動時,與nGCS0 相連的Nor Flash 就被映射到nGCS0 片選的空間,其地址被映射為0x00000000;從Nand Flash 啟動時,S3C2440 芯片內(nèi)部自帶的一塊容量為4K 的被稱為“Steppingstone”(“起步階石”)的BootSRAM 被映射到nGCS0 片選的空間,其地址被映射為0x00000000。當(dāng)系統(tǒng)上電或復(fù)位時,程序會從0 地址處開始執(zhí)行,因此我們編寫的啟動代碼要確保存儲在0 地址處。
      當(dāng)啟動方式為Nor Flash 啟動時,沒有額外需要考慮的問題,因為這種情況下程序在系統(tǒng)啟動前就存儲在Nor Flash 中,我們只要保證將啟動代碼保存在Nor Flash 開始的位置即可,系統(tǒng)上電或復(fù)位時,0 地址處的啟動代碼就會被執(zhí)行。

      在啟動方式為Nand Flash 啟動的情況下,系統(tǒng)啟動前所有的程序存儲在Nand Flash 中,系統(tǒng)的啟動過程稍微有點(diǎn)復(fù)雜:系統(tǒng)上電或復(fù)位時,0 地址處為S3C2440 內(nèi)部自帶的BootSRAM,啟動前里面沒有任何存儲內(nèi)容,啟動后S3C2440 先通過硬件機(jī)制將Nand Flash 前4K 的內(nèi)容拷貝至其中,然后再運(yùn)行里面的程序(從0 地址處)。這種情況下我們需要保證將啟動代碼保存在Nand Flash 開始的位置,并且啟動代碼的大小要小于4K。如果系統(tǒng)的所有程序在編譯鏈接后的大小小于4K,那在系統(tǒng)的啟動代碼中無需考慮將程序從Nand Flash 搬運(yùn)到SDRAM 這個問題,因為所有的程序在啟動時即全部由Nand Flash 拷貝至BootSRAM,程序在BootSRAM 中運(yùn)行即可;如果系統(tǒng)的所有程序在編譯連接后的大小大于4K,那在系統(tǒng)的啟動代碼中需要包含一段將系統(tǒng)的全部程序從Nand Flash 搬運(yùn)到SDRAM 的代碼,因為系統(tǒng)啟動時只將Nand Flash 的前4K 拷貝到了BootSRAM 中,還有部分程序保存在Nand Flash 中, Nand Flash 中是無法運(yùn)行程序的,需要將所有程序拷貝至SDRAM 并在其中運(yùn)行,所以在系統(tǒng)的啟動代碼中要包含這段有關(guān)程序拷貝的代碼,并在所有程序拷貝完成后使程序跳轉(zhuǎn)到SDRAM 中運(yùn)行。也就是說在啟動方式為NandFlash 啟動的情況下,因為Nand Flash 的特性,程序需要涉及到兩次的搬移,一次是從Nand Flash 搬移到BootSRAM,搬運(yùn)的程序量大小是4K,目的是使系統(tǒng)能夠啟動;第二次搬運(yùn)是從Nand Flash 搬運(yùn)到系統(tǒng)的SDRAM,如果系統(tǒng)的所有程序量小于4K,這一步可以省略,搬運(yùn)的程序量大小是系統(tǒng)的所有程序,目的是使程序在SDRAM 中運(yùn)行。第一次搬運(yùn)是S3C2440 通過硬件機(jī)制自動實現(xiàn)的,我們無需干預(yù),第二次則需要我們程序員來實現(xiàn)。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表