标签:ARM bootloader U-Boot 代码分析 抵岸科技
也许细心的你会问:我在用
UBoot
的时候并没有直接进入用户命令界面呀,而是在倒计时结束后自动引导
kernel
。这是怎么回事呢?
在 main_loop()函数当中有如下一段代码:
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
•
•
•
s
=
getenv
(
“bootcmd”
);
/*获取bootcmd 的内容*/
/*bootcmd=nand read 0x22000000 0xB0000 0x200000; bootm */
•
•
# ifndef CFG_HUSH_PARSER
run_command
(s
,
0
);
/*运行s包含的命令*/
/*运行nand read 0x22000000 0xB0000 0x200000表示将NANDFLASH
0xB0000处数据读取放于0x22000000处,读取长度为0x200000
*/
/*运行bootm命令,引导内核启动*/
# else
parse_string_outer
(s
,
FLAG_PARSE_SEMICOLON
|
FLAG_EXIT_FROM_LOOP
);
# endif
•
•
•
#endif
/* CONFIG_BOOTDELAY */
bootm
命令是什么?它是怎样引导内核的?
要知道想解决这个问题,就要分析
common/cmd_bootm.c
中的函数
do_bootm
,因为引导
kernel
就是
bootm
这条命令的工作,
do_bootm
是命令
bootm
的执行函数。
现在我们来分析一下
common/cmd_bootm.c
中的函数
do_bootm
,这是
bootm
命令的处理函数。
int
do_bootm
(