cortex A8是基於ARMv7架構的處理器,主頻可以達到1GHz。基於cortexA8的處理器有三星的S5PC100、S5PV210,TI的OMAP3530,全志的A10等。我有個想法就是把u-boot的2個階段的代碼獨立。第一階段代碼稱為硬體相關BL1,第二階段代碼稱為硬體無關BL2。手上剛好有塊s5pc100的板子,就介紹s5pc100的啟動過程並驗證。我把啟動過程分為3個階段BL0、BL1、BL2。BL0是固化在內部ROM上電就執行的一小段程式,我把自己寫的boot代碼,用於引導u-boot稱為BL2,把u-boot的第二階段代碼用於引導核心稱為BL2。這是我的理解,在接下來我將依次分析BL0、BL1、BL2,並實現BL1代碼引導u-boot,BL2移到核心。
一、什麼是BL0
BL0(1st boot loader)是固化在內部ROM上電就執行的一小段程式。BL0從系統指定的外部儲存空間件(NAND、SD/MMC、OneNAND與USB)中載入第二個引導程式BL1到內部RAM,同時對BL1進行安全檢驗。啟動過程如下:
二、BL0做了些什麼
s5pc100晶片手冊見2.2FUNCTIONAL SEQUENCE,翻譯成中文如下
1.初始化PLL和時鐘,將其設定為固定值;
2.初始化棧和堆地區;
3.初始化指令Cache 控制器;
4.從外部起動裝置中載入BL1;
5.如果起動安全機制開啟,則檢查BL1資料完整性;
6.如果校正通過,則跳轉到0x34010地址處運行;
7.如果校正失敗則停止。
三、S5PC100支援的啟動方式
根據OM[4:0]、B0[5::0]引腳的配置,可以支援不同啟動方式
OM[4] 0:正常模式1:測試模式
OM[3] 0:首先從內部ROM啟動1:從Nor Flash啟動
OM[2:1]00:第二啟動從NAND Flash 01:第二啟動從One NAND10:第二啟動從MMC/SD卡 11:第二啟動從NOR Flash
OM[0] APLL/MPLL輸入選擇
B0[5] 0:第二啟動由OM[2:1]確定1:第二啟動從USB(當OM[2:1]為00時從NAND Flash啟動)
B0[4] 0:ECC加密1::ECC不加密
B0[3] 0
B0[2] 地址周期選擇
B0[1:0]塊大小選擇 00:Small Block(Page 512)10:Large Block(Page 2048) 11:Dlarge Block(Page 4096)
注如果從SD/MMC起動,BL0將SD/MMC最後的9KB資料載入到0x34000處運行;如果從OneNAND 和NAND起動,BL0將開始的16KB資料載入到0x34000處運行。
參考文章:http://www.tuxi.com.cn/6-132-1327758.html