參考部落格
一句話概括:初始化軟硬體環境,引導kernel啟動.(設定異常向量,初始化時鐘,關閉看門狗,關閉i/d cache,初始化記憶體控制器,初始化nand,初始化堆疊,設定sp,拷貝**,設定引數,跳轉到核心)
2個階段:bl1,bl2階段,bl0階段是cpu內部固話在sr0m中**執行,然後跳到bl1階段,bl1又稱為spl,彙編階段,bl1階段仍然在sram中執行.對於三星處理器而言,bl0階會把u-boot.bin的前16k 搬運到sram,座位bl2執行.然後跳轉到bl2 c語音階段
bl0主要初始化時鐘,看門狗等外圍器件,然後搬運uboot的頭16k到sram執行,
bl1主要是初始化sdram,再將bootloader的大部分(bl2,200k左右)載入到sdram,並跳轉到os入口處
3個*.s檔案,3個.c檔案:
uboot.lds:鏈結整個uboot.bin,組織**結構,指定函式入口
start.s,定義異常向量,關中斷,設定svc32模式,操作cp15暫存器,設定異常向量入口位址,關 mmc,關cache(d-cache,i-cache)(參考
lowlevel_init.s 初始化堆疊,為呼叫c**繼續初始化做準備(注:約定呼叫c之前,必須要初始化堆疊,r0,r1,r2分別存放第1個,第二,第三個形參,其他形參和區域性變數放到堆疊)
crt0.s:定義了__main,呼叫board_init_f(在board_init_f.c中) relocate uboot,重定位uboot,
board_f.c 驚醒一系列初始化,後jump_to_copy()將uboot拷貝到dram中執行
board_r.c c**,呼叫初始化函式列表初始化全域性變數gd(intit_sequece_f:初始化cpu,timer,env,列印資訊,串列埠,console,mmc,i2c,spi,ram,logbuf(16k),視訊記憶體,),最後執行main_loop(main.c)
main.c bootdelay_process->autoboot_command->bootcmd–>loadkernel->kernel_entry
4個函式:reset->cpu_init_x(cp15/crit)>lowlevel_init->_main(board_init_r)
start.s--------------------------->lowlevel_init.s----->board_r.c
u boot學習 一 u boot概述
我們知道對於pc機,使用電腦時我們首先按下開機按鍵,然後等待電腦的啟動,開機完成後,我們會進行各種需要的操作,如qq聊天 寫csdn部落格等。其實這個過程是 啟動bios程式,由bios程式引導windows作業系統,再由作業系統識別c盤d盤等硬碟,最後執行應用程式qq csdn等。對嵌入式系統來說...
uboot啟動流程概述 uboot啟動流程
u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...
uboot啟動階段簡要概述分析
1.uboot的啟動階段可分為兩部分 1 第一階段為彙編階段,在內部sram中執行。2 第二階段為c語言階段,第二階段是在ddr中執行階段。2.各階段主要完成的功能 1 第一階段主要完成內容 2 第二階段主要完成內容 如果說第一階段主要完成的是soc內部的初始化,則第二階段主要完成的就是開發板級別的...