uboot啟動第二階段之x load分析

2021-08-04 11:40:49 字數 1857 閱讀 6778

開發板:dm3730

虛擬機器:ubuntu

14.04

編譯器:arm-none-linux-gnueabi

x-loader:

這幾天小小的研究了一下linux的啟動機制 所裡這裡做個小小的總結吧

現在一般的晶元的linux啟動機制是這樣的

上電自執行romcode也就是在rom裡固化的**

romcode啟動後會根據sys_boot[5:0]的值來去選擇從nand,nor,mmc,usb,uart之類的模式啟動 也就是啟動x-load/mlo

x-load的主要功能就是去nand,mmc之類的mem讀取uboot到記憶體上執行

具體為什麼要這麼做我還沒到這個境界 現在的程度只能知道他的機制就是這麼做

x-load的**我覺得很像uboot,在我看來就是乙個小型的uboot而已 只不過uboot啟動的是kernel,而x-load啟動的的uboot

話不多說 上來就是看**好吧 理論也扯完了

x-load一開始跑的函式是start_armboot

void start_armboot (void)

}/* uart boot */

#ifdef start_loadb_download

do_load_serial_bin (cfg_loadaddr, 115200);

#else

/* 相關單板的ii2,led初始化 在o***單板上沒有任何作用 */

misc_init_r();

/* cfg_loadaddr=0x80008000 應該是ram位址 */

buf = (uchar*) cfg_loadaddr;

/* always first try mmc without checking boot pins */

#ifndef config_omap3_beagle

if ((get_mem_type() == mmc_onenand) || (get_mem_type() == mmc_nand))

#endif /* config_omap3_beagle */

/* 先嘗試從mmc啟動 */

buf += mmc_boot(buf);

/* 判斷是否從nand啟動 */

if (buf == (uchar *)cfg_loadaddr)

}/* 判斷是否從onenand啟動 */

if (get_mem_type() == gpmc_onenand)}}

/* 和我們的omap單板無關 */

#if defined (config_am3517evm)

/* * fixme: currently coping uboot image,

* ideally we should leverage xip feature here

*/if (get_mem_type() == gpmc_nor)

#endif

/* 如果從mmc,nand,onenand都啟動了 那就懸掛*/

if (buf == (uchar *)cfg_loadaddr)

hang();

#endif

/* 執行uboot */

/* go run u-boot and never return */

printf("starting os bootloader...\n");

((init_fnc_t *)cfg_loadaddr)();

/* should never come here */

}

大概的執行過程就這樣了 其他無非就是nand mmc的初始化 讀取函式罷了

uboot第二階段啟動流程

include typedef unsigned long ulong typedef struct environment s env t typedef struct bd info bi dram 1 bd t int main int argc,const char argv include...

u boot第二階段分析(二)

接著上一章節的內容,繼續往下分析start armboot函式 1.for迴圈執行init sequence 如下 for init fnc ptr init sequence init fnc ptr init fnc ptr 分析 1 init fnc ptr二重指標指向了init sequen...

u boot第二階段分析(一)

一 start armboot函式簡介 start armboot函式是乙個長函式,在uboot lib arm board.c的第444 908行,其中也呼叫了其他函式,共同構成了u boot的第二階段。1.第二階段的主要工作 我們之前已經分析過了第一階段,主要是初始化了soc內部的一些部件和初始...