Chinaunix首页 | 论坛 | 博客
  • 博客访问: 405980
  • 博文数量: 101
  • 博客积分: 2247
  • 博客等级: 大尉
  • 技术积分: 979
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-15 22:39
文章分类

全部博文(101)

文章存档

2012年(1)

2011年(100)

分类: 嵌入式

2011-06-29 14:55:22

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,从而完成了命令的执行。


阅读(1729) | 评论(0) | 转发(0) |
0

上一篇:U-Boot启动Linux

下一篇:20-Android MID Bootsound

给主人留下些什么吧!~~