U-boot 添加命令 U_BOOT_CMD(修正版本)以全志a33平台为例子

1 篇文章 0 订阅
0 篇文章 0 订阅
http://www.xuebuyuan.com/2197753.html
http://blog.chinaunix.net/uid-20665047-id-3485444.html
U-boot 添加命令 U_BOOT_CMD(修正版本)


以全志a33平台为例子


2013-02-01 16:51:49
分类: LINUX
U-boot 添加命令 U_BOOT_CMD 
U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。


    /*命令宏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  
    };  


参数意义是:


name     这是命令名字,不需要用双引号括起来
maxargs     最大参数的个数
rep     命令是否可重复,就是下一次按回车时再执行
cmd     对应的函数指针
usage     字符串表示的简短说明
help     字符串表示的详细说明


在源代码里可发现命令都是在cmd_xxx.c里实现的


现在我们添加一个简单的测试命令


1、在common目录下添加一个hello.c文件


#include <common.h>
#include <command.h>
// #include <version.h>
// #include <linux/compiler.h>


// const char __weak version_string[] = U_BOOT_VERSION_STRING;


// int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const 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, 1, 1, do_hello,
// "print monitor, compiler and linker version",
// ""
// );


// U_BOOT_CMD(hello,CONFIG_SYS_MAXARGS,0,do_h


U_BOOT_CMD(
hello, CONFIG_SYS_MAXARGS, 0, do_hello,
"wenyuanbo test u-boot command!!!!2015/5/23 17:09",
""
);




do_xxx函数必须定义成这样形式:


    cmd_tbl_s 结构体里的成员int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])


 


在填参数个数时要注意,CONFIG_SYS_MAXARGS是在include/configs/smdk2140.h里定义的,默认16
2、在common/Makefile中的#command添加如下内容:
COBJS-$(CONFIG_CMD_HELLO) += cmd_hello.o


V:\lichee\brandy\u-boot-2011.09\include\config_cmd_default.h
V:\lichee\brandy\u-boot-2011.09\include\config_cmd_defaults.h (这个有效!)
#define CONFIG_CMD_HELLO 1


3、在include/configs/smdk2410.h(该文件名根据实际操作,要针对自己的平台文件改,如smdk2410.h等)添加如下内容:
         在#include <config_cmd_default.h>后添加:
              #define CONFIG_CMD_HELLO
        或者在include/config_cmd_default.h文件中,添加该命令的宏定义。 


4、编译后下到板上


    U-Boot 2009.11 (12鏈?14 2011 - 00:44:00)  
      
      
    DRAM:  64 MB  
      
    Flash: 512 kB  
      
    NAND:  NAND_ECC_NONE selected by board driver. This is not recommended !!  
      
    64 MiB  
      
    In:    serial  
      
    Out:   serial  
      
    Err:   serial  
      
    Net:   dm9000  
      
    Hit any key to stop autoboot:  0   
      
    BAI2011/12/13 # hello  
      
    argc = 1  
      
    i = 0, hello  
      
    BAI2011/12/13 # hello this is my test!  
      
    argc = 5  
      
    i = 0, hello  
      
    i = 1, this  
      
    i = 2, is  
      
    i = 3, my  
      
    i = 4, test!  
      
    BAI2011/12/13 #   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值