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 命令数据结构

The user interface to U-Boot consists of a command line interpreter (CLI), much like a Linux shell p...
  • webhack
  • webhack
  • 2012年02月24日 10:19
  • 1248

U_BOOT_CMD 命令实现分析

start_armboot { } main_loop { 1. 环境变量mtdparts, 调用mtdparts_init 2. 如果在启动过程中 无空格键按下则boot_zImag...

uboot下用do_run()函数来执行U_BOOT_CMD定义的命令

今天研究了一下uboot中怎么用do_run()函数来执行定义好的一些命令,发现其实也挺简单的,关键是得把do_run函数的几个参数吃透,这几个参数都是由uboot commmod 的cmd_tbl_...

U_BOOT_CMD命令解析

在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的。 先来看UBOOT当中关于U_BOOT_CMD这个宏的定义: #define Struct_Section __attribut...

U_BOOT_CMD命令的实现

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

U-boot 添加命令 U_BOOT_CMD

U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。 /*命令宏U_...

linux进程/内存管理的数据结构之u区

一个进程的上下文包括:用户级上下文,寄存器上下文和系统级上下文。 用户级上下文:正文,数据,用户栈区和共享存储区; 寄存器上下文:程序寄存器(IP),即CPU将要执行的下一条指...
  • ruglcc
  • ruglcc
  • 2012年08月05日 12:06
  • 2820

u-boot主要的数据结构

u-boot的主要功能是用于引导OS的,但是本身也提供许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是...

u-boot的内存分布和全局数据结构

U-boot,除非在RAM中调试,一般情况下都是从flash中执行一段代码,然后将flash中储存的代码和数据搬移到ram中,然后跳转到ram中执行。当然这应该也是一般的bootloader的执行方式...

U-BOOT之五:gd_t和bd_t数据结构简介

      在start_armboot()函数中,gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U_BOOT_CMD 命令数据结构
举报原因:
原因补充:

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