天天看點

Part4_lesson2---ARM處理器這個硬體啟動流程分析

1、啟動方式

s3c2440:可以從Nor flash啟動,Nor flash一般是2MB;也可以從Nandflash啟動,它一般是256MB,我們習慣上把我們的uboot,核心以及檔案系統都放到Nandflash裡面去,選擇開發闆從nandflash啟動。

當2440從nandflash啟動的時候,其位址布局是怎樣的呢?

打開晶片手冊

Part4_lesson2---ARM處理器這個硬體啟動流程分析
Part4_lesson2---ARM處理器這個硬體啟動流程分析

當處理器上電之後,它會從哪兒去取它的第一條指令呢,會從0位址處去取它的第一條指令。如果說是從nor flash來啟動,0位址處應該安排我們的nor flash,然後編寫的代碼應該放在nor flash的最前端,否則cpu去取指令會取不到。如果說從nandflash啟動的話,上圖右面看不到nandflash,由于我們的nandflash是不能直接通路的,它必須通過相應寄存器才能通路到,是以它不能直接 參與arm處理器的統一編址,那麼nandflash沒有參與統一編址,那麼0位址處又是安排的什麼呢,是bootsram,它是片内的sram,其大小為4kb,那麼到底bootsram和nandflash是什麼樣的關系呢,實際上bootsram還有一個名稱稱為steppingstone;實際上我們選擇從nandflash啟動後,一上電我們的處理器會首先自動從nandflash中把最前端的4kB複制到steppingstone裡面去,換句話說,就是處理器就間接取到了nandflash裡面的内容。由于我們的bootloader一般不止4KB,那麼nandflash後面的位元組該怎麼辦呢,那麼剩下的就要複制到記憶體裡面去了,那麼誰來做複制這個工作呢,就是前面的4KB裡面的代碼會做這個工作,那麼到底是不是這樣子操作的呢,到晶片手冊裡去搜尋steppingstone關鍵詞

Part4_lesson2---ARM處理器這個硬體啟動流程分析

s3c6410:打開晶片手冊S3C6410X,搜尋一個關鍵詞booting,

Part4_lesson2---ARM處理器這個硬體啟動流程分析

首先,它支援SROM啟動(也就是NOR flash啟動),在我們的6410當中沒有必要采用NOR flash啟動,并不是說它不支援nor flash啟動;然後,支援onenand方式啟動,它是一種特殊的nandflash,它既具有nor flash的特性,也具有nandflash的特性;然後是支援從MODEM啟動;最後是支援IROM啟動,實際上SD卡啟動和nandflash啟動都是劃歸在IROM下面的;IROM是我們處理器内部的部件或者說存儲器,IROM并不是2440裡面的墊腳石,

到底從什麼地方啟動,我們可以設定前面的引腳來決定到底從哪兒啟動,

s5pv210:首先打開一個文檔,S5PV210_UM,找到523頁

Part4_lesson2---ARM處理器這個硬體啟動流程分析
Part4_lesson2---ARM處理器這個硬體啟動流程分析
Part4_lesson2---ARM處理器這個硬體啟動流程分析

從上圖可以清晰地看到210的啟動模式,支援IROM啟動(其中包括SD卡啟動,NAND FLASH啟動)、支援USB、序列槽等啟動方式。

2、位址布局

s3c2440:那麼它從nandflash啟動,那麼我們晶片的位址布局是怎樣的呢,打開晶片手冊S3C2440這個文檔,搜尋一個關鍵詞MAPPING,找到如下:

Part4_lesson2---ARM處理器這個硬體啟動流程分析

上面有兩個表,左邊表示我們選擇從Nor flash啟動時,位址的布局,右邊表示我們從Nandflash啟動時,位址的布局。那麼當處理器上電後,它會從哪兒去取它的第一條指令呢,它會從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程式之後,然後跳轉到記憶體裡面去執行下面的代碼。

Part4_lesson2---ARM處理器這個硬體啟動流程分析

那麼我們還得關心我們的記憶體,那麼記憶體在什麼地方呢?

Part4_lesson2---ARM處理器這個硬體啟動流程分析

這個記憶體起始位址是處理器要求這麼安排的!

s3c6410:

Part4_lesson2---ARM處理器這個硬體啟動流程分析

在位址布局當中我們首先還是關心的以下幾個部件:

1、IROM在那個位置?

2、stepping stone?

3、記憶體是DRAM,在0x5000 0000位址開始的位置。

還要注意,因為我們的ARM處理器一上電,它是從我們的0位址處開始執行代碼,那麼我們就很關心,在我們6410的0位址處究竟放的是什麼東西呢, 該位址處是Booting Device Region by XOM Setting,這是一個啟動區域,靠XOM來設定,它是一個Mirrored region,鏡像區域。它的性質是不放任何裝置,是用來映射的。如果我們選擇從IROM啟動,那麼會把IROM映射到我們的鏡像區域裡面來,可以把IROM了解為0位址,那麼一旦上電就可以從IROM裡面取内容來運作。如果選擇其他方式啟動,也是同樣映射到鏡像區域裡面來;

s5pv210:

Part4_lesson2---ARM處理器這個硬體啟動流程分析

IROM大小為64KB,位址在0XD000 0000開始;有沒有墊腳石呢?其實在位址0xD002 0000開始的位置96KB的IRAM就是我們的墊腳石;

對于0位址處,是啟動區域,也是采用的映射方式,與6410一樣。

記憶體:在0x2000 0000開始的位址處,

3、啟動流程

s3c6410:如果選擇從nandflash來啟動,那麼它的啟動流程是怎樣子的呢?

打開另外一個文檔S3CJ6410_Internel_ROM_Booting,

Part4_lesson2---ARM處理器這個硬體啟動流程分析

我們已經知道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裡面來運作,

s5pv210:打開文檔S5PV210_iROM_ApplicationNote_Preliminary_20091126,