• 2009-02-12

    u-boot命令配置 - [uboot]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://redboot.blogbus.com/logs/35085538.html


    u-boot启动后,进入命令模式,通过输入uboot提供的命令来进行交互操作。一些相关命令的用法已经在前面文章介绍,这里介绍一下uboot命令内部结构,并了解如何配置uboot的命令,以及可以自己添加一些命令。

    如何实现一个命令,看下面一个简单的例子,就明白了。

    uboot命令的数据结构定义:

    struct cmd_tbl_t {
        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)    */
        char        *help;        /* Help  message    (long)    */

    };

    声明命令的宏定义:

    #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(
        exit,    2,    1,    do_exit,
         "exit    - exit script\n",
        "    - exit functionality\n"
    );

    命令的具体实现:

    int
    do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
    {
        int r;

        r = 0;
        if (argc > 1)
            r = simple_strtoul(argv[1], NULL, 10);

        return -r - 2;
    }

    这样,就实现了一个命令 “exit” 。

    如果,我们需要自己添加一个新命令,只要有实现函数 do_xxx,和命令声明U_BOOT_CMD(xxx, ...) 就可以了。

    下面,我们介绍一下命令的配置方式。注意:最新的uboot命令配置方法发生变化,与以前不同。

    首先,在头文件 smdk2410.h (该文件前面文章有介绍) 包含了所需的命令头文件
    #include <config_cmd_default.h>


    在 config_cmd_default.h 中定义了,所需要用到的命令,如:
    #define CONFIG_CMD_MEMORY    /* md mm nm mw cp cmp crc base loop mtest */
    (所以,autoconf.mk里,就会有 CONFIG_CMD_MEMORY=y )

    而在common/Makefile 下,有这样的定义:
    COBJS-$(CONFIG_CMD_MEMORY) += cmd_mem.o

    这样,当config_cmd_default.h里有了相应定义,就会把相应实现进行编译。
    就可以获得相关命令的支持了。

     

     


    历史上的今天:

    u-boot移植 2009-02-12

    收藏到:Del.icio.us