s3c2440 s3c6410和s5pv210啓動過程區別

參考https://www.cnblogs.com/gary-guo/p/5738799.html

以下都以nandflash爲例

A)s3c2440

1) IROM 無只考慮nandflash啓動

2)IRAM(就是BootSRAM),4K

3)內存SDRAM 0x3000 0000

以下爲2440的mem map,左邊表示我們選擇從Nor flash啓動時,地址的佈局,右邊表示我們從Nandflash啓動時,地址的佈局

對2440來說有個steppingstone(4k),也即是右邊的BootSRAM

當處理器上電後,它會從哪兒去取它的第一條指令呢,它會從0地址處去取第一條指令;

如果我們是從nor flash啓動,那麼0地址處應該安排我們的nor flash,那麼我們的代碼應該放在nor flash的最前端,否則,cpu去取指令,發現沒有指令或者錯誤指令,那麼cpu 也沒有辦法繼續運行了。

如果我們從nandflash啓動,從右邊表中沒有看到nandflash,而且nandflash它不能直接訪問,也就是說不能像內存一樣直接去訪問它,它必須通過一些寄存器才能訪問到,所以說它不能直接參與arm處理器的統一編址,也就在上面右邊看不到了,那麼nandflash沒有參與統一編址,那麼0地址處安排的是什麼呢?0地址處排布的是BootSRAM,它實際上是處理器片內的一個RAM,它有4kb的大小,它還有一個名字叫做stepping stone,“墊腳石”。那麼它是沒有統一編址的nandflash是什麼關係呢?實際上,我們一旦上電之後,且選擇從nandflash啓動之後,我們的處理器首先會自動地把nandflash最前端的4kb數據複製到stepping stone裏面去,那麼我們的處理器就間接地取到了nandflash裏面的內容,然後cpu再去運行stepping stone裏面的代碼,實際上cpu就是運行的nandflash裏面最前端的4kb的內容,那麼硬件自動複製了nandflash前面的4kb過來,通過我們的bootloader不只有4kb,那剩下的bootloader怎麼辦呢?那麼剩下的部分就要複製到內存裏面來了,因爲stepping stone已經存不下了,那麼誰來做複製這個工作呢?當然就是前面的4kb的bootloader,它除了做一些硬件上的初始化,它還必須把剩下的代碼複製到內存,且運行完stepping stone裏面的4kb程序之後,然後跳轉到內存裏面去執行下面的代碼。

那麼我們還得關心我們的內存,那麼內存在什麼地方呢?

B)s3c6410:

1)IROM(0x0800 0000)64M 只用了32K作爲BL0,  0地址映射到IROM   

2)IRAM (0x0C00 0000)64M 只用了8K,加載BL1,作爲steppingstone

2)內存DRAM(0x5000 0000) 加載BL2

 

我們已經知道nandflash啓動是屬於IROM啓動當中的一種,我們上電之後,我們選擇從IROM啓動,我們IROM映射到0地址處,所以我們的處理器首先是從IROM當中去取第一條指令,IROM裏面存放的是什麼東西呢?其實IROM裏面存放的是芯片廠商給我們固化好了的一些程序,這個程序通常稱爲BL0,即bootloader的第0階段。這段代碼除了做一些硬件的初始化外,它還會做一些工作,把我們nandflash裏面的bootloader1,BL1,是nandflash最前面的8KB,拷貝到我們的stepping stone裏面來運行,那麼我們的BL1就到我們的stepping stone裏面來運行了,在運行的過程當中,我們的bootloader不止8KB還有一段程序留在nandflash裏面,那麼我們的BL1就會把nandflash剩餘的bootloader,即BL2拷貝到SDRAM裏面來運行,

 

C)s5pv210:

1)IROM(0XD000 0000) ,大小爲64KB,對於0地址處,是啓動區域,也是採用的映射方式,與6410一樣;

2)IRAM(,0xD002 0000),大小96KB,加載 BL1+BL2,steppingstone;

3)SDRAM:(0x2000 0000),加載剩下的BL2 ,


由於nandflash是IROM的一個分支,所以他是從IROM方式來啓動的,處理器上電後,因爲IROM被映射到了0地址處,所以說我們的處理器會從IROM當中去取到第一條指令,IROM當中的代碼是芯片廠商已經固化好了的程序,其作用在於初始化一些硬件,然後拷貝nandflash裏面的bootloader1即,BL1,的內容到芯片內部的IRAM(SRAM,也就是墊腳石),它的大小爲96kb,由於墊腳石比較大,所以我們把nandflash裏面的BL2拷貝到墊腳石裏面來,如果說nandflash裏面還有bootloader,那麼就把它拷貝到內存SDRAM裏面去,注意對於BL1的大小爲16KB,那麼BL2最大爲80KB,即如果BL2的內容超過了80kb,就要往內存裏面複製了。最後我們的bootloader要麼在IRAM中運行,要麼在內存中運行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章