bootstrap簡單介紹
bootstrap 是最初級的引導,旨在初始化CPU,簡單時鐘,堆椎,目標是讓CPU處於可以正常執行\r
咱通常說的uboot那樣的bootloader實際上是集成了很多功能及驅動的程式,如串列埠,網路等,目的是為載入和除錯kernel建立一個良好環境
基於ARM的嵌入式系統的啟動都需要載入程式,引導過程可以有兩種,一種是先執行小型的bootstrap完成所謂的low level初始化,再呼叫如Uboot,RedBOOT等功能強大的載入程式進行全面的初始化,設定作業系統核心的載入地址和執行引數等等;另外一種是直接使用Uboot等載入程式兩步合成一步完成。bootstrap只是針對ARM CPU進行初始化,直接根據晶片的引腳打交道,不涉及norflash,nandflah,SDRAM 等裝置的驅動程式,所以整個程式比較簡明易懂;而UBOOT比較龐大,對於初學者而言想一下子完全弄清楚整個脈絡,知道移植時候需要在何處增加什麼程式碼是很有難度的,所以建議入門者還是先採用這種分兩層引導的結構。下面對ATMEL官方提供的基於at91sam9260的bootstrap進行簡要分析。
main.c首先呼叫hw_init()完成硬體初始化,該部分主要任務完成DEBUG串列埠配置,這樣就可以同串列埠輸出在PC的超級中斷上看到執行資訊了;接下來配置禁用看門狗後配置時鐘和PLL,這個部分的資料很重要,需要仔細查閱資料手冊;然後是SDRAM控制器引數設定和協處理器CP15的設定;其次是SDRAM的初始化,主要是根據電路連線設定GPIO的功能。main.c的第二步是根據選擇的啟動方式複製印象檔案到SDRAM中,根據設定的啟方式初始化NORFLASH ,NANDFLASH或者是DATAFLASH。第三部分根據需要解壓縮映像檔案。然後跳轉到定義的核心執行地址執行。到此bootstrap功德圓滿。
通過對bootstrap原始碼的閱讀有助於理解ARM的啟動過程,為裁剪和移植UBOOT原始碼打下基礎。嵌入式的學習還長路漫漫,先寫到這,繼續學習^_^!