uboot2015.04代码执行流程2
接上
run_main_loop(board_r.c) =》 common/main.c
s = bootdelay_process(); //<! 得到 bootcmd 参数 & save bootdelay, s=bootcmd
autoboot_command(s); // bootdelay时间内如果没有按键,则执行bootcmd里的命令
cli_loop(); /* 执行hush shell命令解释器 */
说到这里,提一下uboot采用的两个比较难理解的东西。
环境变量的操作,使用了哈希表。
uboot命令,使用了哈希shell,不知道是什么鬼。
这里给出链接地址,去找大牛:http://blog.csdn.net/metersun/article/category/6417297
bootcmd的命令:
bootcmd="mmc dev ${mmcdev}; 设置当前设备 if mmc rescan; 扫描设备 then if run loadbootscript; then run bootscript; else if run loadimage; //走的这里 then run mmcboot; bootm ${loadaddr}; else run netboot; fi; fi; else run netboot; fi"
loadimage的内容:
name="loadimage" value="fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}"
mmcboot内容:
name="mmcboot" value="echo Booting from mmc ...; " "run mmcargs; " "if test ${boot_fdt} = yes || test ${boot_fdt} = try; " 这里为真,环境变量boot_fdt=try "then " "if run loadfdt; " "then" "bootz ${loadaddr} - ${fdt_addr}; " "else if test ${boot_fdt} = try; " "then" "bootz; " 这里 "else" "echo WARN: Cannot load the DT; " "fi; " "fi; " "else bootz; " "fi;"
然后bootz,启动了内核。
然而,原来uboot不是要给内核传机器ID、环境变量地址吗?
这一套是怎么传的,就不知道了,以后再深究吧。。。
联我:shen5773384##163.com

浙公网安备 33010602011771号