ARM啟動解析

2021-10-04 10:11:16 字數 1612 閱讀 1301

參考文章

起始位址

在分析啟動流程之前我們首先要清楚不論是arm的何種處理器,其都是從0x0000 0000位址處開始執行程式的。

以2440為例:

1. 啟動方式

s3c2440支援兩種啟動模式:nand和非nand(這裡是nor flash),具體採用的方式取決於om0、om1兩個引腳的狀態。

需要檢測硬體啟動方式,啟動方式是由硬體om0管腳決定的,軟體無法檢測硬體電平狀態,但可以根據cpu的啟動特性來檢測。

2. 位址布局

從上圖我們可以清楚的看到左邊的是從nor flash啟動的位址布局,右邊是從nand啟動的位址布局。

nor flash內可以執行程式,所以我們在放bootloader的時候放在0位址處即可。

3. 啟動流程

1、nand啟動:

如果配置為nand flash啟動(啟動模式選擇開關拔到nand端,此時om0管腳拉低)s3c2440的nand控制器會自動把nand flash中的前4k**資料搬到內部sram中(位址為0x40000000),同時還把這塊sram位址對映到了0x00000000位址。cpu從0x00000000位置開始執行程式。 【從nand flash啟動cpu時,cpu會通過內部的硬體將nand flash開始的4kb資料複製到稱為「steppingstone」的4kb的內部ram中(起始位址為0),然後跳到位址0開始執行】

2、nor啟動:

如果配置為nor flash啟動(啟動模式選擇開關拔到nor端,此時om0管腳拉高),0x00000000就是nor flash實際的起始位址,nor flash中的程式就從這裡開始執行,不涉及到資料拷貝和位址對映。

總結:nand啟動時,位址0x00000000為內部sram對映的位址;

nor啟動時,位址0x00000000為nor flash的實際起始位址。

sp決定棧從哪開始分配;

pc決定下一條命令。

為什麼nor啟動要將sp設定為0x40000000+4096:

1、用nor啟動時,片內的儲存控制器的bank0-bank7這8個bank都對應了其他用途,所以設計者在bank7結束的位址0x40000000的地方作為nor flash的啟動位址,而nand flash啟動的位址則是0x00000000。

2、 因為對於啟動檔案.s來說,4k的空間是足夠存放,**段、bss…和堆疊段了,因為堆疊的sp是從高位址往低位址移動的,所以要將堆疊的起始位址放在堆疊段的高位址;

你也可以不用設定成4096,但要保證堆疊的長度不能和下面其他段重疊,若重疊,就會出bug,保險值是4096,因為sram就是4k設計的

ARM啟動過程

從開機,即對處理器傳送乙個 reset 訊號後,arm 處理器就進入中斷模式,從中斷向量 reset 處理,即位址0x00000000 處開始執行。但是,我們看到,整個系統在實體地址 0 處是沒有儲存器件的。實際上是,對與大多數的arm處理器來講,有乙個硬體對映的機制。對與這個處理器來說,開始時,預...

ARM 啟動過程

從開機,即對處理器傳送乙個 reset 訊號後,arm 處理器就進入中斷模式,從中斷向量 reset 處理,即位址0x00000000 處開始執行。但是,我們看到,整個系統在實體地址 0 處是沒有儲存器件的。實際上是,對與大多數的arm處理器來講,有乙個硬體對映的機制。對與這個處理器來說,開始時,預...

ARM 啟動過程

從開機,即對處理器傳送乙個 reset 訊號後,arm 處理器就進入中斷模式,從中斷向量 reset 處理,即位址0x00000000 處開始執行。但是,我們看到,整個系統在實體地址 0 處是沒有儲存器件的。實際上是,對與大多數的arm處理器來講,有乙個硬體對映的機制。對與這個處理器來說,開始時,預...