uboot命令的实现
先分一下,uboot如何解析我们输进去的命令,其中argv[x]
就是用来保存每一条指令,uboot支持多条命令一起输入,用分号;隔开
/* Extract arguments */
if ((argc = parse_line (finaltoken, argv)) == 0) {
rc = -1; /* no command at all */
continue;
}
然后是在表中查找是否有输入的命令,后续还要做一些命令合格性的检查
/* Look up command in command table */
if ((cmdtp = find_cmd(argv[0])) == NULL) {
printf ("Unknown command '%s' - try 'help'\n", argv[0]);
rc = -1; /* give up after bad command */
continue;
}
/* found - check max args */
if (argc > cmdtp->maxargs) {
printf ("Usage:\n%s\n", cmdtp->usage);
rc = -1;
continue;
}
其中有个结构体需要注意,每个命令,都有一个名字,还有对应的参数,以及执行命令的函数,这些都被打包放在一起结构体变量中
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 CFG_LONGHELP
char *help; /* Help message