U-boot 添加命令 U_BOOT_CMD
U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。
/*命令宏U_BOOT_CMD*/
#define Struct_Section __attribute__ ((unused,section (".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}
每一个命令宏U_BOOT_CMD用cmd_tbl_t结构体描述一个命令
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 (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
};
参数意义是:
help 字符串表示的详细说明
在源代码里可发现命令都是在cmd_xxx.c里实现的
现在我们添加一个简单的测试命令
1、在common目录下添加一个hello.c文件
#include
#include
#ifdef CONFIG_CMD_HELLO
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int i;
printf("argc = %d\n",argc);
for(i = 0; i < argc; i++)
printf("i = %d, %s\n",i,argv[i]);
return 0;
}
U_BOOT_CMD(hello,CONFIG_SYS_MAXARGS,0,do_hello,
"hello world",
);
do_xxx函数必须定义成这样形式:
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
在填参数个数时要注意,CONFIG_SYS_MAXARGS是在include/configs/itop_4412_android.h里定义的,默认16
2、在common/Makefile中的#command添加如下内容:
COBJS-$(CONFIG_CMD_HELLO) += cmd_hello.o
3、在include/configs/itop_4412_android.h(该文件名根据实际操作,要针对自己的平台文件改,如itop_4412_android.h等)添加如下内容:
在#include 后添加: