设为首页 加入收藏

TOP

U-Boot下用do_run()函数来执行U_BOOT_CMD定义的命令
2014-11-24 14:06:06 来源: 作者: 【 】 浏览:3
Tags:U-Boot 下用 do_run 函数 执行 U_BOOT_CMD 定义 命令

研究了一下uboot中怎么用do_run()函数来执行定义好的一些命令,发现其实也挺简单的,关键是得把do_run函数的几个参数吃透,这几个参数都是由uboot commmod 的



cmd_tbl_s结构体决定的,U_BOOT_CMD的宏定义也取决于它,如下:




#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}








struct cmd_tbl_s {
char *name; /* Command Name */
int maxargs; /* maximum number of arguments */
int repeatable; /* autorepeat allowed */
/* Implementation function */
int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
char *usage; /* Usage message (short) */
#ifdef CONFIG_SYS_LONGHELP
char *help; /* Help message (long) */
#endif
#ifdef CONFIG_AUTO_COMPLETE
/* do auto completion on the arguments */
int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
}




对比两者后很容易就明白了怎样去定义一个uboot下的命令。



接下来看看do_run函数的定义(在../boot/common/main.c下):



#if defined(CONFIG_CMD_RUN)
int do_run (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
{
int i;

if (argc < 2) { //参数个数小于2则提示重新输入
cmd_usage(cmdtp);
return 1;
}

for (i=1; i char *arg;

if ((arg = getenv (argv[i])) == NULL) {
printf ("## Error: \"%s\" not defined\n", argv[i]);
return 1;
}
#ifndef CONFIG_SYS_HUSH_PARSER


if (run_command (arg, flag) == -1){ //调用run_command函数,先


查找命令,然后执行命令
return 1;
}
#else
if (parse_string_outer(arg,
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0){
return 1;
}
#endif
}
return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇S3C2410 Linux下如何访问IO端口 下一篇iOS 5中的strong和weak关键字

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: