1.建立common/cmd_hello.c
习惯上通用命令源代码放在common目录下,并且习惯以“cmd_<命令名>.c”为文件名。
2.定义“hello”命令
在cmd_hello.c中使用如下的代码定义“hello”命令:
U_BOOT_CMD(
hello, 3, 0, do_hello,
"hello \n",
" - test cmd..."
);
3.U_BOOT_CMD宏在include/command.h中定义,
其中U_BOOT_CMD命令格式如下:
U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
各个参数的意义如下:
name:命令名,非字符串,但在U_BOOT_CMD中用“#”符号转化为字符串
maxargs:命令的最大参数个数
rep:是否自动重复(按Enter键是否会重复执行)
cmd:该命令对应的响应函数
usage:简短的使用说明(字符串)
help:较详细的使用说明(字符串)
4.实现命令的函数
在cmd_hello.c中添加“hello”命令的响应函数的实现。具体的实现代码略:
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
/* 实现代码略 */
}
5.将common/cmd_hello.c编译进u-boot.bin
在common/Makefile中加入如下代码:
COBJS-$(CONFIG_BOOT_MENU) += cmd_hello.o
6.在需要的地方定义
#define CONFIG_BOOT_MENU 1
重新编译下载U-Boot就可以使用menu命令
======================================================================
hello命令执行的过程:
(1)在U-Boot中输入“hello”命令执行时,U-Boot接收输入的字符串“hello”,传递给run_command函数。
run_command函数在u-boot-2011.06-rc3/common/main.c中定义。
(2)run_command函数调用common/command.c中实现的find_cmd函数在__u_boot_cmd_start与__u_boot_cmd_end间查找命令,并返回hello命令的cmd_tbl_t结构。
find_cmd函数在u-boot-2011.06-rc3/common/command.c定义。
(3)结构体cmd_tbl_t在include/command.h中定义如下:
struct cmd_tbl_s {
char *name; /* 命令名 */
int maxargs; /* 最大参数个数 */
int repeatable; /* 是否自动重复 */
int (*cmd)(struct cmd_tbl_s *, int, int, char *[]); /* 响应函数 */
char *usage; /* 简短的帮助信息 */
#ifdef CONFIG_SYS_LONGHELP
char *help; /* 较详细的帮助信息 */
#endif
#ifdef CONFIG_AUTO_COMPLETE
/* 自动补全参数 */
int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};
(3)然后run_command函数使用返回的cmd_tbl_t结构中的函数指针调用hello命令的响应函数do_hello,从而完成了命令的执行。
阅读(1739) | 评论(0) | 转发(0) |