Ads 468x60px

##EasyReadMore##

02 7月, 2015

SMP Linux 開機流程

SMP Linux :SMP (Symmetric Multi-Processors)

BootRom

在MPCore中,每個ARM的處理器一開始的記憶體位址都是0x00000000,通常我們可以有兩種方式提供啟動程式碼的執行,

1,NOR Flash

2,Boot Rom

由於單位儲存成本NOR Flash較高,因此在需要大儲存空間的產品上,會選擇透過NAND Flash儲存BootLoader與作業系統,因此為了讓系統可以順利的執行開機流程,就會透過晶片上的Boot Rom定位到位址0x00000000,並在其中儲存支援MPCore的程式碼.

在系統尚未啟動前,只有RTC Clock時脈為32.768KHz,而在系統啟動時,在PLL(Phase Locked Loop)起震前,只有Boot Rom或是NOR Flash這類裝置可以用來執行處理器的指令集,因此在Boot Rom或NOR Flash中的程式碼,就必須讓系統的PLL正常,以便可以達到最佳的處理器與平台效能,在系統初始化外部記憶體前,所使用的Stack或是可寫入的記憶體區塊就必須是 OnChip的SRAM,直到外部記憶體被初始化後,才可以使用外部記憶體.

以支援NAND Boot的行為來說,Boot Rom會需要執行以下的行為

1,讓CPU0執行主要開機流程,其它的處理器進入WFI. (在啟動時,每個處理器可以透過CPU ID得知自己是否為CPU0,如果不是,就進入WFI的程式碼中.)

2,初始化外部記憶體與執行系統的初始化

3,設定 Stack

4,把BootRom程式碼複製到外部記憶體中

5,重新Mapping 記憶體位置 (把0x00000000位址對應到外部記憶體 或 I-TCM如果 0x00000000位址要跑中斷表的話(or 中斷表對應到0xffff0000))

6,把第二階段的BootLoader載入到外部記憶體中 or OnChip SRAM.

7,執行第二階段的BootLoader

到這階段為止,系統會維持在低速的運作中(例如:PLL=19.2MHz)或是直接初始化PLL到最後的頻率(視所實作的SoC需求而定),外部記憶體也會進行初始化(包括要判斷記憶體的大小與初始化流程),讓第二階段的BootLoader載入到記憶體後可以直接執行.

U-Boot

在NAND或eMMC的方案中,UBoot通常會被Linux的產品定義為第二階段的BootLoader (也因為它所支援的互動命令介面彈性.).

首先,各位取得u-boot-2011.06-rc3版本的UBoot程式碼後,會看到包括如下的Source Code目錄,簡要說明如下

http://goo.gl/gZpVj

0 意見:

張貼留言

 
Blogger Templates