U boot 新增命令 U BOOT CMD

2021-06-20 13:45:08 字數 2065 閱讀 1910

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 ...