談到arm的啟動流程不得不說的是bootloader,但是我這篇文章主要來談談arm啟動流程的,所以bootloader只是跟大家簡介一下就ok。這篇文章我會談到以下內容:
1、bootloader簡介以及其作用
2、2440、6410、210當下比較常見的3款處理器的啟動流程進行簡單分析,通過這三款處理器的分析希望大家掌握arm處理器的啟動分析。
Ok我們進入主題
l Bootloader簡介及其作用
在我看來bootloader的作用是初始化必要的硬件,引導內核啟動。(當然這是主要作用,今天的重點不在bootloader,所以在我后面的博文會繼續談到的)
l 啟動流程分析
在分析啟動流程的時候我們將會使用的文檔是三星公司提供的芯片手冊,通過手冊我們搞清楚芯片的啟動。
在分析啟動流程之前我們首先要清楚不論是arm的何種處理器,其都是從0x0000 0000地址處開始執行程序的。下面的分析我將會通過三個方面:1、芯片支持的啟動方式2、地址布局3、啟動流程
1. 2440
a) 啟動方式
由上圖可知,S3C2440支持兩種啟動模式:NAND和非NAND(這里是Nor Flash),具體采用的方式取決於OM0、OM1兩個引腳的狀態。
![]() |
b) 地址布局
我們知道arm從0地址出運行代碼那么我們的零地址處到底存放的是什么東西呢?我們通過地址布局圖來分析

從上圖我們可以清楚的看到左邊的是從Nor Flash啟動的地址布局,右邊是從NAND啟動的地址布局,因為Nor Flash內可以運行程序,所以我們在放bootloader的時候放在0地址處即可,所以我們重點分析從NAND啟動。
c) 啟動流程
我們從地址布局圖中可以看到,當我們從NAND啟動的時候0地址處是BootSRAM(又叫做stepping stone墊腳石),當我們上電時其會做以下事情
1. 上電后處理器自動將nandflash前4KB的內容復制到boot sram開始執行(由硬件完成)。
2. 通過bootsram(即剛才復制進來的4k)來初始化相關硬件和寄存器從而訪問nandflash,接下來把剩余的bootloader復制到內存(SDRAM/DRAM)中,當stepping stone 里面的4KB執行完以后跳轉到內存繼續執行,完成系統的啟動。
2. 6410
a) 啟動方式

從上圖我們可以看到6410支持的啟動方式比較多有SROM(Nor Flash)啟動,oneNAND啟動,IROM(IROM是處理器內部的固件/存儲器,但不是stepping stone)啟動。其中IROM中又有sd卡、NAND,我們可以配置相應的管腳去選擇其啟動方式。
b) 地址布局

從上圖我們可以發現在0地址處是一個鏡像區,不放置任何設備,當我們選擇不同的啟動方式的時候,其通過映射關系將對應的設備映射到鏡像區域。比如我們選擇從IROM啟動其就會將IROM映射到該區域。
c) 啟動流程

假設我們從NAND啟動,從啟動方式中我們可以知道從NAND啟動是屬於從IROM啟動的,所以當我們上電的時候其會做以下事情:
1. 將IROM映射到鏡像區
2. IROM中有芯片廠商寫好的BL0,由BL0將系統引導至啟動選項,然后將BL1(NAND中前8k)拷進stepping stone進行運行
3. BL1將剩下的BL2拷進內存,當BL1執行完以后跳轉到內存繼續執行,完成系統的啟動。
3. 210
a) 啟動方式


從上圖我們可以看到210支持的啟動方式相當的多,但和6410相似。
b) 地址布局

從上圖我們可以看到其地址布局和6410類似,采用了映射的方法。
c) 啟動流程

假設我們從NAND啟動,從啟動方式中我們可以知道從NAND啟動是屬於從IROM啟動的,所以當我們上電的時候其會做以下事情:
1. 將IROM映射到鏡像區
2. IROM中有芯片廠商寫好的BL0,由BL0將系統引導至啟動選項,然后將BL1(NAND中前16k)拷進stepping stone進行運行
3. 若BL2小於80K,BL1則將其拷進stepping stone。若BL2大於80k,BL1將剩下的BL2拷進內存。當BL1執行完以后跳轉到內存或者繼續在stepping stone運行BL2,完成系統的啟動。

