U_BOOT_CMD 命令数据结构

转载 2012年03月25日 01:18:56
U_BOOT_CMD 命令数据结构
2010年08月19日 星期四 18:33

The user interface to U-Boot consists of a command line interpreter (CLI), much like a Linux shell prompt. When connected via a serial line you can interactively enter commands and see the results.

在Uboot的doc目录下的README.commands文件说明如下:
Commands are added to U-Boot by creating a new command structure.
This is done by first including command.h

Then using the U_BOOT_CMD() macro to fill in a cmd_tbl_t struct.

U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")

name: is the name of the commad. THIS IS NOT a string.
maxargs: the maximumn numbers of arguments this function takes
command: Function pointer (*cmd)(struct cmd_tbl_s *, int, int, char *[ ]);
usage: Short description. This is a string
help: long description. This is a string


**** Behind the scene ******

The structure created is named with a special prefix (__u_boot_cmd_)
and placed by the linker in a special section.

This makes it possible for the final link to extract all commands
compiled into any object code and construct a static array so the
command can be found in an array starting at __u_boot_cmd_start.

If a new board is defined do not forget to define the command section
by writing in u-boot.lds ($(TOPDIR)/board/boardname/u-boot.lds) these
3 lines:

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

U-boot的命令用struct cmd_tbl_t来实现。cmd_tbl_t的主要数据成分是命令名称(name)和命令处理函数(cmd),此外还包括最大参数个数(maxargs),是否可重复执行(repeatable),使用方法和帮助信息(usage,help)等。这个数据结构在文件include/command.h中定义:
#define Struct_Section __attribute__ ((unused,section (".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}

举例如下:
bootm命令定义如下:
U_BOOT_CMD(
   bootm, CFG_MAXARGS, 1, do_bootm,
   "bootm   - boot application image from memory\n",
   "[addr [arg ...]]\n    - boot application image stored in memory\n"
   "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
   "\t'arg' can be the address of an initrd image\n"
);
用宏定义替换后就是:
cmd_tbl_t     __u_boot_cmd_bootm   __attribute__ ((unused,section (".u_boot_cmd")))=
{
bootm,
CFG_MAXARGS,
1,
do_bootm,
   "bootm   - boot application image from memory\n",
   "[addr [arg ...]]\n    - boot application image stored in memory\n"
   "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
   "\t'arg' can be the address of an initrd image\n"
}
这样就为bootm命令定义了一个cmd_tbl_t 结构。

但__attribute__ ((unused,section (".u_boot_cmd")))又是实现什么功能呢?基于什么考虑呢?
它是用来定义用户的命令, 每当初始化这样的一条命令, 就将在.u_boot_cmd段中增加一段数据。以便于find_cmd函数查找命令。u-boot中的readme文件对这个功能是这样描述的: construct a static array so the command can be found in an array starting at __u_boot_cmd_start.

U_BOOT_CMD 命令实现分析

start_armboot { } main_loop { 1. 环境变量mtdparts, 调用mtdparts_init 2. 如果在启动过程中 无空格键按下则boot_zImag...
  • lqxandroid2012
  • lqxandroid2012
  • 2013年03月27日 15:27
  • 970

<Linux>u-boot 命令分析并编写一个命令

一、run_command函数 前面我们说到,u-boot的核心就是run_command这个函数,那么我们就来分析一下这个函数具体要做那些事情。 1321行,对命令进行解析。举个例子: 比如说...
  • Stephen_Lu_Fahai
  • Stephen_Lu_Fahai
  • 2017年04月18日 23:42
  • 303

U-Boot添加命令的方法及U-Boot命令执行过程

(一)U-Boot启动过程--详细版的完全分析   分类: U_boot知识和移植 2011-10-29 09:42 664人阅读 评论(0) 收藏 举报      -----------------...
  • yuzeze
  • yuzeze
  • 2016年06月24日 17:16
  • 1472

U_BOOT_CMD命令解析

在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的。 先来看UBOOT当中关于U_BOOT_CMD这个宏的定义: #define Struct_Section __attribut...
  • qq_23084801
  • qq_23084801
  • 2017年07月19日 16:33
  • 73

U_BOOT_CMD命令解析

在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的。 先来看UBOOT当中关于U_BOOT_CMD这个宏的定义: #define Struct_Section __at...
  • pugu12
  • pugu12
  • 2015年08月19日 16:40
  • 367

U_BOOT_CMD命令的实现

http://blog.csdn.net/ywf861029/article/details/6134834 在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的,其本质其实理...
  • cjsycyl
  • cjsycyl
  • 2013年05月29日 08:57
  • 503

U_BOOT_CMD命令格式

下面以添加menu命令为例分析U-Boot添加命令的方法。 (1)    在common目录下新建cmd_menu.c文件 习惯上把通用命令源代码放在common目录下,与开发板专有命令源代码则放在b...
  • u010402372
  • u010402372
  • 2013年08月14日 21:34
  • 1125

U_BOOT_CMD命令的实现

在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的,其本质其实理解起来也很简单,不过今天也从中学到了一点东西 先来看UBOOT当中关于U_BOOT_CMD这个宏的定义: /* 这是...
  • zdh_12
  • zdh_12
  • 2013年07月08日 16:35
  • 508

UBoot命令解析与执行流程

本文为CP根据网上内容以及U-Boot 2014.4版本进行整理而成。 原文地址为http://blog.chinaunix.net/uid-8867796-id-358806.html ————...
  • jiujiaobusiniao
  • jiujiaobusiniao
  • 2016年11月25日 16:09
  • 1077

在uboot中加入cmd_run命令,运行环境变量

在学习uboot的过程中会经常烧录程序,每次都要敲一些下载指令。这样是不是很麻烦,有什么办法能快速的烧写呢。很简单,将需要敲击的指令编译到uboot中,以环境变量的形式存在。但是环境变量很好加,如何运...
  • copyright87
  • copyright87
  • 2015年10月26日 15:33
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U_BOOT_CMD 命令数据结构
举报原因:
原因补充:

(最多只允许输入30个字)