天天看點

Bootloader啟動流程分析

Bootloader的啟動流程一般分為兩個階段:stage1和stage2,下面分别對這兩個階段進行講解:

1.stage1

(1)完成基本的硬體初始化。初始化的工作主要包括屏蔽所有的中斷、設定CPU的速度和時鐘頻率、RAM初始化、初始化LED、關閉CPU内部指令和資料cache等。

(2)為加載stage2準備RAM空間。為了更快執行速度,通常把stage2加載到RAM空間中來執行,是以必須為加載Bootloader的stage2準備一段可用的RAM空間範圍。

(3)拷貝stage2到RAM中。确定stage2的可執行映像在固态儲存設備的存放起始位址和終止位址以及RAM空間的起始位址。

(4)設定堆棧指針sp。這是為執行stage2的C語言代碼做好準備。

2.stage2

(1)用彙編語言跳轉到main入口函數

(2)為了實作更複雜的功能和取得更好的代碼可讀性和可移植性,stage2的代碼通常用C語言來實作。在編譯和連結bootloader時,不能使用glibc庫中的任何支援函數。

(3)初始化序列槽、初始化計時器等硬體裝置。在初始化這些裝置之前、可以輸出一些列印資訊。

(4)檢測系統的記憶體映射,所謂記憶體映射就是指在整個4GB實體位址空間中有指出哪些位址範圍被配置設定用來尋址系統的RAM單元。

(5)加載核心映像和根檔案系統映像,這裡包括規劃記憶體占用的布局和從Flash上拷貝資料。

(6)設定核心的啟動參數。

U-Boot的目錄及存放原則

board

和一些已有開發闆有關的檔案,比如Makefile和U-Boot.lds等都和具體開發闆的硬體和位址配置設定有關。

common

與體系結構無關的檔案,實作各種指令的C檔案

cpu

CPU相關的檔案,其中的子目錄都是以U-Boot所支援的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設定指令Cache和資料Cache等;interrupt.c設定系統的各種中斷和異常,比如開關中斷、時鐘中斷、軟體中斷、預取中止和未定義指令等;start.S是U-Boot啟動時執行的第一個檔案,它主要設定系統堆棧和工作方式,為i進入C程式奠定基礎。

disk

disk驅動的分區處理代碼

doc

文檔

drivers

通用裝置驅動程式,比如各種網卡,支援CFI的Flash,序列槽和USB總線等

fs

支援檔案系統的檔案,U-Boot現在支援cramfs、fat、fdos、jffs2和registerfs

include

頭檔案、對各種硬體平台支援的彙編檔案、系統的配置檔案和對檔案系統支援的檔案

net

與網絡有關的代碼,如BOOTP協定,TFTP協定、RARP協定和NFS檔案系統的實作

lib_arm

與ARM體系結構相關的代碼

tools

建立S-Record格式檔案和U-Boot images的工具

繼續閱讀