网站首页 > 技术教程 正文
在开发过程中,时常会根据实际情况在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.cfg
root@ubuntu:/home/ubuntu/Desktop/u-boot-2017.05-rc2#
自定义命令测试
u-boot终端下执行命令的过程可以参考之前文档
uboot-main_loop函数分析
猜你喜欢
- 2025-09-04 面试常问的 25+ 个 Linux 命令_面试中linux常见的20个命令
- 2025-09-04 Linux 命令 sort (文档编辑)——想玩转linux就请一直看下去
- 2025-09-04 Linux内核操作insmode命令详解_in linux
- 2025-09-04 Linux基础网络设置_linux网络基础配置
- 2025-09-04 Linux curl命令_linux curl命令慢但是页面打开很快
- 2025-09-04 Linux使用alias设置命令的别名_linux修改alias
- 2025-09-04 Linux命令学习:make,make install,modprobe,lsmod
- 2025-09-04 如何在Linux中为常用命令创建别名?
- 2025-09-04 如何在 Linux 中创建自己的命令?_linux创建指令
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
- 
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
 
- 标签列表
- 
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
 

本文暂时没有评论,来添加一个吧(●'◡'●)