U_BOOT_CMD命令的实现
2012-05-25 08:54
267 查看
在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来定义一个变量,然后还可以通过这种形式来使用它。
总体来说是通过宏定义来定义变量,准确地说应该是结构体变量。并且把这些同一种结构体的变量放在一个段中,充分的利用了连接器的作用,很少看到,但是确实很实用。这样做的好处是所有开发各个模块的研发人员不必去维护一个全局的结构体数组,而且你也不知道别人用的是数组中的哪一个下表,这种方法就很好的解决了这种烦恼,值得推广。
先来看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命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD命令的实现
- U_BOOT_CMD 命令实现分析
- U_BOOT_CMD命令的实现
- u-boot命令-cmd编译过程
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码 .
- 用面向对象实现支付功能、用线程实现龟兔赛跑、Java调用CMD运行adb命令并保存结果及归档
- #写一个脚本实现如下功能: 输入一个数字,然后运行对应的>一个命令。显示命令如下:*cmd meau** 1—date 2–ls 3–who 4–pwd #当输入1时,会运行date, 输入2
- cmd环境下实现:为命令设置别名、启动cmd时自动执行bat
- U_BOOT_CMD 命令数据结构
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码
- ASP.Net执行cmd命令的实现代码
- U-boot 添加命令 U_BOOT_CMD
- u-boot分析 七 (添加u-boot命令,学习u-boot命令实现原理)
- u-boot分析之u-boot命令实现
- U_BOOT_CMD 命令数据结构
- 在U-Boot中添加自定义命令以实现自动下载程序【转】
- 小技巧:在右键菜单中添加命令,实现在cmd中运行程序