前言:
此刻我们对“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创建自定义命令