Skip to content

LV220-U-Boot自定义命令实例

前面我们已经大概了解了命令的定义和执行过程,我们来自定义一个简单的命令。

一、命令编写

1. gpio_demo.c

c
/*
 * Control GPIO pins on the fly
 *
 * Copyright (c) 2008-2011 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

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

static int do_gpio_demo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	int i = 0;
    printf("hello gpio_demo!argc=%d flag=%d\n", argc, flag);
    printf("\tcmdtp->name=%s\n", cmdtp->name);
    printf("\tcmdtp->maxargs=%d\n", cmdtp->maxargs);
    printf("\tcmdtp->usage=%s\n", cmdtp->usage);
    printf("\tcmdtp->help=%s\n", cmdtp->help);
    printf("\n");
    for(i = 0; i < argc; i++)
    {
        printf("[%s][%d]argv[%d]=%s\n", __FUNCTION__, __LINE__, i, argv[i]);
    }
	return 0;
}

U_BOOT_CMD(gpio_demo, 4, 0, do_gpio_demo,
	   "sumu gpio_demo",
	   "print args");

2. Makefile

在 cmd 目录中的 Makefile 文件要添加源文件的编译:

makefile
obj-y += gpio_demo.o

二、编译源码

1. 编译脚本

我们直接编译移植过的 uboot,可以用这个脚本:1.sh,出现这个提示表示编译完成:

image-20241116195759671

2. 映射文件

我们看下编译后生成的 u-boot.map 文件,可以搜索一下 gpio_demo 关键字,会看到如下信息:

md
 .u_boot_list_2_cmd_2_gpio_demo
                0x000000008788a05c       0x1c cmd/built-in.o
                0x000000008788a05c                _u_boot_list_2_cmd_2_gpio_demo
image-20241116195701362

这就说明我们添加的命令成功了。

三、开发板验证

我们烧写到开发板中,然后启动,我们先敲一个 help 命令:

shell
=> help
image-20241116195906526

在 uboot 的命令模式执行:

shell
=> gpio_demo 1 2 3 4 5

会看到有如下输出:

image-20241116200022941

因为我们设置的最多传入 4 个参数,所以有些超了的并不是我们执行 do_gpio_demo()函数的打印。但是到这里就说明我们的自定义命令完成了。