UBoot添加命令的方法

1. 具体实现步骤

①在./common文件夹下新建cmd_led.c,并在此文件中添加如下内容

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

int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
    printf("Led test start\n");
    return 0;
}

U_BOOT_CMD(
    led,    2,    0,    do_led,
    "led test command",
    "led test command"
);

②在./common/Makefile中添加:

COBJS-y += cmd_led.o

③在Linux环境下,重新编译u-boot,得到u-boot.bin,并下载到自己的开发板中测试,输入help就会发现led命令

2.原理分析

①U_BOOT_CMD定义在include/command.h:

#define U_BOOT_CMD(name, maxargs, rep, cmd, usage, help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}

②Struct_Section 定义为:

#define Struct_Section  __attribute__ ((unused,section (".u_boot_cmd")))

③我们定义的led命令结构展开为:

cmd_tbl_t __u_boot_cmd_led __attribute__ ((unused, section (".u_boot_cmd")))= {"led", 2, 0, do_led, "Led Usage", "Led Help"};

很明显,这是在定义一个cmd_tbl_t类型的变量__u_boot_cmd_led,并给他赋初值。
__attribute__((unused, section(".u_boot_cmd")))该部分是对变量的特殊声明(GNU特有),告诉编译器,该变量存放在链接脚本所指定的u_boot_cmd段。

    __u_boot_cmd_start = .;
    .u_boot_cmd : { *(.u_boot_cmd) }
    __u_boot_cmd_end = .;

④led命令执行过程:
在串口终端输入"led"命令时,串口接收到数据,并传递给run_command()函数,run_command()函数调用common/command.c中实现的find_cmd()函数在u_boot_list段内查找命令,并返回cmd_tbl_t结构。然后run_command()函数使用返回的cmd_tbl_t结构中的函数指针调用do_led(),从而完成命令的执行。

时间: 2024-10-10 08:47:31

UBoot添加命令的方法的相关文章

uboot 添加命令

uboot中有几十个常用的命令,可以帮助我们快速实现数据的拷贝.传递.状态显示等需求 但是这还不够 ,我们需要更多的命令实现差异化,uboot提供的命令也不够 添加命令需要三步: 这里就举一个例子  添加 一个名字叫test的命令 添加前一定要检测不要和存在的命令重名 一 .添加命令实现函数的文件 在common 文件夹下添加文件  cmd_show.c 这里面推荐这么命名,可以看到这个文件夹下都是这么命名的 ,我们也不要换了   当然是可以改的   只要和第二步配合好就行了 里面这么写就好 #

一步步玩pcDuino3--uboot下的ping,添加命令可以接受来自host的ping

uboot是一个非常优秀的开源项目.不仅仅可以学习bootloader,嵌入式,各种总线协议.还可以了解网络协议栈.在嵌入式开发中,经常使用uboot的tftp和nfs来加快开发的效率.那么在tftp可以使用之前,我们要保证host和pcDuino3可以ping通.在uboot下可以ping通host,但是host不能ping通uboot,这是因为uboot不是操作系统,我们需要做了个命令来循环等待来自host的ping命令. 在为uboot添加命令接受来自host的ping之前,我们先了解一下

uboot之添加命令

1.添加命令 若要向Uboot中添加自己的命令,而自己又不想知道命令实现的原理,可以按照以下做法: 1.在uboot/common目录下,随便找一个cmd_xxx.c文件,将cmd_xxx.c文件拷贝一下,并重新命名为cmd_hello.c cp cmd_xxx.c cmd_hello.c 2.进入到cmd_hello.c中,修改 a:修改宏U_BOOT_CMD U_BOOT_CMD宏参数有6个: 第一个参数:添加的命令的名字 第二个参数:添加的命令最多有几个参数(注意,假如你设置的参数个数是3

uboot自定义添加命令

1.添加命令 1.u-boot的命令格式: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") name:命令的名字,不是一个字符串: maxargs:最大的参数个数: repeatable:命令是可重复的: command:对应的函数指针 2.在uboot/common目录下,随便找一个cmd_xxx.c文件,将cmd_xxx.c文件拷贝一下,并重新命名为cmd_hello.c cp cmd_xxx

uboot常用命令

一. 常用简单命令 1.1. help命令 a. 帮助查看其他命令的使用方法,类型linux下man b. 示例: help help x210 # help help help [command ...] - show help information (for 'command') 'help' prints online help for the monitor commands. Without arguments, it prints a short usage message for

linux cat命令使用方法详解--把档案串连接后传到基本输出

linux cat命令使用方法详解--把档案串连接后传到基本输出 日期:2011-12-05 点击:2324 来源: 未知 分享至: 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)参数:-n 或 --number 由 1 开始对所有输出的行数编号-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号-s 或 --squeeze-b

VS2013在右键菜单添加命令插件开发

一.选择Visual Studio Package模板建立插件项目 由于此功能需要在右键菜单上添加命令,所以选择Visual Studio Package模板,根据模板向导步骤插件项目,在Select VSPackage Options步骤的时候选择Menu Command选项,如图-1所示: 图-1 接下来是设置命令的名称,如图-2所示 图-2 修改Command name的值,将其设置为我们要添加到右键菜单时的名称.Command ID可选择是否修改,值是一个十六进制数,由于标识我们的添加的

快速学习命令的方法

概述:用户使用shell跟内核交互,Linux 中有很多命令,不同的命令有不同的功能.多个命令合起来可以完成一个大的功能.命令很多我们不可能记得每条命令的用法. 所以,我们必须有一种方法来快速知道一个命令是如何使用的,有什么作用.所以,几乎所有的命令都提供了帮助手册,告诉命令的使用者如何使用命令.命令 的作用等等.帮助手册页很长,我们不可能为了使用一个命令,而从头到尾把帮助手册读完,这时候需要一种快速读懂(有目的的去读)命令的帮助手册的方法.是如何实现的呢?管理整个计算硬件的其实是核心(kern

Linux中history历史命令使用方法详解

在/etc/profile里添加如下: #History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if [ ! -d $HISTDIR ]; then         mkdir -p $HISTDIR         chmod 777 $HISTDIR fi export HISTSIZE=100000 export HISTFILE="$HISTDIR/${LOGNAME}.hist"