Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令

转载自http://blog.csdn.net/zqixiao_09/article/details/50805936

Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。

UBoot版本:u-boot-2013.01 


一、U-Boot命令的格式

  即使是内核的启动,也是通过U-Boot命令来实现的。U-Boot中每个命令都是通过 U_BOOT_CMD 宏来定义的,格式如下:

 U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")

各项参数的意义如下:

1) -- name:命令的名字,注意,它不是一个字符串(不要用双引号括起来);

2)-- maxargs:最大的参数个数;

3)-- repeatable:命令是否可以重复,可重复是指运行一个命令后,下次敲回车即可再次运行;

4)-- command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s *, int, int, char *[]);

5) -- usage:简单的使用说明,这是个字符串;

6)-- help:较详细的使用说明,这是个字符串。


宏U_BOOT_CMD 在include/command.h中定义,如下所示



U_BOOT_CMD 是用一个struct cmd_tbl_s 结构体定义,这个结构体仍是在include/command.h中实现:



      可以看出,对于每个使用U_BOOT_CMD 宏来定义的命令,就是宏 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)将struct cmd_tbl_s这样的一个命令结构体放到U-BOOT连接脚本 board/xxx/u-boot.lds中定义的".u-boot_cmd"段所在的内存区域,即在".u_boot_list.cmd"段中定义一个 cmd_tbl_t 结构。

连接脚本U-Boot.lds中有如下代码:


  当用户在u-boot的shell中输入命令时,就会在".u_boot_list.cmd"这个内存区域中查找( _u_boot_list_cmd__start - _u_boot_list_cmd__end),当该区域中某一个cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令结构体的cmd_tbl_s.cmd()函数


二、添加自定义命令

自定义命令设为"myubootcmd",不可与u-boot命令重名,

1、添加命令行配置信息

 在u-boot-2013.01/include/configs/fs4412.h(由具体开发板来配置,这里使用fs4412)中添加 #define CONFIG_CMD_MYUBOOT,如下:



2、编写命令行对应的源程序

  u-boot-2013.01/common/目录下,建立相应的命令执行文件cmd_hello.c 

  注意命名的规范,必须是cmd_xxx.c才行里面的内容也是有格式要求的,如函数的格式,必须指定参数的;还有相应结尾部分的U_BOOT_CMD定义部分,使不能缺省的。如果命令不需要跟参数,则把maxargs设置为1即可了。内容如下所示:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <common.h>  
  2. #include <command.h>  
  3.   
  4. #ifdef CONFIG_CMD_HELLO  
  5.   
  6. void helloword (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])   
  7. {    
  8.     printf("hello world by xiaoqiang! \n");  
  9. }  
  10.   
  11. U_BOOT_CMD(hello,1,2,helloword,  
  12.                    "hello command","xiaoqing add hello command!\n");  
  13.   
  14. #endif  


3、修改Makefile

  在common/Makefile中增加一项.



4、编译



5、测试


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值