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做準...