在common下的main.c 的main_loop()中有以下代码:
-
s = getenv ("bootcmd");0.获取引导内核命令
-
if (bootdelay >= 0 && s && !abortboot (bootdelay)) {//1. 通过函数abortboot判断是否按下任意键
-
puts("did not push ---\n");//2. 没有按下任意键,正常引导内核
-
#ifdef CONFIG_AUTOBOOT_KEYED
-
int prev = disable_ctrlc(1); /* disable Control C checking */
-
#endif
-
-
#ifndef CFG_HUSH_PARSER
-
run_command (s, 0);
-
#else
-
parse_string_outer(s, FLAG_PARSE_SEMICOLON |
-
FLAG_EXIT_FROM_LOOP);//3.使用了hush方式,执行此方法。hush方式做了管道和string方面的处理,细节未探究
-
#endif
-
-
#ifdef CONFIG_AUTOBOOT_KEYED
-
disable_ctrlc(prev); /* restore Control C checking */
-
#endif
-
}
parse_string_outer---》setup_string_in_str(将执行命令保存结构体struct in_str中)----》parse_stream_outer
(调用parse_stream:
1.保存执行命令的语法分析结果,存于struct p_context.
2.更新全局变量char *ifs和map[256]
)---》执行parse_stream。返回0代表正常---》执行run_list--->执行run_list_real---》执行run_pipe_real---》查询命令。依命令构造实现操作
-
if ((cmdtp = find_cmd(child->argv[i])) == NULL) {
-
printf ("Unknown command '%s' - try 'help'\n", child->argv[i]);
-
return -1; /* give up after bad command */
-
} else {
=================================================================================
参考文章:http://blog.csdn.net/tankai19880619/article/details/15812769
阅读(501) | 评论(0) | 转发(0) |