u-boot添加自定义命令

在开发过程中,时常会根据实际情况在U-BOOT阶段完成一些外设的初始化,或者实现一些功能应用。本文给大家介绍一下如何在u-boot中通过增加自定义的命令方式来达到这一目的。

编写源文件

在cmd目录下创建command_test.c文件,内容如下:

/*
 * Copyright 2000-2009
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */

#include <common.h>
#include <command.h>

static int do_command_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
        printf("test for add command.\n");
        return 0;
}

U_BOOT_CMD(
        command_test,   CONFIG_SYS_MAXARGS,     1,      do_command_test,
        "test for add command",
        "\n"
        "       - test  commands\n"
        "help command ...\n"
        "       - print detailed usage of 'command'"
);

name:命令名称。注意:这不是一个字符串。
maxargs:此函数接受的最大参数值,包括命令本身。
repeatable:0 - 不允许自动重复;1 - 允许自动重复。
command:指向命令函数的指针。这是在u-boot命令行下发出命令时调用的函数。
usage:用于描述命令的提示信息。是一个字符串。
help:长描述。这是一个字符串。只有定义了CONFIG_SYS_LONGHELP时,长描述才可用。

命令函数指针声明如下:

int (*cmd)(struct cmd_tbl *cmdtp, int flag, int argc, const char *argv[]);

cmdtp:描述该命令的表条目。
flag:可以包含以下几种位图:CMD_FLAG_REPEAT - 重复执行最后一条命令;CMD_FLAG_BOOTD - 该命令由bootd命令调用;CMD_FLAG_ENV - 该命令由run命令调用。
argc:包括命令在内的参数的数目。
argv:参数。允许的返回值为:CMD_RET_SUCCESS - 标志命令执行成功;CMD_RET_FAILURE - 命令执行失败;CMD_RET_USAGE - 使用无效参数调用命令。这个值将显示用法字符串。

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) */
    char        *help;      /* Help  message    (long)  */
    /* do auto completion on the arguments */
    int     (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
};

typedef struct cmd_tbl_s    cmd_tbl_t;
修改Makefile

修改cmd/Makefile,添加内容如下

b44f07d38369a178071f1b627b35e35c.png

u-boot Makefile编译过程可以参考之前文档。
uboot Makefile解析

重新编译u-boot
root@ubuntu:/home/ubuntu/Desktop/u-boot-2017.05-rc2# make ARCH=arm CROSS_COMPLIE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
#
# configuration written to .config
#
root@ubuntu:/home/ubuntu/Desktop/u-boot-2017.05-rc2# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK     include/config.h
  CFG     u-boot.cfg
  GEN     include/autoconf.mk
  GEN     include/autoconf.mk.dep
  CHK     include/config/uboot.release
  CHK     include/generated/version_autogenerated.h
  CHK     include/generated/timestamp_autogenerated.h
  UPD     include/generated/timestamp_autogenerated.h
  CHK     include/generated/generic-asm-offsets.h
  CHK     include/generated/asm-offsets.h
  HOSTCC  tools/mkenvimage.o
  HOSTLD  tools/mkenvimage
  HOSTCC  tools/fit_image.o
  HOSTCC  tools/image-host.o
  HOSTCC  tools/dumpimage.o
  HOSTLD  tools/dumpimage
  HOSTCC  tools/mkimage.o
  HOSTLD  tools/mkimage
  CC      cmd/version.o
  CC      cmd/command_test.o
  LD      cmd/built-in.o
  CC      common/main.o
  LD      common/built-in.o
  CC      lib/efi_loader/helloworld.o
  LD      lib/efi_loader/helloworld.so
  OBJCOPY lib/efi_loader/helloworld.efi
  CC      lib/smbios.o
  CC      lib/display_options.o
  LD      lib/built-in.o
  LD      u-boot
  OBJCOPY u-boot.srec
  OBJCOPY u-boot-nodtb.bin
  COPY    u-boot.bin
  SYM     u-boot.sym
  CFGCHK  u-boot.cfg
root@ubuntu:/home/ubuntu/Desktop/u-boot-2017.05-rc2#
自定义命令测试

12c4329a19ce9a1b98908bd649396faf.png

acbd4930b1683296861c281ac11d6cb6.png

u-boot终端下执行命令的过程可以参考之前文档
uboot-main_loop函数分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值