uboot 加命令

来源:互联网 发布:蜂窝移动数据apn设置 编辑:程序博客网 时间:2024/06/05 13:26
 1include/configs/smdk2410.h


2include/cmd_confdefs.h

3common\下面加入xxxxx.c

加入U_BOOT_CMD ,U_BOOT_CMD宏将传递给它的参数封装成一个cmd_tbl_t结构体common/<commond.h>

4common/Makefile

在U-boot中添加加命令[转]

最近想再U-boot中加一个USB下载文件的命令,就研究啦一下U-Boot中的命令工作原理!

并且在VC里面建了一个工程,对里面的一些和硬件不相关的程序做了测试,下面写出来,也许对大家有用!

原理:

每个命令都有一个命令结构体

struct cmd_tbl_s {

char*name;

intmaxargs;

intrepeatable;

int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);

char*usage;

char*help;

};

去定义它。Cmd为要调用的命令函数!name为该命令名字符串。

在u-boot里面有这样的宏

#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, help}

宏U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)就是将

cmd_tbl_s{

name,

maxargs,

rep,

cmd,

usage,

help

} 这样的一个命令结构体放入内存.u_boot_cmd这个区域,.u_boot_cmd这个域在board/smdk2410/u-boot.lds中定义!在U-boot中的shell中,根据用户输入的命令,就会在.u_boot_cmd这个内存区域中查找,当.u_boot_cmd中某一个 cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令

结构体的cmd_tbl_s.cmd( ….)函数!

怎样添加命令函参数!

下面以添加USB下载命令为例!

a

在include/configs/smdk2410.h中的CONFIG_COMMDNDS中增加一项:

CFG_CMD_USBLOAD,



#define CONFIG_COMMANDS \

(CONFIG_CMD_DFL | \

CFG_CMD_CACHE | \

CFG_CMD_NET | \

CFG_CMD_ENV | \

CFG_CMD_FLASH | \

CFG_CMD_PING | \

CFG_CMD_NAND | \

\

\

\

CFG_CMD_REGINFO | \

CFG_CMD_DATE | \

CFG_CMD_USBLOAD |\

CFG_CMD_ELF)

b

在include/cmd_confdefs.h中加入命令标志位

#define CFG_CMD_USBLOAD0x00000055ULL (可以是其它值,不冲突就好)

c

在common\下面加入usbload.c

框架如下

#If(CONFIG_COMMANDS & CFG_CMD_USBLOAD)

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

{

………………….

}

U_BOOT_CMD{

Usbload,

2,

1,

usb_load,

“usb load img file”,

“This is a test”

};

#endif d

在common/Makefile 添加要编译的目标文件

e

重新编译u-boot,就OK啦!



新手看招 了解UBOOT添加命令的执行流程
原创粉丝点击