首页 U_BOOT_CMD分析

U_BOOT_CMD分析

举报
开通vip

U_BOOT_CMD分析 u-bootu-bootu-bootu-boot 命令处理机制 以前在 u-boot中添加自定命令时,非常惊讶在 u-boot中添加自定义命令是如 此的简单。只需要使用 u-boot提供的一个宏定义,就可以将自己写好的命令添 加到 u-boot中。对于一些高级语言,比如说 java可能通过反射的机制很容易实 现。但是对于 C这种语言,要达到如此高的灵活度,实在是无法想象。由于当 时比较忙,对于细节也没有深入研究。趁如今比较闲,深入了解一下。 如何在 u-bootu-bootu-bootu-boot中添加命令 ...

U_BOOT_CMD分析
u-bootu-bootu-bootu-boot 命令处理机制 以前在 u-boot中添加自定命令时,非常惊讶在 u-boot中添加自定义命令是如 此的简单。只需要使用 u-boot提供的一个宏定义,就可以将自己写好的命令添 加到 u-boot中。对于一些高级语言,比如说 java可能通过反射的机制很容易实 现。但是对于 C这种语言,要达到如此高的灵活度,实在是无法想象。由于当 时比较忙,对于细节也没有深入研究。趁如今比较闲,深入了解一下。 如何在 u-bootu-bootu-bootu-boot中添加命令 在 u-boot的 common下,建立自己的命令文件,如 cmd_test.c。 只需要将自己定义的要实现的功能 int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])用改格式封装好(至于问什么要如此封装,与 cmd_tbl_t的结构有关),并使用定义 U_BOOT_CMD宏将 do_test方 法封装一下就好了。当然还需要修改 common下的Makefile文件,将 cmd_test.c加入编译方可。 实现 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 先看一下 U_BOOT_CMD的定义,在 common.h中。U_BOOT_CMD #include #include int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { printf("just a test \n"); return 0; } U_BOOT_CMD( dfu, 1 , 1, do_test, "enter the dfu mode.", "\n enter the dfu mode . " ); 的定义如下: 其中 Struct_Secion的定义如下: 由此可见,被 U_BOOT_CMD定义过的结构体,最终回被放到一个 u_boot_cmd段中。可以通过 readef工具进行验证,会发现在生成的 目标文件中,确实多了一个.u_boot_mcd段。 再看一下 u-boot的链接脚本,其中有这么一段: 可以发现该脚本将所有的.u_boot_cmd放在了一起。而起还定义了两 个常量__u_boot_cmd_start和__u_boot_cmd_end还表示所有命令的起 始位置和结束位置。最后只需对该段进行遍历就可以得到所有的命令 了。最后生成的 u-boot可执行文件中会包含如下的一段: #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} #define Struct_Section __attribute__ ((unused,section (".u_boot_cmd"))) .u_boot_cmd : { __u_boot_cmd_start = .; *(.u_boot_cmd) __u_boot_cmd_end = .; } uboot_end_data = .; .text . . .其 他 段 .U_BO O T_C M D _ _ U_BO O T_C M D _START _ _ U_BO O T_C M D _START . . . 获取所有 U_BOOT_CMD的命令如下: cmd_tbl_t *find_cmd (const char *cmd) { int len = &__u_boot_cmd_end - &__u_boot_cmd_start; return find_cmd_tbl(cmd, &__u_boot_cmd_start, len); } cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len) { cmd_tbl_t *cmdtp_temp = table; /*Init value */ for (cmdtp = table; cmdtp != table + table_len; cmdtp++) { …. } } 如何在u-boot中添加命令 实现分析
本文档为【U_BOOT_CMD分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_481046
暂无简介~
格式:pdf
大小:89KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2011-08-04
浏览量:52