U-Boot啟動第二階段代碼分析

U-Boot啟動第二階段代碼分析

ID:40755306

大小:468.50 KB

頁數(shù):59頁

時間:2019-08-07

U-Boot啟動第二階段代碼分析_第1頁
U-Boot啟動第二階段代碼分析_第2頁
U-Boot啟動第二階段代碼分析_第3頁
U-Boot啟動第二階段代碼分析_第4頁
U-Boot啟動第二階段代碼分析_第5頁
資源描述:

《U-Boot啟動第二階段代碼分析》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、U-Boot啟動第二階段代碼分析(2012-03-2315:10)一鍵轉(zhuǎn)載標(biāo)簽:二分類:ubootU-Boot第一階段的啟動流程。(nandflash啟動,把nand的4k代碼考到sram中,因為nand沒址線,不能映射到內(nèi)存,所以通過sram進(jìn)行過度,sram中4k代碼把整個uboot拷貝到sdram上,初始化好堆棧,為c語言提供條件,進(jìn)入uboot的第二階段!)這個階段主要是初始化硬件設(shè)備,為加載U-Boot的第二階段代碼準(zhǔn)備RAM空間最后跳轉(zhuǎn)到lib_arm/board.c中start_armboot函數(shù),這是第二階段的入口點。在上一篇文

2、章中,我們介紹了u-boot啟動的時候匯編語言的部分,當(dāng)時我們進(jìn)行了一些簡單的初始化,并且為C語言的執(zhí)行建立的環(huán)境(堆棧),現(xiàn)在我們看看當(dāng)從匯編語言轉(zhuǎn)到C語言的時候執(zhí)行的第一個函數(shù)(start_armboot(),在lib_armboard.c中),該函數(shù)進(jìn)行了一系列的外設(shè)初始化,然后調(diào)用main_loop(),根據(jù)配置來選擇是直接加載Linux內(nèi)核還是進(jìn)入等待命令模式。1、在介紹該函數(shù)之前,我們需要看一看幾個數(shù)據(jù)結(jié)構(gòu),這些是u-boot中幾個重要的數(shù)據(jù)結(jié)構(gòu):(1)gd_t結(jié)構(gòu)體U-Boot使用了一個結(jié)構(gòu)體gd_t來存儲全局?jǐn)?shù)據(jù)區(qū)的數(shù)據(jù),這個

3、結(jié)構(gòu)體在include/asm-arm/global_data.h中定義如下:typedefstructglobal_data{bd_t*bd;//與板子相關(guān)的結(jié)構(gòu),見下面unsignedlongflags;unsignedlongbaudrate;unsignedlonghave_console;/*serial_init()wascalled*/unsignedlongreloc_off;/*RelocationOffset*/unsignedlongenv_addr;/*AddressofEnvironmentstruct*/unsign

4、edlongenv_valid;/*ChecksumofEnvironmentvalid?*/unsignedlongfb_base;/*baseaddressofframebuffer*/#ifdefCONFIG_VFD//我們一般沒有配置這個,這個是framebuffer的首地址unsignedcharvfd_type;/*displaytype*/#endif#if0unsignedlongcpu_clk;/*CPUclockinHz!*/unsignedlongbus_clk;unsignedlongram_size;/*RAMsize

5、*/unsignedlongreset_status;/*resetstatusregisteratboot*/#endifvoid**jt;/*jumptable*/}gd_t;/**GlobalDataFlags*/#defineGD_FLG_RELOC0x00001/*CodewasrelocatedtoRAM*/#defineGD_FLG_DEVINIT0x00002/*Deviceshavebeeninitialized*/#defineGD_FLG_SILENT0x00004/*Silentmode*/#defineDECLARE_

6、GLOBAL_DATA_PTRregistervolatilegd_t*gdasm("r8")在global_data.h中U-Boot使用了一個存儲在寄存器中的指針gd來記錄全局?jǐn)?shù)據(jù)區(qū)的地址:#defineDECLARE_GLOBAL_DATA_PTRregistervolatilegd_t*gdasm("r8")DECLARE_GLOBAL_DATA_PTR定義一個gd_t全局?jǐn)?shù)據(jù)結(jié)構(gòu)的指針,這個指針存放在指定的寄存器r8中。這個聲明也避免編譯器把r8分配給其它的變量。任何想要訪問全局?jǐn)?shù)據(jù)區(qū)的代碼,只要代碼開頭加入“DECLARE_GLOB

7、AL_DATA_PTR”一行代碼,然后就可以使用gd指針來訪問全局?jǐn)?shù)據(jù)區(qū)了。根據(jù)U-Boot內(nèi)存使用圖中可以計算gd的值:gd=TEXT_BASE-CONFIG_SYS_MALLOC_LEN-sizeof(gd_t)2)bd_t保存與板子相關(guān)的配置參數(shù)bd_t在include/asm-arm/u-boot.h中定義如下:typedefstructbd_info{intbi_baudrate;/*串口通訊波特率*/unsignedlongbi_ip_addr;/*IP地址*/unsignedcharbi_enetaddr[6];/*Etherne

8、tadress*/structenvironment_s*bi_env;/*環(huán)境變量開始地址*/ulongbi_arch_number;/*uniqu

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。