当前位置: 首页 > news >正文

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.c cmd_hello.c

  3.进入到cmd_hello.c中,修改

    a:修改宏U_BOOT_CMD

    U_BOOT_CMD宏参数有6个:

    第一个参数:添加的命令的名字

    第二个参数:添加的命令最多有几个参数(注意,假如你设置的参数个数是3,而实际的参数个数是4,那么执行命令会输出帮助信息的)

    第三个参数:是否重复(1重复,0不重复)(即按下Enter键的时候,自动执行上次的命令)

    第四个参数:执行函数,即运行了命令具体做啥会在这个函数中体现出来

    第五个参数:帮助信息(short)

    第六个参数:帮助信息(long)

    b:定义执行函数

    执行函数格式:int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

    然后在该函数中添加你想要做的事,比如打印一行信息

    int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

    {

      printf("hello world\n");

      return 0;  

    }

    c:uboot中添加命令基本操作已经做完,但是还差一步,就是将该命令添加进uboot中,

    之前的操作虽然添加了一个cmd_hello.c文件,但是还没有将该文件放进Uboot的代码中,

    所以,我们需要在uboot下common文件的Makfile中添加一行:

       COBJS-y += cmd_hello.o

复制代码
#include<command.h>
#include<common.h>
#ifdef CONFIG_CMD_HELLO
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"
);
#endif
复制代码

 

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
}

1、u-boot添加命令
1) u-boot正常运行后等待用户输入命令,想要为u-boot添加新命令,操作步骤很简单,原因是u-boot有现成的命令添加框架。
2)第一步,在common文件夹下新增c文件,cmd_xx.c,xx就是新增命令。
3)第二步,cmd_xx.c文件中添加头文件,及命令声明和命令实现函数。
#include <common.h>
#include <command.h>

static int do_help(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
cmd_tbl_t *start = ll_entry_start(cmd_tbl_t, cmd);
const int len = ll_entry_count(cmd_tbl_t, cmd);
return _do_help(start, len, cmdtp, flag, argc, argv);
}

U_BOOT_CMD(
help, CONFIG_SYS_MAXARGS, 1, do_help,
"print command description/usage",
"\n"
" - print brief description of all commands\n"
"help command ...\n"
" - print detailed usage of 'command'"
);
4)第三步,common/Makefile文件添加cmd_xx.o,实现命令编译,完成命令添加。

5)如上,只需要三步,同把大象装进冰箱是一个道理。

转载于:https://www.cnblogs.com/Ph-one/p/11532098.html

相关文章:

  • uboot移植spi驱动
  • 训练一个神经网络 能让她认得我
  • Matlab注释的几个方法
  • Matlab 图像平移、旋转、缩放、镜像
  • 调整图像大小调整图片大小
  • matlab图像灰度调整——imadjust函数的使用
  • Matlab实现直方图均衡化
  • 图像处理之图像的平滑与锐化
  • Matlab常用函数
  • 空间域平滑滤波器
  • github免费私有仓库使用
  • android.mk-include
  • imfilter
  • matlab fspecial 用法解释
  • 几种常见空间滤波器MATLAB实现
  • Android Volley源码解析
  • CSS 三角实现
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Mysql数据库的条件查询语句
  • php的插入排序,通过双层for循环
  • Twitter赢在开放,三年创造奇迹
  • 浮现式设计
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 记录一下第一次使用npm
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 如何实现 font-size 的响应式
  • 删除表内多余的重复数据
  • 我看到的前端
  • 系统认识JavaScript正则表达式
  • 学习笔记TF060:图像语音结合,看图说话
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • #pragma once
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (学习日记)2024.02.29:UCOSIII第二节
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net Remoting(分离服务程序实现) - Part.3
  • @ModelAttribute使用详解
  • [ JavaScript ] JSON方法
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [CTO札记]如何测试用户接受度?
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明
  • [HTTP]HTTP协议的状态码
  • [ICCV2017]Neural Person Search Machines
  • [iOS]iOS获取设备信息经常用法
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [linux time命令学习篇] time 统计命令执行的时间
  • [Linux]进程信号(信号入门 | 信号产生的方式 | 信号捕捉初识)
  • [NOIP2005]过河
  • [one_demo_6]逆置整数