第19章 強(qiáng)大的命令系統(tǒng)BusyBox
,Click to edit Master title style,Click to edit Master text styles,Click to edit Master title style,Click to edit Master text styles,第,19,章 強(qiáng)大的命令系統(tǒng),BusyBox,BusyBox,是嵌入式系統(tǒng)常用的一個命令系統(tǒng),它的功能強(qiáng)大、占用存儲容量小,這些優(yōu)點(diǎn)都適合嵌入式系統(tǒng)。本章從,BusyBox,的原理出發(fā)介紹了,BusyBox,的編譯安裝,以及如何應(yīng)用在嵌入式系統(tǒng)。,BusyBox,的編譯安裝都是比較容易的,讀者可以輕易的把,BusyBox,移植到嵌入式開發(fā)板上。本章主要內(nèi)容如下:,BusyBox,起源,BusyBox,工作原理,在,PC,機(jī)上安裝,BusyBox,移植,BusyBox,到,ARM,開發(fā)版,19.1,BusyBox,簡介,BusyBox,是,Linux,平臺的一個工具集合。,BusyBox,可以包含最基本的系統(tǒng)命令如,ls,和,cat,,還可以包含功能更復(fù)雜的程序如,grep,和,find,,甚至可以把,HTTP,服務(wù)器也集成在一個軟件包內(nèi)。,BusyBox,把,Linux,系統(tǒng)常用的命令和工具以及服務(wù)程序集成在一個可執(zhí)行文件內(nèi),通常體積在,1MB,字節(jié)左右。如果單獨(dú)存放每條命令,可能需要幾,MB,甚至幾十,MB,存儲空間,這對存儲空間緊張的嵌入式系統(tǒng)來說是很難接受的。,BusyBox,是很適合嵌入式系統(tǒng)的,本節(jié)介紹,BusyBox,的工作原理和安裝流程。,19.1.1,簡單易懂的,BusyBox,BusyBox,項(xiàng)目最初是在,1996,年發(fā)起的,當(dāng)時嵌入式系統(tǒng)并沒有開始流行。,BushBox,最初的目的是被設(shè)計為一個安裝在軟盤上的命令系統(tǒng),因?yàn)楫?dāng)時還沒有可以移動的大容量可擦寫存儲介質(zhì),軟盤是最常用的存儲介質(zhì)。使用過軟盤的讀者知道,它的容量很小,對于今天的計算機(jī)來說幾乎沒有什么用武之地。,BusyBox,可以把常見的,Linux,命令打包編譯成一個單一的可執(zhí)行文件。通過建立鏈接,用戶可以像使用傳統(tǒng)的命令一樣是用,BusyBox,。,BusyBox,的出現(xiàn)是基于,Linux,共享庫。對于大多數(shù),Linux,工具來說,不同的命令可以共享許多東西。如查找文件的命令,grep,和,find,,雖然功能不完全相同,但是兩個程序都會用到從文件系統(tǒng)搜索文件的功能,這部分代碼可以是相同的。,BusyBox,的聰明之處在于把不同工具的代碼,以及公用的代碼都集成在一起,從而大大減小了可執(zhí)行文件的體積。,19.1.2,BusyBox,工作原理,BusyBox,利用了,shell,傳遞給,C,語言,main(),函數(shù)的參數(shù),回想一下,C,語言,main(),函數(shù)的定義:,int,main(,int,argc,char*,argv,),19.1.3,安裝,BusyBox,安裝,BusyBox,需要從源代碼開始編譯。首先是獲取源代碼,從,BusyBox,的官方網(wǎng)站(,http:/,/downloads/,)下載。這個鏈接里有多個版本,但是高版本的,BusyBox,存在一些問題,編譯過程中容易出錯。,19.2,交叉編譯,BusyBox,BusyBox,最大的特點(diǎn)是占用存儲空間小,在,PC,機(jī)使用優(yōu)勢不明顯。本節(jié)介紹如果在嵌入式系統(tǒng)上配置安裝,BusyBox,。交叉編譯,BusyBox,需要有交叉編譯環(huán)境,在第,18,章已經(jīng)講解如何建立交叉編譯環(huán)境,現(xiàn)在使用已經(jīng)建立好的環(huán)境為例介紹交叉編譯,BusyBox,。,(,1,)首先查看,19.1.3,節(jié)編譯得到的,busybox,可執(zhí)行文件的類型:,(,2,)在交叉編譯,BusyBox,之前先分析一下,BusyBox,的,Makefile,。,(,3,)至此,已經(jīng)找到如何使用交叉編譯,下面可以編譯,ARM,開發(fā)板使用的,BusyBox,了。,(,4,)使用“,make,menuconfig,”,命令進(jìn)入,BusyBox,的配置界面,選擇,Build Options,子菜單。,(,5,)配置完畢后,保存退出。重新編譯,BusyBox,,編譯完成后,查看可執(zhí)行文件類型。,19.2,交叉編譯,BusyBox,19.3,使用,BusyBox,使用,BusyBox,的最終目的是在嵌入式開發(fā)板上應(yīng)用。本節(jié)從,BusyBox,在嵌入式系統(tǒng)中的初始化過程出發(fā),介紹如何移植到開發(fā)板。其中,需要讀者了解第,16,章介紹的嵌入式,Linux,啟動流程,便于理解本節(jié)的內(nèi)容。,19.3.1,BusyBox,初始化,在第,16,章,Linux,啟動流程介紹了,Linux,內(nèi)核的初始化代碼,kernel/init/,main.c,里有幾個語句如下:,if(,execute_command,),execve(execute_command,argv_init,envp_init,);,execve(/sbin/init,argv_init,envp_init,);,19.3.2,目標(biāo)板,BusyBox,安裝,了解了,BusyBox,的工作流程后,安裝,BusyBox,就變得很簡單了。主要的任務(wù)是設(shè)置好,BusyBox,與,Linux,內(nèi)核的結(jié)合點(diǎn)。,可以通過兩種手段設(shè)置,BusyBox,到開發(fā)板。一種方法是在,PC,機(jī)上制作,cramfs,鏡像。這種方法好處是便于操作,但是需要注意的是,BusyBox,的路徑不能搞錯。缺點(diǎn)是出錯后修改麻煩,每次都需要燒寫開發(fā)板的,Flash,。,19.4,小結(jié),本章介紹了,BusyBox,的工作原理,編譯安裝和移植到開發(fā)板的技巧。讀者親自動手實(shí)踐,對于理解,BusyBox,的工作流程有很大幫助。另外,對于有興趣的讀者可以挑選,BusyBox,源代碼的文件,閱讀代碼理解,BusyBox,的設(shè)計思想和工作流程。第,20,章講解嵌入式,Linux,開發(fā)的重點(diǎn)內(nèi)核移植。,