U-Boot的每一個命令都是通過U_Boot_CMD宏定義的。這個宏在<include/command.h>頭文件中定義
|
每一個命令定義一個cmd_tbl_t結構體,而cmd_tbl_t只不過是cmd_tbl_s的一個typedef,如下所示:
|
而cmd_tbl_s的定義則在同一文件<command.h>下,如下所示:
|
這樣每一個U-Boot命令有一個結構體來描述。結構體包含的成員變量:命令名稱、最大參數個數、重複數、命令執行函數、用法、幫助。
從控制檯輸入的命令是由common/command.c中的程序解釋執行的。find_cmd()負責匹配輸入的命令,從列表中找出對應的命令結構體並返回指向這一結構體的指針。
基於U-Boot命令的基本框架,來分析一下簡單的ping操作命令,就可以知道添加新命令的方法。
(1)定義PING命令
在<config_cmd_all.h>與<config_cmd_default.h>中定義了所有UBOOT支持的命令的標誌位
|
(2)定義PING命令的操作函數。下面是ping命令的具體實現,在<common/cmd_net.c>中。
|
U-Boot的命令都是通過結構體__u_boot_cmd_##name來描述的。根據U_Boot_CMD在<include/command.h>中的兩行定義可以明白。
|
按照這2步就可以添加U-BOOT命令了。