Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117372
  • 博文数量: 17
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-13 16:45
文章分类

全部博文(17)

文章存档

2011年(2)

2010年(15)

我的朋友

分类: 嵌入式

2010-12-03 11:29:43

u-boot命令

/*common/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}

u-boot中,所有的命令都是由U_BOOT_CMD宏定义出来的,例如定义一条命令:

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

##name将字符直接跟在后面,#name会将name这个字符中以“..."的形式放置。

展开后变成:

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

通过U_BOOT_CMD定义的cmd_tbl_t变量都放在.u_boot_cmd这个段中,具体放在什么地方由链接脚本指定。

/*cpu/arm920t/u-boot.lds*/

__u_boot_cmd_start = .;

.u_boot_cmd : { *(.u_boot_cmd) }

__u_boot_cmd_end = .;

 

u-boot第二阶段中有个死循环调用main_loop()函数,当你输入命令后,main_loop()会调用run_command()函数,run_command()函数它会到这个段中的__u_boot_cmd_start开始处去查找命令,如果找到了(name字段相同)则调用cmd这个函数去执行相应的命令,一般U_BOOT_CMD 添加命令时的cmd都定义成do_xx,所以你执行xx命令就会执行do_xx命令,函数也在cmd_xx.c中定义。

 

阅读(2291) | 评论(0) | 转发(0) |
0

上一篇:RedHat9安装vmware tools

下一篇:IIC总线协议

给主人留下些什么吧!~~