u-boot——命令执行原理及自定义命令

一、u-boot命令执行原理


u-boot命令在common目录中,格式cmd_name   cmd_param1   cmd_param2
1、每一个u-boot命令所对应的源代码在编译后都分布在DDR2的.text段中。
2、每一个u-boot命令都对应一个结构体,结构体的第一个成员是命令的名称,另外还有一个成员是函数指针,指向命令的代码块。
这些结构体在编译链接的时候放在DDR2的自定义的.u_boot_cmd
段中。

二、调用u-boot命令

调用接口:run_command( )

三、自定义命令:

1、先做好命令的代码块,可以在common目录中创建一个新文件cmd_xxx.c
int do_xxx (cmd_tbl_t *cmdtp,  int flag,  int argc,  char *argv[ ])
{
……
……
}


2、调用宏U_BOOT_CMD,它的原型(宏在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}

(1)有6个参数。

(2)cmd_tbl_t  :结构体类型

typedef struct cmd_tbl_s	cmd_tbl_t;
struct cmd_tbl_s {
	char		*name;		/* Command Name			*/
	int		maxargs;	/* maximum number of arguments	*/
	int		repeatable;	/* autorepeat allowed?		*/
	int		(*cmd)(struct cmd_tbl_s *, int, int, char *[]);
	char		*usage;		/* Usage message	(short)	*/
#ifdef	CFG_LONGHELP
	char		*help;		/* Help  message	(long)	*/
#endif
#ifdef CONFIG_AUTO_COMPLETE
	int		(*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};

(3)__u_boot_cmd_##name  :结构体变量名
如:__u_boot_cmd_##go

(4)Struct_Section  :  

#define Struct_Section  __attribute__ ((unused,section (".u_boot_cmd")))

__attribute__  :  告诉编译器,将某个变量编译到某个段中,此处是将结构体变量 __u_boot_cmd_##name,链接到.u_boot_cmd段。


总结:宏 U_BOOT_CMD的作用定义一个结构体变量,并且用宏所带的参数给这个结构体变量初始化。

3、修改当前目录的Makefile文件和include/configs/smdkv210single.h文件
上面的自定义命令代码块do_xxx和宏U_BOOT_CMD都是在cmd_xxx.c文件中。
Makefile文件:添加cmd_xxx.o
include/configs/smdkv210single.h文件:添加cmd_xxx.o文件是否编译的宏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值