轉自: 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!
完!!!!!!