---
title: uboot-uboot 添加 自定义命令
date: 2020-05-13 16:51:38
categories:
tags:
- uboot
- cmd
- config
---

章节描述:

定制化uboot 的时偶尔需要添加自定义命令,本问介绍如何添加命令。

步骤

添加命令文件

在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"
);

修改 Makefile

修改 common/Makefile 在Makfile中添加一行:

COBJS-y += cmd_xx.o

附录 : 宏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}

我们分段来看:

命令所在的段:

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

由定义可知该命令在链接的时候链接的地址或者说该命令存放的位置是u_boot_cmd section

宏展开的结构体:

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添加menu命令的方法及U-Boot命令执行过程

    转;http://chenxing777414.blog.163.com/blog/static/186567350201141791224740/ 下面以添加menu命令(启动菜单)为例讲解U-Bo ...

  2. uboot 添加hello命令

    平台:MPC8315(POWERPC) 1.在/common/ 目录下创建自己的文件,最好前缀为cmd_. cmd_hello.c ********************************** ...

  3. BusyBox 添加 自定义命令\小程序 (applet)

    背景 在做嵌入式开的时候,busybox无疑是非常好用的命令集,所以很多时候都喜欢把busybox移植到我们的系统里面. 说明 添加一个很简单的命令--hello_busybox,输出"He ...

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

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

  5. MyEclipse中自定义maven命令(添加maven 命令)

    关于常用的Maven命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码 mvn test-compile :编译测试代码 mvn test ...

  6. 给 zsh 自定义命令添加参数自动补全

    有时我会自定义一些 zsh 命令,以便提升某些高频操作的效率.本文记录我给一个自定义命令添加参数自动补全的方法. 场景 我自定义了一个 zsh 命令 gmt,执行 gmt <b2>,可以将 ...

  7. uboot启动 及命令分析(3)

    u-boot命令 先贴一个重要结构,位于uboot/include/command.h,这个结构代表每个uboot命令 struct cmd_tbl_s { char     *name;   /* ...

  8. uboot中的命令体系

    一.uboot的命令体系介绍以及实例分析: U-Boot 的命令实现大多在 common 目录下.在该目录下命令的代码文件都是以“ cmd_”开头的,如下图所示: 其中每一个文件都是一个命令实现的代码 ...

  9. u-boot-1.1.6实现自定义命令

    学习目标: 1.了解u-boot-1.1.6中命令的实现机制 2.掌握如何在u-boot-1.1.6中添加自定义命令 1.命令的实现机制 uboot运行在命令行解析模式时,在串口终端输入uboot命令 ...

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

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

随机推荐

  1. 利用Navicat的历史日志查询表的索引信息(还可以查询很多系统级别的信息)

    1.使用前提 所有的能用Navicat连接的数据库都可以使用这个方法 DDL/DML语句都有 2.Navicat中的历史日志 3.比如查询mysql的表的索引 先打开"历史记录" ...

  2. Photoshop AI 令人惊叹的生成式填充

    原文地址:Adobe Photoshop's Amazing New Generative Fill | by Paul DelSignore | The Generat | May, 2023 | ...

  3. Docker 必知必会----初识

    什么是Docker?Docker 是一个开源的容器管理引擎.开发者可以通过Docker直接管理应用程序所需要的容器.它的logo如下: 为什么需要Docker使用Docker主要有两个原因,1.屏蔽不 ...

  4. golang 常用操作

    golang 获取切片 slice 第一个 最后一个 元素 复合数据类型切片通常用作Go中索引数据的口语结构. 该类型[]intSlice是具有类型为integer的元素的切片. len函数用于获取切 ...

  5. ruby on rails中sidekiq的使用

    参考文章: https://www.jianshu.com/p/7ea473097023 安装redis 配置redis 配置sidekiq所依赖的redis位置,必须同时定义sidekiq的serv ...

  6. GCC编译选项含义解析

    GCC 编译 GCC的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 可以通过gcc -E hello.cc -o hello.i查看中间结果 编译(Compiling) 汇编 ...

  7. visualstudio着色器设计器shadergraph使用

    第一次使用着色器设计器. vs的着色器设计器是hlsl的着色器设计器.不得不说里面节点得翻译是一坨屎. 附一个光线于法向量夹角渲染的设计图

  8. GROUP BY clause and contains nonaggregated 报错处理

    1055 - Expression #16 of SELECT list is not in GROUP BY clause and contains nonaggregated column 报错处 ...

  9. 【前端】css js 全屏 esc退出全屏 滚动条隐藏 兼容火狐,文字超出容器长度省略号显示

    全屏 if (docElm.requestFullscreen) { docElm.requestFullscreen(); } else if (docElm.msRequestFullscreen ...

  10. jQuery——链式操作

    链式操作,即连续操作. 例如: <!DOCTYPE html> <html> <head> <script src="https://cdn.boo ...