U_BOOT_CMD命令的实现

原创 2011年01月13日 14:50:00

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

先来看UBOOT当中关于U_BOOT_CMD这个宏的定义:

/* 这是定义一个结构的属性,将其放在.u_boot_cmd这个段当中,相当于.data/.bss这些段 */

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


/* 宏定义,用于定义一个命令 */
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage) /
  cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}

这样一来,凡通过U_BOOT_CMD定义的cmd_tbl_t变量会全部被放在.u_boot_cmd段当中(可以看UBOOT的链接脚本xxx.lds),具体怎么放是链接器的工作。

这里要看的是##name和#name这两个操作.##name将字符直接跟在后面, #name会将name这个字符中以“..."的形式放置。

例如:定义一个命令boot

U_BOOT_CMD(boot, 0, 0, fun, "boot xxx");


展开以后会变成:

cmd_tbl_t __u_boot_cmd_boot __attribute___((unused, section(".u_boot_cmd"))) = {"boot", 0, 0, fun, "boot xxx"}

大部分基本不变,将Struct_Section展开了,还将##name换成了boot, 将#name换成了"boot"。应该不难看出##/#的作用吧。

从上面来看,我们是不是可以在程序运行时去定义一个变量呢??我们可以通过##xxx来定义一个变量,然后还可以通过这种形式来使用它。

 

总体来说是通过宏定义来定义变量,准确地说应该是结构体变量。并且把这些同一种结构体的变量放在一个段中,充分的利用了连接器的作用,很少看到,但是确实很实用。这样做的好处是所有开发各个模块的研发人员不必去维护一个全局的结构体数组,而且你也不知道别人用的是数组中的哪一个下表,这种方法就很好的解决了这种烦恼,值得推广。

U_BOOT_CMD 命令实现分析

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

U_BOOT_CMD命令的实现

宏定义,用于定义一个U_BOOT命令 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage) / cmd_tbl_t __u_boot_cmd_##nam...
  • sj723596076
  • sj723596076
  • 2014年02月26日 11:40
  • 458

uboot命令的U_BOOT_CMD

版本uboot2014.1     U_BOOT_CMD是一个宏定义,具体功能是定义一个struct cmd_tbl_s的结构体变量,U_BOOT_CMD宏传递的参数是该结构体变量的成员变量...
  • shengzhadon
  • shengzhadon
  • 2016年10月09日 15:31
  • 3862

UBoot命令解析与执行流程

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

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

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

u-boot——命令执行原理及自定义命令

一、u-boot命令 u-boot命令cmd_name cmd_param1 cmd_param2
  • hpr1992
  • hpr1992
  • 2014年11月11日 16:10
  • 353

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

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

U-boot 添加命令 U_BOOT_CMD

2013-02-01 16:51:49 分类: LINUX U-boot 添加命令 U_BOOT_CMD  U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。...
  • RopenYuan
  • RopenYuan
  • 2013年10月18日 20:16
  • 745

U_BOOT_CMD命令解析

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

U-boot 添加命令 U_BOOT_CMD(修正版本)以全志a33平台为例子

http://www.xuebuyuan.com/2197753.html http://blog.chinaunix.net/uid-20665047-id-3485444.html U-boo...
  • wb4916
  • wb4916
  • 2015年05月23日 17:57
  • 1742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U_BOOT_CMD命令的实现
举报原因:
原因补充:

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