UBOOT uboot命令新增過程

2021-06-16 18:08:49 字數 2350 閱讀 8700

uboot命令新增過程

u-boot的命令為使用者提供了互動功能,並且已經實現了幾十個常用的命令。如果開發板需要很特殊的操作,可以新增新的u-boot命令。

u-boot的每乙個命令都是通過u_boot_cmd巨集定義的。這個巨集在標頭檔案中定義

#

ifdef cfg_longhelp

#

define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_#

#name struct_section =

#

else

#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_#

#name struct_section =

#endif

每乙個命令定義乙個cmd_tbl_t結構體,而cmd_tbl_t只不過是cmd_tbl_s的乙個typedef,如下所示:

typedef

struct cmd_tbl_s cmd_tbl_t;

而cmd_tbl_s的定義則在同一檔案下,如下所示:

struct cmd_tbl_s

;

這樣每乙個u-boot命令有乙個結構體來描述。結構體包含的成員變數:命令名稱、最大引數個數、重複數、命令執行函式、用法、幫助。

從控制台輸入的命令是由common/command.c中的程式解釋執行的。find_cmd()負責匹配輸入的命令,從列表中找出對應的命令結構體並返回指向這一結構體的指標。

基於u-boot命令的基本框架,來分析一下簡單的ping操作命令,就可以知道新增新命令的方法。

(1)定義ping命令

在與中定義了所有uboot支援的命令的標誌位

#

define config_cmd_ping

其中,中定義的命令是由板子預設支援的,這是由於在板子的配置檔案中包含進了該標頭檔案,如果讓板子支援中沒有而中命令,還必須在板子的配置檔案中進行相關的定義,如我的並沒有進行ping的相關定義,我要想板子支援ping,我只需要在我的板子配置檔案中加入上面那句就可。也可以直接把定義語句寫在中。

(2)定義ping命令的操作函式。下面是ping命令的具體實現,在中。

#

if defined(config_cmd_ping)

int do_ping (cmd_tbl_t *cmdtp,

int flag,

int argc,

char

*argv)

if(netloop(ping)

< 0)

printf

("host %s is alive\n"

, argv[1]);

return 0;

}u_boot_cmd(

//通過巨集定義命令

ping,

2,1,

do_ping,

// 命令為ping,對應的執行函式為do_ping

"ping\t- send icmp echo_request to network host\n"

,"pingaddress\n");

#endif

u-boot的命令都是通過結構體__u_boot_cmd_##name來描述的。根據u_boot_cmd在中的兩行定義可以明白。

#

define struct_section __attribute__ (

(unused,section (

".u_boot_cmd"))

)#ifdef cfg_longhelp

#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_#

#name struct_section =

#else

#define u_boot_cmd(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_#

#name struct_section =

#endif

按照這2步就可以新增u-boot命令了。

給列表介面新增過濾條件

override protected filterinfo getdefaultfilterforquery override protected iqueryexecutor getqueryexecutor imetadatapk arg0,entityviewinfo arg1 object ...

JS 為陣列新增 過濾 方法

為array陣列新增過濾器方法 filter 使用方法很簡單,index為陣列的成員指標,ele為數組成員 array.prototype.filter function fn return array 呼叫 filter 傳入 數字型別,並為過濾器傳入過濾方法 var arr 10,20,30 v...

IntelliJ IDEA新增過濾檔案或目錄

在idea上使用svn後,發現即使svn視窗新增過濾正則沒有忽略.iml檔案的提交,安裝ignore外掛程式後沒發現有svn的忽略選項,最後發現這樣設定就可以了 1 settings editor file types 2 在下方的忽略檔案和目錄 ignore files and folders 中...