如何向busybox添加自己的命令

轉自: http://blog.csdn.net/yangzheng_yz/article/details/45046591


在做嵌入式開的時候,busybox無疑是非常好用的命令集,所以很多時候都喜歡把busybox移植到我們的系統裏面,移植過程網上也有很多相關的文檔,今天這篇文檔主要介紹如何在busybox中添加我們自己的命令,過程如下:

添加一個很簡單的命令——hello_busybox,輸出“Hello Husybox!”。busybox解壓出來有很多目錄,每個目錄幾乎是一類命令,比如網絡,shell等等。我就把hello_busybox這個命令添加到miscutils目錄下。

1)、在miscutils目錄下添加.c文件,函數名要與其它.c文件裏面的函數名的格式保持一致,即命令名_main()。
[kernel@localhost miscutils]$ cat hello_busybox.c

1 /*********************************************************************************
  2  *      Copyright:  (C) 2015 Yang Zheng<[email protected]>  
  3  *                  All rights reserved.
  4  *
  5  *       Filename:  hello_busybox.c
  6  *    Description:  This file 
  7  *                 
  8  *        Version:  1.0.0(04/14/2015~)
  9  *         Author:  Yang Zheng <[email protected]>
 10  *      ChangeLog:  1, Release initial version on "04/14/2015 05:42:09 PM"
 11  *                 
 12  ********************************************************************************/
 13 
 14 #include "busybox.h"                                                                                                             
 15 
 16 
 17 int hello_busybox_main(int argc, char *argv[])
 18 {
 19     printf("hello Busybox!\n");
 20 
 21     return 0;
 22 }

2)、修改編譯文件,因爲僅添加.c源文件,busybox編譯系統不知道有新的代碼添加進來,make的時候也不會編譯hello_busybox.c文件,所以要修改Config.src文件(添加命令的整個過程跟添加內核驅動類似--內核是Kconfig):
[kernel@localhost miscutils]$ cat Config.src 
config HELLO_BUSYBOX
        bool "say hello to busybox"
        default y
        select PLATFORM_LINUX
        help
                say hello to busybox
修改這裏主要是使得執行“make menuconfig”命令的時候,配置界面可以出現我們新增的命令,讓用戶對該命令可以配置,第一行是表示該命令的一個環境變量;第二行是出現在配置界面上的文字,是一個布爾量,取值爲“Y”或者“N”;第三行是這個選項的默認值,這裏默認是選中,後面兩行是在配置界面的幫助信息。

注:修改上面的文件只是讓配置界面出現我們的這個命令,以及根據是否選擇配置環境變量“HELLO_BUSYBOX”爲“Y"或”N",到目前爲止,busybox還是不能編譯到我們的源文件,甚至到現在爲止都還不知道我們的這個源文件叫啥。所以

3)、修改編譯文件Kbuild.src
[kernel@localhost miscutils]$ cat Kbuild.src 
lib-$(CONFIG_HELLO_BUSYBOX)    += hello_busybox.o


注:移植郭busybox的人都知道在bin,sbin目錄下生產的都是符號鏈接,我們自己的命令要最終當然也是符號鏈接,那麼要把保存到哪個目錄下呢?

4)、修改/include/applets.src.h文件
[kernel@localhost include]$ vim applets.src.h 
IF_HELLO_BUSYBOX(APPLET(hello_busybox, BB_DIR_SBIN, BB_SUID_DROP))
第一個參數:命令的名字;第二個參數:存放的路徑:第三個參數:權限


5)、爲命令添加幫助信息,以便使用--help的時候查閱
[kernel@localhost include]$ vim usage.src.h 
22 #define hello_busybox_trivial_usage "None"
23 #define hello_busybox_full_usage "None


命令成功添加,使用make menuconfig即可看到,還有在make之前可以查看到include/autoconf.h裏面有:

4751 #define CONFIG_HELLO_BUSYBOX 1                                                                                                  
4752 #define ENABLE_HELLO_BUSYBOX 1

make 之後在include/config/下生成/hello/busybox.h文件:
#define CONFIG_HELLO_BUSYBOX 1


後面就是測試:
[root@hi3518c ~]# hello_busybox --h
hello Busybox!
[root@hi3518c ~]# hello_busybox 
hello Busybox!


完!!!!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章