龙空技术网

u-boot添加自定义命令

linux知识 132

前言:

此刻我们对“linux创建自定义命令”都比较重视,兄弟们都想要学习一些“linux创建自定义命令”的相关文章。那么小编也在网上网罗了一些关于“linux创建自定义命令””的相关知识,希望同学们能喜欢,我们一起来学习一下吧!

在开发过程中,时常会根据实际情况在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,添加内容如下

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.cfgroot@ubuntu:/home/ubuntu/Desktop/u-boot-2017.05-rc2#
自定义命令测试

u-boot终端下执行命令的过程可以参考之前文档

uboot-main_loop函数分析

标签: #linux创建自定义命令