U-boot分析与移植(4)----U-boot 添加命令

原创 2012年03月27日 19:34:09

 我们初步了解U-Boot执行流程后,知道

U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。
# /*命令宏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, help} 

每一个命令宏U_BOOT_CMD用cmd_tbl_t结构体描述一个命令

   1. struct cmd_tbl_s {  
   2.     char        *name;      /* Command Name         */  
   3.     int     maxargs;    /* maximum number of arguments  */  
   4.     int     repeatable; /* autorepeat allowed?      */  
   5.                     /* Implementation function  */  
   6.     int     (*cmd)(struct cmd_tbl_s *, int, int, char *[]);  
   7.     char        *usage;     /* Usage message    (short) */  
   8. #ifdef  CFG_LONGHELP  
   9.     char        *help;      /* Help  message    (long)  */  
  10. #endif  
  11. #ifdef CONFIG_AUTO_COMPLETE  
  12.     /* do auto completion on the arguments */  
  13.     int     (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);  
  14. #endif  
  15. };  

参数意义是:

name 这是命令名字,不需要用双引号括起来
maxargs 最大参数的个数
rep 命令是否可重复,就是下一次按回车时再执行
cmd 对应的函数指针
usage 字符串表示的简短说明
help 字符串表示的详细说明

在源代码里可发现命令都是在cmd_xxx.c里实现的

现在我们添加一个简单的测试命令

1、在common目录下添加一个hello.c文件

   1. #include <common.h>  
   2. #include <command.h>  
   3.   
   4. #ifdef CONFIG_CMD_HELLO   
   5. int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  
   6. {  
   7.     int i;  
   8.     printf("argc = %d\n",argc);  
   9.     for(i = 0; i < argc; i++)  
  10.         printf("i = %d, %s\n",i,argv[i]);  
  11.     return 0;  
  12. }  
  13. U_BOOT_CMD(hello,CONFIG_SYS_MAXARGS,0,do_h  

do_xxx函数必须定义成这样形式:

  1. cmd_tbl_s 结构体里的成员  int (*cmd)(struct cmd_tbl_s *, intintchar *[]);  

int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

 

在填参数个数时要注意,CONFIG_SYS_MAXARGS是在include/configs/smdk2140.h里定义的,默认16

2、在common/Makefile中的#command添加如下内容:
         COBJS-$(CONFIG_CMD_TEST) += cmd_hello.o
3、在include/configs/smdk2410.h(该文件名根据实际操作,要针对自己的平台文件改,如smdk2410.h等)添加如下内容:
         在#include <config_cmd_default.h>后添加:
              #define CONFIG_CMD_HELLO
        或者在include/config_cmd_default.h文件中,添加该命令的宏定义。 
4、编译后下到板上
   1. U-Boot 2009.11 (12鏈?14 2011 - 00:44:00)  
   2.   
   3.   
   4. DRAM:  64 MB  
   5.   
   6. Flash: 512 kB  
   7.   
   8. NAND:  NAND_ECC_NONE selected by board driver. This is not recommended !!  
   9.   
  10. 64 MiB  
  11.   
  12. In:    serial  
  13.   
  14. Out:   serial  
  15.   
  16. Err:   serial  
  17.   
  18. Net:   dm9000  
  19.   
  20. Hit any key to stop autoboot:  0   
  21.   
  22. BAI2011/12/13 # hello  
  23.   
  24. argc = 1  
  25.   
  26. i = 0, hello  
  27.   
  28. BAI2011/12/13 # hello this is my test!  
  29.   
  30. argc = 5  
  31.   
  32. i = 0, hello  
  33.   
  34. i = 1, this  
  35.   
  36. i = 2, is  
  37.   
  38. i = 3, my  
  39.   
  40. i = 4, test!  
  41.   
  42. BAI2011/12/13 #   



U-BOOT-2016.07移植 (第二篇) 添加单板

U-BOOT-201607移植 第二篇 添加单板 1. 在board中创建单板目录 2. 创建单板相关头文件 3. 创建defconfig文件 4. 修改arch/arm/Kconfig文件 5. 尝...
  • funkunho
  • funkunho
  • 2016年09月08日 01:46
  • 2260

u-boot分析 七 (添加u-boot命令,学习u-boot命令实现原理)

u-boot分析 七(添加u-boot命令,学习u-boot命令实现原理)本文目标:理解u-boot命令的实现原理。上一篇文章分析了u-boot是如何启动kernel的,其中就涉及到bootm命令,考...
  • itxiebo
  • itxiebo
  • 2016年03月27日 12:13
  • 3500

U-boot分析与移植(4)-U-boot 添加命令

本文来源:http://blog.csdn.net/jianchi88/article/details/7069292 我们初步了解U-Boot执行流程后,知道 U-Boot的每一个命令都是通过U...
  • dddd0216
  • dddd0216
  • 2016年04月13日 11:07
  • 134

U-boot分析与移植(4)----U-boot 添加命令

我们初步了解U-Boot执行流程后,知道 U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结...
  • wuchengsai110
  • wuchengsai110
  • 2014年03月05日 23:36
  • 317

u-boot-2016.09移植(2)-uboot启动简易分析

不管什么版本的uboot都是在arch/arm/cpu/u-boot-spl.lds和arch/arm/cpu/u-boot.lds中制定了入口函数ENTRY(_start),u-boot-2016....
  • keyue123
  • keyue123
  • 2016年11月06日 19:09
  • 849

uboot 2012.10移植到at91sam9260ek草稿之一

准备: 之前一直用的uboot是1.3的,由于去年的换工作,在新的岗位上,好多产口的uboot 已经不用1.3这样的老版本了,本着总结与学习的态度,我想把2012.10再移植一次,移植到at91sam...
  • jackyard
  • jackyard
  • 2014年02月19日 22:34
  • 1299

u-boot-2016.01移植笔记之先让u-boot可以编译成功以及添加2440单板

先下载最新u-boot,目前最新的是u-boot-2016.01 一、           先让u-boot下载到2440上有输出 先把u-boot放到虚拟机上编译,在编译之前要先配置处理器的型号 m...
  • a1043503402
  • a1043503402
  • 2016年02月08日 22:31
  • 2407

U-BOOT 移植过程详解:添加一块新板子的支持

U-BOOT移植过程详解: 添加一块新板子的支持                      分类:             U-BOOT移植              2014-01-17...
  • linuxarmsummary
  • linuxarmsummary
  • 2015年04月02日 19:36
  • 4463

U-BOOT移植过程详解: 附录

申明   本着学习交流的原则, 将个人移植u-boot的过程做一个记录. 文章参考了csdn blog里面的很多内容, 有的已经记不得出处了, 只好把当时的摘要直接贴出来. 如果冒犯, 还请见谅. 如...
  • liuxin_john
  • liuxin_john
  • 2014年01月28日 15:43
  • 1710

u-boot-2016.05移植:(5)、支持DM9000网卡

1、在u-boot-2016.05\include\configs\smdk2440.h中修改/* * Hardware drivers */ #define CONFIG_CS8900 ...
  • sinat_24088685
  • sinat_24088685
  • 2016年08月22日 14:25
  • 837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U-boot分析与移植(4)----U-boot 添加命令
举报原因:
原因补充:

(最多只允许输入30个字)