BusyBox 中新增新命令

2021-08-04 05:43:35 字數 2571 閱讀 2504

向 busybox 新增乙個新命令非常簡單,這是因為它具有良好定義的體系結構。第乙個步驟是為新命令的源**選擇乙個位置。我們要根據命令的型別(網路,shell 等)來選擇位置,並與其他命令保持一致。這一點非常重要,因為這個新命令最終會在 menuconfig 的配置選單中出現(在下面的例子中,是 miscellaneous utilities 選單)。

對於這個例子來說,我將這個新命令稱為 newcmd,並將它放到了 ./miscutils 目錄中。這個新命令的源**如清單 13 所示。

清單 13. 整合到 busybox 中的新命令的源**

#include "busybox.h"

int newcmd_main( int argc, char *argv )

return 0;

}接下來,我們要將這個新命令的源**新增到所選子目錄中的 makefile.in 中。在本例中,我更新了 ./miscutils/makefile.in 檔案。請按照字母順序來新增新命令,以便維持與現有命令的一致性:

清單 14. 將命令新增到 makefile.in 中

miscutils-$(config_mt)          += mt.o

miscutils-$(config_newcmd)   += newcmd.o

miscutils-$(config_runlevel)    += runlevel.o

接下來再次更新 ./miscutils 目錄中的配置檔案,以便讓新命令在配置過程中是可見的。這個檔名為 config.in,新命令是按照字母順序新增的:

清單 15. 將命令新增到 config.in 中

config config_newcmd

bool "newcmd"

default n

help

newcmd is a new test command.

這個結構定義了乙個新配置項(通過 config 關鍵字)以及乙個配置選項(config_newcmd)。新命令可以啟用,也可以禁用,因此我們對配置的選單屬性使用了 bool (boolean)值。這個命令預設是禁用的(n 表示 no),我們可以最後放上乙個簡短的 help 描述。在源**樹的 ./scripts/config/kconfig-language.txt 檔案中,我們可以看到配置語法的完整文法。

這定義了命令名(newcmd),它在 busybox 源**中的函式名(newcmd_main),應該在**會為這個新命令建立鏈結(在這種情況中,它在 /usr/bin 目錄中),最後這個命令是否有權設定使用者 id(在本例中是 no)。

倒數第二個步驟是向 ./include/usage.h 檔案中新增詳細的幫助資訊。正如您可以從這個檔案的例子中看到的一樣,使用資訊可能非常詳細。在本例中,我只新增了一點資訊,這樣就可以編譯這個新命令了:

清單 17. 向 usage.h 新增幫助資訊

#define newcmd_trivial_usage    "none"

#define newcmd_full_usage    "none"

最後乙個步驟是啟用新命令(通過 make menuconfig,然後在 miscellaneous utilities 選單中啟用這個選項)然後使用 make 來編譯 busybox。

使用新的 busybox,我們可以對這個新命令進行測試,如清單 18 所示。

清單 18. 測試新命令

$ ./busybox newcmd arg1

newcmd called:

arg[0] = newcmd

arg[1] = arg1

$ ./busybox newcmd --help

busybox v1.1.1 (2006.04.12-13:47+0000) multi-call binary

usage: newcmd none

none

就是這樣!busybox 開發人員開發了乙個優秀但非常容易擴充套件的工具。

當編譯**為c++的時候

1、可以在外部先把 主函式所在的檔案編譯成.o 問題。(修改主函式)

2、把本主函式所以賴的問題,便以為.a的庫

將可執行程式新增到busybox的步驟:

1、修改可執行程式main函式名:

(1)  如果main函式所在的檔案是c++ ,請在main函式前新增extern "c" ,並按照  如下格式修改main函式名:mine_[命令/執行程式名]_main(int argc, char *argv)  

例如:extern "c" int mine_test_main(int argc, char *argv)

(2)   如果main函式所在的檔案是c ,按照如下格式修改main函式名:mine_[命令/執行程式名]_main(int argc, char *argv)   

例如:int mine_test_main(int argc, char *argv) 

2、修改makefile將該模組編譯為靜態庫命名為:lib[命令/執行程式名].a 

附註:1、如果該模組依賴其他靜態庫,請一併提供。

2、請各模組命令的輸出列印包涵各自模組資訊。

3、請在命令執行的時候列印版本資訊以及編譯時間等,以便於定位。

4、請保證大家所使用統一編譯器

向BusyBox中新增新命令(1 16 1版

舉例 新命令稱為 newcmd,並將它放到了 miscutils 目錄中 首先,編寫或改寫新命令的源 保證命令對應main函式形如 int cmdname main int argc,char argv include libbb.h include int newcmd main int argc...

busybox中sendmail命令使用

1 busybox 只支援sendmail命令傳送郵件,暫不支援mail命令 mail呼叫sendmail命令傳送郵件 2 sendmail用法 cat mail.txt subject test cc to to 163.com from from 163.com 郵件格式頭和內容之間一定要有空行...

新增新的命令使生效

有時候linux預設安裝的命令版本較低,我們需要安裝較高版本的命令。比如,centos預設安裝的python為2.6.6,安裝2.7版本後,執行python v檢視還是2.6版本的python。此時首先想到的應該是環境變數可能有問題,2.7版本的python安裝在 usr local bin 下,2...