首页 > 其他分享 >Uboot自定义命令

Uboot自定义命令

时间:2024-03-21 22:45:31浏览次数:14  
标签:Uboot 自定义 int cmd boot 命令 uboot hello

参考资料:https://blog.csdn.net/amf83302/article/details/102246527   使用uboot的时候,大多数都是直接编译再移植了,很少改动里面的具体内容,特别是其中包含的命令等。虽然里面包含了一些常用的提供给用户进行交互的命令,并且也比较实用了。但是,根据某些开发板的特殊操作和用户的特定需求,还是不得不在uboot中,添加一些供自己调试和开发的命令,这样会更方便快捷的开展工作。 在举例之前,先介绍一下有关uboot的命令定义。uboot中每个命令都是通过U_BOOT_CMD宏来定义的。这个宏定义了一个相关的结构体,文件是uboot/include/command.h,结构体为cmd_tbl_s。

struct cmd_tbl_s {
  char *name; /* 命令名 */
  int maxargs; /* 最大参数个数 */
  int repeatable; /* 是否自动重复 */
  int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);/*响应函数 */
  char *usage; /* 简短的帮助信息 */
#ifdef CONFIG_SYS_LONGHELP
  char *help; /*较详细的帮助信息 */
#endif
#ifdef CONFIG_AUTO_COMPLETE
  /* 自动补全参数 */
  int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};
宏定义如下,“##”与“#”都是预编译操作符,“##”有字符串连接的功能,“#”表示后面紧接着的是一个字符串。
#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}
uboot中所有的命令都在连接脚本u-boot.lds中定义的".u_boot_cmd"段保存:
. = .;
__u_boot_cmd_start = .; /*将 __u_boot_cmd_start指定为当前地址 */
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .; /*将__u_boot_cmd_end指定为当前地址*/
下面以添加一个hello命令为例说明添加命令的方法和步骤。 (1)首先,在common目录下添加一个cmd_hello.c文件,保存命令相关的代码。Uboot中一般把通用命令相关代码放在common 目录下,并且习惯以“cmd_<命令名>.c”为文件名。 (2) 定义“hello”命令
U_BOOT_CMD(
  hello,2,0,do_hello,
  "show hello uboot \n"," show hello uboot\n"
);
(3) 实现命令的函数 在cmd_hello.c中添加“hello”命令的响应函数的实现。
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
  printf(“hello uboot\n”);
  return 0;
}
(4) 将common/cmd_hello.c编译进u-boot.bin 在common/Makefile中加入如下代码:
COBJS-$(CONFIG_BOOT_HELLO) += cmd_hello.o
在include/configs/mini2440.h加入如代码:
#define CONFIG_BOOT_HELLO
重新编译下载U-Boot就可以使用hello命令了。更多嵌入式学习咨询郭老师QQ754634522 (5)hello命令执行的过程 在U-Boot中输入“hello”命令执行时,U-Boot接收输入的字符串“hello”,传递给run_command函数。run_command函数调用common/command.c中实现的find_cmd函数在__u_boot_cmd_start与__u_boot_cmd_end间查找命令,并返回menu命令的cmd_tbl_t结构。然后run_command函数使用返回的cmd_tbl_t结构中的函数指针调用hello命令的响应函数do_hello,从而完成了命令的执行。

标签:Uboot,自定义,int,cmd,boot,命令,uboot,hello
From: https://www.cnblogs.com/lethe1203/p/18088411

相关文章

  • 微信小程序(自定义tabBar)
     https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html    重新编译后,底部的tabBar就显示的是自定义tabBar文件夹下面的index.wxml的内容了然后我们可以使用vant的组件定义我们的tabbar ......
  • Uboot移植(二)
    参考资料:https://www.bilibili.com/video/BV12E411h71h?p=30&vd_source=432ba293ecfc949a4174ab91ccc526d6 1、bootcmdbootcmd保存了着uboot的默认命令,uboot倒计时结束之后就会执行bootcmd中的命令。这些命令一般都是用来启动Linux内核的,比如将EMMC或者flash中的Linux内核镜......
  • Uboot移植
    一个开发板运行uboot,DDR或者DRAM,串口,SD/EMMC等驱动要存在。这些基本要和原厂一样的 nxp官方uboot下载地址:https://github.com/Freescale/u-boot-fslcnxp官方imx6系统板子介绍:https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-......
  • Redis第二课,1.set key value(设置对应的key和value)2.get key(得到value值)Redis全局
    Redis的启动 redis-cli目录1.setkeyvalue(设置对应的key和value)2.getkey(得到value值)Redis全局命令(支持很多的数据结构)3.keys(用来查询当前服务器匹配的key)生产环境/线上环境4.exist(判定key是否存在):判定key是否存在​编辑5.DEL  key 返回删掉的key......
  • Linux的基本命令
    Linux文件基本命令1. touch创建指定文件2.mkdir创建目录3.rm删除指定文件或者目录4.rm-r删除目录(可以删除非空目录)5.rm-f强制删除(不询问,直接删除)6.rmdir删除空目录7.ls列出指定目录或者文件(不包括隐藏文件)8.ls-a列出当前目录下所有文......
  • HandlerInterceptor - 自定义拦截器
    自定义一个类实现HandlerInterceptor接口,加上@Component注解。根据需要重写方法publicinterfaceHandlerInterceptor{defaultbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{returntrue;......
  • [Kyana]常用命令与快捷键汇总
    01|快捷键mpv02|命令LinuxvimDockerportainerdockervolumecreateportainer_datadockerrun-d--nameportainer-p9000:9000-v/var/run/docker.sock:/var/run/docker.sock-vportainer_data:/data--restartalwaysportainer/portainermemosdockerrun-d--na......
  • 常用命令find 细则
    常用命令find细则前言find命令在Linux和Unix系统中被广泛使用,用于在目录树中查找文件,并可以对查找到的文件执行指定的操作。以下是find命令的一些常用选项和用法总结:常用选项1.-name:按照文件名查找文件。2.-iname:按照文件名查找文件,不区分大小写。3.-type:......
  • PGSQL COPY 命令的使用
    ddd根据大佬的测试 https://developer.aliyun.com/ask/54534,copy命令的效率是很高的。但copy命令只能操作本机的文件,所以浏览器上传的文件需要通过共享文件夹上传部署PGSQL服务器(测试IP为:192.168.1.11)中。//Uploadentirefile   UploadWholeFile.ashx......
  • 嵌入式mount挂载命令
    1.sudoapt-getinstallnfs-kernel-server2.sudovi/etc/exports//允许客户端挂载的目录,可添加任意多个,如果不设置,服务器将不允许客户端挂载/home/book/nfs*(rw,sync,no_root_squash) 3.sudo/etc/init.d/nfs-kernel-serverrestart[....]Restartingnfs-k......