uboot新增命令

2021-08-22 12:10:57 字數 1490 閱讀 4920

u_boot_cmd是乙個巨集定義,具體功能是定義乙個struct cmd_tbl_s的結構體變數,u_boot_cmd巨集傳遞的引數是該結構體變數的成員變數。通過u_boot_cmd定義的變數會通過指令碼鏈結到uboot指定的乙個section中,然後可以通過find_cmd遍歷這個section找到這個cmd,可以通過run_command(cmd, flag)函式執行具體命令。

在進行uboot裁剪和移植時我們需要加入我們自己定製的命令那麼如何新增一條命令:

其實新增起來很簡單,主要涉及到的幾個檔案

1 、uboot/common/makefile 新增我們命令的實現檔案 cmd_***.c

obj-$(config_cmd_net) += cmd_***.o

2、uboot/commom/cmd_***.c 具體的實現過程檔案(以新增乙個nfs為例)

#if defined(config_cmd_nfs)

static int do_nfs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv)

return netboot_common(nfs, cmdtp, argc, argv);

u_boot_cmd(

nfs, 3, 0, do_nfs,

"boot image via network using nfs protocol",

"[loadaddress] [[hostipaddr:]bootfilename]"

#endif

接下來如何新增一條命令:

修改5個地方:(以新增exit命令為例)

/include/config_cmd_all.h    新增config_cmd_exit巨集

/include/config_cmd_default.h  同上

/include/configs/smdk2410.h  新增巨集   (以上標頭檔案的修改,都是為了條件編譯做準備的)

/common/cmd_exit.c    具體實現命令的函式   (命令的實現與命令的註冊都在這兒)

/common/makefile          把自己寫的實現命令檔案新增到makefile

1)實現命令的具體功能,在comman資料夾中建立對應的cmd_exit.c檔案。

2)如果要新增指令,首先為了能讓系統找到該指令,所以要在命令表中註冊一下。

④led命令執行過程:

在串列埠終端輸入"led"命令時,串列埠接收到資料,並傳遞給run_command()函式,run_command()函式呼叫common/command.c中實現的find_cmd()函式在u_boot_list段內查詢命令,並返回cmd_tbl_t結構。然後run_command()函式使用返回的cmd_tbl_t結構中的函式指標呼叫do_led(),從而完成命令的執行。

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 新增命令 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 ...