1. 程式人生 > >專題4-我是bootloader設計師-Souce Insight+ARM啟動流程分析

專題4-我是bootloader設計師-Souce Insight+ARM啟動流程分析

一、bootloader設計藍圖
寫在前面:不想當將軍的士兵不是好士兵,不想當設計師的程式設計師不是好程式設計師

1、bootloader的作用
就像航天器的助推器,將航天器帶到指定的軌道。(啟動linux核心)
程式碼包括兩部分:
第一部分程式碼主要為第二部分程式碼做硬體準備;
第二部分程式碼主要完成一些高階功能,如核心啟動、根檔案系統啟動。

2、設計方法–模仿uboot
自主模式:不需要人為干預,自動執行
開發模式:執行uboot的命令去開發

3、建立並分析uboot的工程
學會用Souce-Insight工具去分析大型的程式。
1、project–newproject
2、解壓:在linux將2440的uboot的解壓,注意linux的tai解壓時分大小寫的,比如Makefile和makefile能分開解壓,但在windows中其中一個會被覆蓋掉,所以只能在linux下解壓
3、利用samba伺服器對映到z盤(\192.168.1.108\root\home\S3-ARM\part4\uboot)
4、add and remove Project files,開啟z盤(z:

)–add all(共用3000+個檔案)
5、注意預設狀態下,只添加了.c和.h的檔案,彙編檔案沒有新增。option–document option–c source file–手動新增.s和*.S檔案(又用200+個檔案)
6、為快速檢視工程中函式的具體實現,使用《同步》功能,即點選上面有本小書的圖示,幾分鐘後完成。滑鼠點選函式會在下面出現函式的具體實現,雙擊則跳轉到函式實現的檔案中去了。

二、ARM處理器的啟動流程
bootloader先做什麼後做什麼取決於arm的啟動流程

1、支援的啟動方式

2440:nor(2M)和nand(256M)
6410:SD卡和nand

2、地址佈局

2440:處理器上電後,首先從0地址取第一條指令(nor flash的最前端)
搜尋關鍵詞:mapping

,注意0x30000000就是SDRAM的起始地址。
這裡寫圖片描述

6440:
0地址是映象區域,記憶體執行時會將程式碼對映到映象區域開始執行。
這裡寫圖片描述

210:
這裡寫圖片描述

3、啟動流程

由於nand flash 不能參與統一編址,所以不能直接放到0地址處去執行。

2440:
BootSRAM(4k,又叫4k的stoping store,墊腳石)和nand flash的關係。

從nand啟動的流程:首先cpu將nand flash前4k位元組的資料自動的複製到stoping store(SRAM)中去(主要完成初始化工作),nand剩下的內容(例如作業系統)複製到記憶體(SDRAM)中,執行到stoping store中的程式後,再跳到記憶體中去執行。

6440:
首先執行iROM中(BL0)的程式,iROM是晶片廠商給大家固化好的軟體,這個軟體通常稱為零階段的bootloader(bootloader0),主要工作:1)完成硬體的初始化 2)將放在nand flash中的bootloader1最前面的8k拷貝到stoping store中去。(BL1再將剩餘的bootloader(BL2)拷貝到SDRAM,完成整個bootloader的執行)
(首先iROM會對映到映象區域(0地址處)開始執行)
這裡寫圖片描述

210:
BL1 max size 16k,BL2 max size 80k,剩餘的bootloader拷貝到記憶體中(SDRAM)。
210的啟動還要更好玩一些,210內建了一塊96KB大小的SRAM(叫iRAM),同時還有一塊內建的64KB大小的NorFlash(叫iROM)。210的啟動過程大致是:
第一步:CPU上電後先從內部IROM中讀取預先設定的程式碼(BL0),執行。這一段IROM程式碼首先做了一些基本的初始化(CPU時鐘、關看門狗···)(這一段IROM程式碼是三星出廠前設定的,三星也不知道我們板子上將來接的是什麼樣的DRAM,因此這一段IROM是不能負責初始化外接的DRAM的,因此這一段程式碼只能初始化SoC內部的東西);然後這一段程式碼會判斷我們選擇的啟動模式(我們通過硬體跳線可以更改板子的啟動模式),然後從相應的外部儲存器去讀取第一部分啟動程式碼(BL1,大小為16KB)到內部SRAM。
第二步:從IRAM去執行剛上一步讀取來的BL1(16KB),然後執行。BL1負責初始化NandFlash,然後將BL2讀取到IRAM(剩餘的80KB)然後執行;
第三步:從IRAM執行BL2,BL2初始化DRAM,然後將OS讀取到DRAM中,然後啟動OS,啟動過程結束。
這裡寫圖片描述

6440和210與2440啟動的不同:
2440是從墊腳石(本身就是0地址,不需要對映)開始執行的,6440和210是從iROM(需要對映到映象區域)開始執行的。

備註:
記憶體:
SRAM 靜態記憶體 特點就是容量小、價格高,優點是不需要軟體初始化直接上電就能用
DRAM 動態記憶體 特點是容量大、價格低,缺點是上電後不能直接使用,需要軟體初始化後才可以使用
PC機 記憶體需求大,而且軟體複雜,不在乎DRAM的初始化開銷,適合全部用DRAM.

外存:
NorFlash:特點是容量小,價格高,優點是可以和CPU直接匯流排式相連,CPU上電後可以直接讀取,所以一般用作啟動介質。
NandFlash(跟硬碟一樣):特點是容量大,價格低,缺點是不能匯流排式訪問,也就是說上電CPU直接讀取,需要CPU直接讀取,需要一些初始化軟體,通過時序介面讀寫。