開篇
為什么會有這篇文章,因為小生被u-boot源碼的設計所吸引了(源碼對命令的處理過程)。自定義u-boot命令屬于u-boot源碼的開發技術啦,可能u-boot官方開發人員、芯片原廠或者硬件板卡BSP開發人員會接觸到這一塊。
既然被我碰著了,那就皺眉一笑輕提筆,在此一文奉上。
對于u-boot來說,其核心功能是使用命令來執行對應的操作。在u-boot源碼/cmd目錄下則放置了關于u-boot所支持的所有命令,如下圖所示:
(.o文件是編譯后生成的)
一、基礎
(1-1)命令定義
在實際開發中,我們可以創建新的命令結構,然后將命令添加到U-Boot中。步驟大致如下:首先在命令描述文件中包含command.h,然后再使用U_BOOT_CMD()
或U_BOOT_CMD_COMPLETE
宏來填充struct cmd_tbl
結構:
U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")
U_BOOT_CMD_COMPLETE(name,maxargs,repeatable,command,"usage,"help",comp)
- name:命令名稱。注意:這不是一個字符串。
- maxargs:此函數接受的最大參數值,包括命令本身。
- repeatable:0 - 不允許自動重復;1 - 允許自動重復。
- command:指向命令函數的指針。這是在u-boot命令行下發出命令時調用的函數。
- usage:用于描述命令的提示信息。是一個字符串。
- help:長描述。這是一個字符串。只有定義了CONFIG_SYS_LONGHELP時,長描述才可用。
- comp:指向補全函數的指針。可能是NULL。如果在輸入命令參數以完成輸入時按下TAB鍵,則調用此函數。命令補全僅在定義了CONFIG_AUTO_COMPLETE時可用。
(1-2)命令函數
命令函數指針聲明如下:
int(*cmd)(structcmd_tbl*cmdtp,intflag,intargc,constchar*argv[]);
- cmdtp:描述該命令的表條目。
- flag:可以包含以下幾種選項:CMD_FLAG_REPEAT - 重復執行最后一條命令;CMD_FLAG_BOOTD - 該命令由bootd命令調用;CMD_FLAG_ENV - 該命令由run命令調用。
- argc:包括命令在內的參數的數目。
- argv:參數。允許的返回值為:CMD_RET_SUCCESS - 標志命令執行成功;CMD_RET_FAILURE - 命令執行失?。籆MD_RET_USAGE - 使用無效參數調用命令。這個值將顯示用法字符串。
二、創建自定義的u-boot命令
在第一小節中,已經描述了關于u-boot命令的基礎知識,本小節將來實現一個具體的u-boot命令。
這里假設這個命令命名為:showIriczhaoInfo
。當我們在u-boot的命令行下輸入這個命令后,將打印出“[iriczhao]:u-boot hello world!!!”。
(2-1)命令創建過程
(1)在u-boot的/cmd目錄下創建一個文件,命名為command_test.c。
(2)添加頭文件。在command_test.c文件中添加如下的頭文件信息:
#include
#include
(3)定義showIriczhaoInfo的命令處理函數
staticintdo_showIriczhaoInfo(structcmd_tbl*cmdtp,intflag,intargc,char*constargv[])
{
printf("[iriczha]:u-boothelloworld!!!");
return0;
}
(4)使用U_BOOT_CMD關聯命令和命令處理函數
U_BOOT_CMD(showIriczhaoInfo,CONFIG_SYS_MAXARGS,0,do_showIriczhaoInfo,"do_showIriczhaoInfo","command
");
(5)將command_test.c文件添加到makefile文件中,如下圖所示:
(6)以Snadbox方式編譯u-boot源碼(注:也可以編譯其他架構下的u-boot)
(7)在宿主機終端中運行u-boot snadbox,效果如下:
從上圖可見,當我們在u-boot的命令行上輸入showIriczhaoInfo后,按下回車鍵,輸出了[iriczhao]:u-boot hello world!!!信息,結果與預期效果一樣。
三、總結
在u-boot的命令描述文件中,是按照模塊來進行文件劃分的。例如對于ext4文件系統的命令操作就會放到ext4.c
文件中,在該文件中放置操作ext4的所有命令。在分析u-boot的命令源碼時候,可根據該種思路來尋找具體的命令處理過程。
本文描述了u-boot命令行的定義過程,描述如何實現一個自定義命令并將其添加到u-boot中。
在u-boot源碼中,其命令與命令處理函數的綁定過程是一個非常精彩的技術點,先留著點,下回分析啦!
審核編輯:湯梓紅
-
u-boot
+關注
關注
0文章
121瀏覽量
38228 -
命令
+關注
關注
5文章
684瀏覽量
22027
原文標題:自定義u-boot命令,有意思!
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論