uboot啓動及代碼跟蹤

uboot-2016

 

 u-boot啓動分爲stage1stage2兩個階段概述:

        stage1通常是開發板的配置等設備初始化代碼,需要依賴於SoC體系結構,通常用彙編語言來實現

         stage2階段主要是對外部設備如網卡、Flash等的初始化以及u-boot命令集等的自身實現,通常用C語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。

 

u-bootstage1代碼通常放在start.S文件,用彙編語言寫成,其主要代碼部分如下:

1) 定義入口。系統復位轉入u-bootstage1入口點,通常這個入口放在rom(Flash)0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。

2)設置異常向量。

3)設置CPU的速度、時鐘頻率及中斷控制寄存器。

4)初始化內存控制器 ,爲stage2準備RAM空間。

5)將u-bootstage2拷貝到到RAM

6)初始化堆棧 、數據段。

7)轉stage2的入口點。

stage2 c語言代碼部分

1)初始化本階段使用的硬件設備

2)初始化系統內存。

3kernel和文件系統映射從Flash讀取到RAM中。

4)爲內核設置啓動參數。

5)調用內核。

 

從stage1 到stage2

板級代碼早期初始化

在上一步通過ldr pc, =board_init_r指令進入u-boot-2016.05\common\board_r.c:board_init_r函數,進而調用initcall_run_list(init_sequence_r)函數執行一系列初始化函數以實現後半部分板級初始化,並在initcall_run_list函數裏進入run_main_loop不再返回。

包含如下代碼部分

 

詳細參考如下鏈接

https://www.2cto.com/kf/201607/527936.html

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章