由U_BOOT_CMD命令想到的
来源:互联网 发布:html5网址导航源码 编辑:程序博客网 时间:2024/05/16 12:44
在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命令想到的
- 由U_BOOT_CMD命令想到的
- 由tr命令想到的
- 由free命令想到的
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- uboot命令的U_BOOT_CMD
- 由本子想到的
- 由忧郁想到的
- 由电车男想到的
- 由MBV想到的
- 由“枣子”想到的
- 由 setMeidatime() 想到的
- iframe 父窗口和子窗口相互的调用方法集锦
- Configuring QoS
- 第19章 二进制IO
- 云梯的多NameNode和跨机房之路
- 深入剖析阿里巴巴云梯YARN集群
- 由U_BOOT_CMD命令想到的
- struts2中 # % $ 的区别和用法
- MySQL索引背后的数据结构及算法原理
- PL/SQL(六):函数
- QT4移植
- Writing the Debugger's Main Loop
- libiphlpapi.o: No such file or directory
- Linux常用命令大全 Linux Commands Line - v1.0
- 程序员自学/自我培训指南