- 論壇徽章:
- 0
|
u-boot的作用有兩種:
1、初始化硬件 2、加載啟動(dòng)操作系統(tǒng)
u-boot執(zhí)行流程(.c .S)分為兩個(gè)階段,內(nèi)容如下:
第一階段啟動(dòng)流程:
1)設(shè)置為svc模式,禁止中斷
2)cpu_init_crit
設(shè)置一級(jí)緩存,二級(jí)緩存
禁止MMU
設(shè)置電路
3)lowlevel_init
1.關(guān)看門狗
2.系統(tǒng)時(shí)鐘初始化
3.外接內(nèi)存初始化
4.uart初始化
5.nand初始化
4)判斷當(dāng)前運(yùn)行地址是否為鏈接時(shí)指定的地址
如果不相等則執(zhí)行copy_from_nand
完成代碼由nand到外接的ram拷貝工作
代碼框架如下:
copy_from_nand
copy_uboot_to_ram
nandll_read_blocks(CFG_PHY_UBOOT_BASE, COPY_BL2_SIZE);
0x23e00000, 512k
nandll_read_page(buf, i + skipped_page)
nand_readpage
總結(jié): 實(shí)現(xiàn)將nand 0 地址開始的512K內(nèi)容搬移到外接RAM 0x23e00000
5)使能MMU
6)清空BSS功能
7)跳轉(zhuǎn)到start_armboot去執(zhí)行
ldr pc, _start_armboot
_start_armboot:
.word start_armboot
第二階段啟動(dòng)流程
1)該階段的硬件初始化工作
2)初始化環(huán)境變量
3)倒數(shù)計(jì)時(shí)
執(zhí)行bootcmd中指定的命令
4)進(jìn)入for(:
readline(CFG_PROMPT)
run_command(cmd)
{
解析輸入的字符串“;”
匹配單條命令
run_cmd()
}
源碼追蹤如下:
入口函數(shù)
lib_arm/board.c
start_armboot(){
1)相關(guān)硬件的初始化工作
cpu_init();
board_init()
{
gd->bd->bi_arch_number = MACH_TYPE;
gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);
}
......
for (; { board.c 793行
main_loop ();
}
void main_loop (void)
{
s = getenv ("bootdelay" ; main.c 550行
s = getenv ("bootcmd" ; main.c 574行
}
if (bootdelay >= 0 && s && !abortboot (bootdelay)) main.c 582行 讀秒沒有被打斷,則執(zhí)行內(nèi)核程序,否則跳到646行
{
"nand read.jffs2 0xc0008000 kernel;bootm 0xc0008000"
run_command (s, 0); 582行
}
for (; main.c 646行
{
len = readline (CFG_PROMPT); main.c 655行
int readline (const char *const prompt) main.c 1141行
{
return readline_into_buffer(prompt, console_buffer);
}
strcpy (lastcommand, console_buffer); main.c 659行
run_command (lastcommand, flag); main.c 680行
}
int run_command (const char *cmd, int flag) main.c 1486行
{
/* Look up command in command table */ main.c 1566行
if ((cmdtp = find_cmd(argv[0])) == NULL) {
printf ("Unknown command '%s' - try 'help'\n", argv[0]);
rc = -1; /* give up after bad command */
continue;
}
/* OK - call function to do the command */ main.c 1596行
if ((cmdtp->cmd) (cmdtp, flag, argc, argv) != 0) {
rc = -1;
}
}
} |
|