u boot 啟動過程

2022-08-21 22:48:14 字數 1356 閱讀 8752

u-boot **分為兩個階段第一階段是彙編,入口是 arch/arm/cpu/armv7/start.s,第二階段是 c 語言, 入

口是 board.c

第一階段**

1. 異常向量表定義

2. 設定 svc32 模式(arm 七種工作模式)

3. 呼叫 cpu_init_crit 進行 cpu 相關初始化

1) 清 tlb(頁面快取)、關 mmu 及 cache 等

2) 轉入低階初始化 lowlevel_init 函式

主要是對系統時鐘、片外記憶體(ddr3)、串列埠、 nand(這裡初始化 nand 主要是為第二階段搬 uboot 到記憶體而準備的)等進行初始化。

4. 判斷啟動開關進行自搬移

5. 跳轉到 c 入口 board_init_f( )

第二階段**

本 階 段 主 要 有 兩 個 核 心 函 數 , 分 別 是 board_init_f( ) 和board_init_r(), 這 兩 個 函 數 都 是 在

arch\arm\lib\board.c

1. board_init_f( )

1) gd_t 資料結構空間分配

2) **一組初始化函式

3) 對 gd_t 資料結構進行初始化

4) relocate_code(u-boot重定義**,即自搬移)relocate_code是乙個彙編函式,在arch\arm\cpu\armv7\start.s檔案中實現。 具體工作是先把**搬

運到ddr高階位置, 搬運data段, 清0 bss段, 最後跳轉重新定位後u-boot**中的 board_init_r 函式

執行,到些完成整個u-boot的啟動過程。

2. board_init_r( )

這個函式是由上一步的relocate_code後,直接呼叫,這個函式也是重新定位**後執行的第乙個

c語言函式。

1) 使能 cache

2) 板子初始化

3) 串列埠初始化

4) 外存初始化

5) 環境變數初始化

6) 控制台初始譁

7) 中斷使能

8) 乙太網初始化

9) 進入 main_loop(),等待命令或自動載入核心或自動載入核心。

u boot啟動過程 1

u boot的啟動過程 1.start.s檔案 此彙編檔案是u boot啟動的第乙個檔案,首先確定是冷啟動還是熱啟動,boot cold or boot warm 通過對r21寫0x01 cold or ox02 warm 完成。接著在boot warm中 1 判斷是否定義config cogent...

u boot啟動過程分析

備註 本文中使用的u boot版本是2010.3第一階段 初始化soc相關的配置,例如 系統時鐘 mmu 看門狗等 並為c語言提供執行環境1 第一階段 組合語言階段.globl start start b reset 復位異常 進入管理模式 復位電平有效時觸發 ldr pc,undefined in...

uboot 記憶體布局及啟動過程

該布局由uboot.lds 檔案定義,在鏈結時候生成相應的二進位制映像。首先定義起始位址為 0xc3e00000,接下來是中斷向量表 vector 大小為256位元組,按每個中斷向量占用4個位元組的跳轉位址算,做多可以有64個中斷向量 2.一些基礎性的 段,它為下一步載入boot或者kernel做準...