機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
BusyBox 簡(jiǎn)化嵌入式 Linux 系統(tǒng)
BusyBox 簡(jiǎn)化嵌入式 Linux 系統(tǒng)
 更新時(shí)間:2009-8-12 17:00:33  點(diǎn)擊數(shù):0
【字體: 字體顏色

BusyBox 揭露了這樣一個(gè)事實(shí):很多標(biāo)準(zhǔn) Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如 grepfind)都需要在目錄中搜索文件的代碼。當(dāng)這些工具被合并到一個(gè)可執(zhí)行程序中時(shí),它們就可以共享這些相同的元素,這樣可以產(chǎn)生更小的可執(zhí)行程序。實(shí)際上, BusyBox 可以將大約 3.5MB 的工具包裝成大約 200KB 大小。這就為可引導(dǎo)的磁盤(pán)和使用 Linux 的嵌入式設(shè)備提供了更多功能。我們可以對(duì) 2.4 和 2.6 版本的 Linux 內(nèi)核使用 BusyBox。

BusyBox 是怎么樣工作的?

為了讓一個(gè)可執(zhí)行程序看起來(lái)就像是很多可執(zhí)行程序一樣,BusyBox 為傳遞給 C 的 main 函數(shù)的參數(shù)開(kāi)發(fā)了一個(gè)很少使用的特性;叵胍幌 C 語(yǔ)言的 main 函數(shù)的定義如下:


清單 1. C 的 main 函數(shù)

在這個(gè)定義中,argc 是傳遞進(jìn)來(lái)的參數(shù)的個(gè)數(shù)(參數(shù)數(shù)量),而 argv 是一個(gè)字符串?dāng)?shù)組,代表從命令行傳遞進(jìn)來(lái)的參數(shù)(參數(shù)向量)。argv 的索引 0 是從命令行調(diào)用的程序名。

清單 2 給出的這個(gè)簡(jiǎn)單 C 程序展示了 BusyBox 的調(diào)用。它只簡(jiǎn)單地打印 argv 向量的內(nèi)容。


清單 2. BusyBox 使用 argv[0] 來(lái)確定調(diào)用哪個(gè)應(yīng)用程序

調(diào)用這個(gè)程序會(huì)顯示所調(diào)用的第一個(gè)參數(shù)是該程序的名字。我們可以對(duì)這個(gè)可執(zhí)行程序重新進(jìn)行命名,此時(shí)再調(diào)用就會(huì)得到該程序的新名字。另外,我們可以創(chuàng)建一個(gè)到可執(zhí)行程序的符號(hào)鏈接,在執(zhí)行這個(gè)符號(hào)鏈接時(shí),就可以看到這個(gè)符號(hào)鏈接的名字。


清單 3. 在使用新命令更新 BusyBox 之后的命令測(cè)試

BusyBox 使用了符號(hào)鏈接以便使一個(gè)可執(zhí)行程序看起來(lái)像很多程序一樣。對(duì)于 BusyBox 中包含的每個(gè)工具來(lái)說(shuō),都會(huì)這樣創(chuàng)建一個(gè)符號(hào)鏈接,這樣就可以使用這些符號(hào)鏈接來(lái)調(diào)用 BusyBox 了。BusyBox 然后可以通過(guò) argv[0] 來(lái)調(diào)用內(nèi)部工具。

配置并編譯 BusyBox

我們可以從 BusyBox 的 Web 站點(diǎn)上下載最新版本的 BusyBox(請(qǐng)參看 參考資料

 如果您對(duì)本文有任何疑問(wèn)或者建議,請(qǐng)到討論區(qū)發(fā)表您的意見(jiàn): >> 論壇入口 <<
BusyBox 是很多標(biāo)準(zhǔn) Linux® 工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox 包含了一些簡(jiǎn)單的工具,例如 cat 和 echo,還包含了一些更大、更復(fù)雜的工具,例如 grep、find、mount 以及 telnet(不過(guò)它的選項(xiàng)比傳統(tǒng)的版本要少);有些人將 BusyBox 稱(chēng)為 Linux 工具里的瑞士軍刀。本文將探索 BusyBox 的目標(biāo),它是怎么樣工作的,以及為什么它對(duì)于內(nèi)存有限的環(huán)境來(lái)說(shuō)是如此重要。

BusyBox 的誕生

BusyBox 最初是由 Bruce Perens 在 1996 年為 Debian GNU/Linux 安裝盤(pán)編寫(xiě)的。其目標(biāo)是在一張軟盤(pán)上創(chuàng)建一個(gè)可引導(dǎo)的 GNU/Linux 系統(tǒng),這可以用作安裝盤(pán)和急救盤(pán)。一張軟盤(pán)可以保存大約 1.4-1.7MB 的內(nèi)容,因此這里沒(méi)有多少空間留給 Linux 內(nèi)核以及相關(guān)的用戶(hù)應(yīng)用程序使用。

BusyBox 許可證
BusyBox 是按照 GNU General Public License(GPL)許可證發(fā)行的。這意味著如果我們?cè)谝粋(gè)項(xiàng)目中使用 BusyBox,就必須遵守這個(gè)許可證。我們可以在 BusyBox Web 站點(diǎn)(請(qǐng)參看本文后面 參考資料 一節(jié)的內(nèi)容)上看到這個(gè)許可證的內(nèi)容。BusyBox 團(tuán)隊(duì)似乎正忙于監(jiān)視違反這個(gè)許可證的情況。實(shí)際上,他們維護(hù)了一個(gè) “Hall of Shame” 頁(yè)面來(lái)說(shuō)明違反者的情況。
POSIX 環(huán)境
盡管 BusyBox 的目標(biāo) 是提供一個(gè)相當(dāng)完整的 POSIX(可移植操作系統(tǒng)接口)環(huán)境,這是一個(gè)期望,而不是一種需求。這些工具雖然并不完整,但是它們提供了我們期望的主要功能。
int main( int argc, char *argv[] )
// test.c#include <stdio.h>int main( int argc, char *argv[] ){  int i;  for (i = 0 ; i < argc ; i++) {    printf("argv[%d] = %s\n", i, argv[i]);  }  return 0;}
$ gcc -Wall -o test test.c$ ./test arg1 arg2argv[0] = ./testargv[1] = arg1argv[2] = arg2$ mv test newtest$ ./newtest arg1argv[0] = ./newtestargv[1] = arg1$ ln -s newtest linktest$ ./linktest argargv[0] = ./linktestargv[1] = arg
  • 上一篇: 如何刪除檔案中的重復(fù)的行
  • 下一篇: 嵌入式LINUX開(kāi)發(fā)資源大全
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1