u-boot 1.3.4 cpu:s5pv210 架构体系armv7---BL2阶段启动内核

490阅读 0评论2015-02-09 l658775
分类:嵌入式

      在common下的main.c 的main_loop()中有以下代码:

点击(此处)折叠或打开

  1. s = getenv ("bootcmd");0.获取引导内核命令
  2. if (bootdelay >= 0 && s && !abortboot (bootdelay)) {//1. 通过函数abortboot判断是否按下任意键
  3.         puts("did not push ---\n");//2. 没有按下任意键,正常引导内核
  4. #ifdef CONFIG_AUTOBOOT_KEYED
  5.         int prev = disable_ctrlc(1);    /* disable Control C checking */
  6. #endif

  7. #ifndef CFG_HUSH_PARSER
  8.         run_command (s, 0);
  9. #else
  10.         parse_string_outer(s, FLAG_PARSE_SEMICOLON |
  11.                  FLAG_EXIT_FROM_LOOP);//3.使用了hush方式,执行此方法。hush方式做了管道和string方面的处理,细节未探究
  12. #endif

  13. #ifdef CONFIG_AUTOBOOT_KEYED
  14.         disable_ctrlc(prev);    /* restore Control C checking */
  15. #endif
  16.     }

    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---》查询命令。依命令构造实现操作   

点击(此处)折叠或打开

  1. if ((cmdtp = find_cmd(child->argv[i])) == NULL) {
  2.                 printf ("Unknown command '%s' - try 'help'\n", child->argv[i]);
  3.                 return -1;    /* give up after bad command */
  4.             } else {
    =================================================================================
    参考文章:http://blog.csdn.net/tankai19880619/article/details/15812769


上一篇: u-boot 1.3.4 cpu:s5pv210 架构体系armv7---BL1阶段概述
下一篇:u-boot 1.3.4 cpu:s5pv210 架构体系armv7---BL2阶段内核引导细节do_bootm