ref : https://www.cnblogs.com/FREMONT/p/9824226.html

1、添加命令
1.1在common目录下,新建一个cmd_xx.c,
需要添加的命令格式为:
int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
并在文件中使用 U_BOOT_CMD 宏进行有关说明
U_BOOT_CMD(name, maxargs, repeatable, command, "usage","help")
 
宏参数有6个:
第一个参数:添加的命令的名字
第二个参数:添加的命令最多有几个参数(注意,假如你设置的参数个数是3,而实际的参数个数是4,那么执行命令会输出帮助信息的)
第三个参数:是否重复(1重复,0不重复)(即按下Enter键的时候,自动执行上次的命令)
第四个参数:执行函数,即运行了命令具体做啥会在这个函数中体现出来
第五个参数:帮助信息(short)
第六个参数:帮助信息(long)
 
以下是最精简的命令示例:
#include <command.h>
#include <common.h>
 
int do_hello(cmd_tbl_t *cmdtp,int flag,int argc,char *argv)
{
    printf("my test \n");
    return 0;
}
 
U_BOOT_CMD(
hello,1,0,do_hello,"usage:test\n","help:test\n"
);
1.2 修改 common/Makefile 
    在Makfile中添加一行:
       COBJS-y += cmd_hello.o 
 
2、uboot命令解析
  uboot的命令基本都是基于宏U_BOOT_CMD实现的,所以解析下该宏:
  通过搜索,我们找到U_BOOT_CMD该宏的定义:
  #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
  cmd_tbl_t   __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
  1.#define Struct_Section  __attribute__ ((unused,section (".u_boot_cmd"))) 
  由定义可知该命令在链接的时候链接的地址或者说该命令存放的位置是u_boot_cmd section
  2.typedef struct cmd_tbl_s        cmd_tbl_t  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
}

uboot 添加自定义命令的更多相关文章

  1. u-boot中添加自定义命令

    1.u-boot命令机制u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现:struct cmd_tbl_s{ char * ...

  2. uboot中添加自定义命令

    uboot中可以通过修改源程序来添加自定义命令,进一步扩展uboot的功能. 我想在uboot下添加一条新的命令(名为varcpy),用来拷贝uboot中的环境变量. 修改方式如下: 创建新文件com ...

  3. (二)ubuntu学习前传—uboot常见命令

    1.uboot命令类似于linux行缓冲命令行,当我们向终端命令行输入命令的时候,这些命令没有立即被系统识别,而是被缓冲到一个缓存区(也就是系统认为我换没有输入完),当我们按下回车键(换行)后,系统就 ...

  4. UBoot常用命令手册

    UBoot常用命令手册 U-Boot还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明. 1.bootm bootm ...

  5. 编译u-boot命令和u-boot常用命令

    一.编译u-boot命令 1.配置开发板 #make TQ2440_config 2.编译 #make all 3.交叉编译器是crosstools_3.4.5_softfloat” 使用4.3.3版 ...

  6. UBOOT添加命令的执行流程

    BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,它把操作系统和硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要,在整个开发中也占有相当大的比例.U-BOOT是当前比较流行 ...

  7. u-boot(四)命令实现

    目录 u-boot(四)命令实现 分析run_command 小结 自定义一个命令 代码 makefile title: u-boot(四)命令实现 tags: linux date: 2018-09 ...

  8. uboot 的命令体系

    1.代码位置 (1)uboot命令体系的实现代码在uboot/common/cmd_xxx.c中.有若干个.c文件和命令体系有关.(还有command.c  main.c也是和命令有关的) 2.传参方 ...

  9. uboot常用命令

    一. 常用简单命令 1.1. help命令 a. 帮助查看其他命令的使用方法,类型linux下man b. 示例: help help x210 # help help help [command . ...

随机推荐

  1. 4.linux vim 编辑器的基本操作

    一.vim编辑器基本操作       1.vim 编辑器 :  三种工作模式                              命令模式           a.i.o             ...

  2. java定时案例

    好久没写笔记了,变懒了! java定时运行的三个案例: 一, 通过sleep方法来达到定时任务的效果 public class testTime { public static void main(S ...

  3. ngx.shared.DICT.incr 详解

    ngx.shared.DICT.incr 原文: ngx.shared.DICT.incr syntax: newval, err, forcible? = ngx.shared.DICT:incr( ...

  4. Mac中好用的快捷键

    1.safari safariy页面刷新:Command+R,类似于Win系统里面的F5

  5. angular 中如何绑定属性

    <!--The content below is only a placeholder and can be replaced.--> <div style="text-a ...

  6. List&Set

    List a.普通for循环, 使用get()逐个获取 b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法 c.增强for循环, 只要可以使用Iterat ...

  7. 【分类算法】朴素贝叶斯(Naive Bayes)

    0 - 算法 给定如下数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值.则 ...

  8. Excel导出问题

    问题一:本地导出正常,部署到linux服务器导出文件内容乱码? 解决:修改服务器tomcat配置 server.xml 添加URIEncoding="UTF-8" <Conn ...

  9. 123457123456#0#-----com.threeapp.SuanShuXiaoTianCai01----数学算术小天才

    com.threeapp.SuanShuXiaoTianCai01----数学算术小天才

  10. 【Leetcode_easy】1122. Relative Sort Array

    problem 1122. Relative Sort Array 参考 1. Leetcode_easy_1122. Relative Sort Array; 2. helloacm; 完