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 =
每乙個命令巨集u_boot_cmd用cmd_tbl_t結構體描述乙個命令
struct
cmd_tbl_s ;
引數意義是:
name
這是命令名字,不需要用雙引號括起來
maxargs
最大引數的個數
rep命令是否可重複,就是下一次按回車時再執行
cmd對應的函式指標
usage
字串表示的簡短說明
help
字串表示的詳細說明
在源**裡可發現命令都是在cmd_***.c裡實現的
現在我們新增乙個簡單的測試命令
1、在common目錄下新增乙個hello.c檔案
#include
#include
#ifdef config_cmd_hello
intdo_hello(cmd_tbl_t *cmdtp,
intflag,
intargc,
char
*argv)
u_boot_cmd(hello,config_sys_maxargs,0,do_h
do_***函式必須定義成這樣形式:
cmd_tbl_s 結構體裡的成員
int(*cmd)(
struct
cmd_tbl_s *,
int,
int,
char
*);
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 後新增:
#define
config_cmd_hello
或者在 include/config_cmd_default.h檔案中,新增該命令的巨集定義。
4、編譯後下到板上
u-boot 2009.11 (12鏈?14 2011 - 00:44:00)
dram: 64 mb
flash: 512 kb
nand: nand_ecc_none selected by board driver. this is not recommended !!
64 mib
in: serial
out: serial
err: serial
net: dm9000
hit any key to stop autoboot: 0
bai2011/12/13 # hello
argc = 1
i = 0, hello
bai2011/12/13 # hello this
is my test!
argc = 5
i = 0, hello
i = 1, this
i = 2, is
i = 3, my
i = 4, test!
bai2011/12/13 #
uboot新增命令
u boot cmd是乙個巨集定義,具體功能是定義乙個struct cmd tbl s的結構體變數,u boot cmd巨集傳遞的引數是該結構體變數的成員變數。通過u boot cmd定義的變數會通過指令碼鏈結到uboot指定的乙個section中,然後可以通過find cmd遍歷這個section...
U boot 新增命令 U BOOT CMD
u boot的每乙個命令都是通過u boot cmd巨集定義的。這個巨集在include command.h標頭檔案中定義,每乙個命令定義乙個cmd tbl t結構體。命令巨集u boot cmd define u boot cmd name,maxargs,rep,cmd,usage,help c...
u boot中新增命令
看下ping命令實現的例子 檔案common cmd net.c static int do ping cmd tbl t cmdtp,int flag,int argc,char const argv printf host s is alive n argv 1 return 0 u boot ...