Uboot源码阅读笔记 3


 
 
Uboot中的每一个命令都由一个宏进行声明,这宏在文件include/command.h中定义
 
#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}
 
如i2c设备操作中的某个命令的声明如下
U_BOOT_CMD(
       imd, 4,    1,    do_i2c_md,           /
       "imd     - i2c memory display/n",                           /
       "chip address[.0, .1, .2] [# of objects]/n    - i2c memory display/n" /
);
这个声明里初始化了cmd_tbl_t结构
 
struct cmd_tbl_s {
       char        *name;           /* Command Name               */
       int           maxargs; /* maximum number of arguments       */
       int           repeatable;      /* autorepeat allowed?           */
                                   /* Implementation function    */
       int           (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
       char        *usage;          /* Usage message   (short)    */
#ifdef      CFG_LONGHELP
       char        *help;             /* Help  message   (long)      */
#endif
};
上面的声明分别初始化命令名(imd)、最大参数个数(4)、是否允许自动重复(1允许,即第一次没执行成功时会自动重复执行)、实现函数(do_i2c_md)、用法("imd     - i2c memory display/n")和帮助("chip address[.0, .1, .2] [# of objects]/n    - i2c memory display/n" /)。
 
当执行imd命令时,系统会调用 common/command.c中的find_cmd函数,查找相应的实现函数do_i2c_md。查找时在由__u_boot_cmd_start开始到__u_boot_cmd_end结束的范围内查找。这两个符号的地址在链接脚本board/s3c2410/uboot.lds中确定
 
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
       . = 0x00000000;
 
       . = ALIGN(4);
       .text      :
       {
         cpu/arm920t/start.o    (.text)
         *(.text)
       }
 
       . = ALIGN(4);
       .rodata : { *(.rodata) }
 
       . = ALIGN(4);
       .data : { *(.data) }
 
       . = ALIGN(4);
       .got : { *(.got) }
 
       __u_boot_cmd_start = .;
       .u_boot_cmd : { *(.u_boot_cmd) }
       __u_boot_cmd_end = .;
 
       . = ALIGN(4);
       __bss_start = .;
       .bss : { *(.bss) }
       _end = .;
}
在这里,将所有的命令链接到bss段前面的一段内存中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值