日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]使用BusyBox簡化嵌入式Linux系統(tǒng)

BusyBox是很多標(biāo)準(zhǔn)Linux®工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox包含了一些簡單的工具,例如cat和echo,還包含了一些更大、更復(fù)雜的工具,例如grep、find、mount以及telnet(不過它的選項(xiàng)比傳統(tǒng)的版本要少);有些人將BusyBox稱為Linux工具里的瑞士軍刀。本文將探索BusyBox的目標(biāo),它是如何工作的,以及為什么它對于內(nèi)存有限的環(huán)境來說是如此重要。

POSIX環(huán)境

盡管BusyBox的目標(biāo)是提供一個(gè)相當(dāng)完整的POSIX(可移植操作系統(tǒng)接口)環(huán)境,這是一個(gè)期望,而不是一種需求。這些工具雖然并不完整,但是它們提供了我們期望的主要功能。

BusyBox源代碼樹

BusyBox的源代碼樹組織得很好。這些工具都基于它們的用途進(jìn)行了分類,并存儲(chǔ)在單獨(dú)的子目錄中。例如,網(wǎng)絡(luò)工具和守護(hù)進(jìn)程(如httpd、ifconfig等)都在。/networking目錄中;標(biāo)準(zhǔn)的模塊工具(包括insmod、rmmod和lsmod)都在。/modutils目錄中;編輯器(例如vi和流編輯器,如awk和sed)都在。/editors目錄中。makefile配置、編譯和安裝所使用的各個(gè)文檔都在這個(gè)目錄樹的根目錄中。

清單5。編譯默認(rèn)的BusyBox配置

$cdbusybox-1。1。1

$makedefconfig

$make

$

結(jié)果是一個(gè)相當(dāng)大的BusyBox映像,不過這只是開始使用它的最簡單的方法。我們可以直接調(diào)用這個(gè)新映像,這會(huì)產(chǎn)生一個(gè)簡單的Help頁面,里面包括當(dāng)前配置的命令。要對這個(gè)映像進(jìn)行測試,我們也可以對一個(gè)命令調(diào)用BusyBox來執(zhí)行,如清單6所示。

清單6。展示BusyBox命令的執(zhí)行和BusyBox中的ashshell

$。/busyboxpwd

/usr/local/src/busybox-1。1。1

$。/busyboxash

/usr/local/src/busybox-1。1。1$pwd

/usr/local/src/busybox-1。1。1

/usr/local/src/busybox-1。1。1$exit

$

在這個(gè)例子中,我們調(diào)用了pwd(打印工作目錄)命令,使用BusyBox進(jìn)入了ashshell,并在ash中調(diào)用了pwd。

手工配置

如果您正在構(gòu)建一個(gè)具有特殊需求的嵌入式設(shè)備,那就可以手工使用menuconfigmake目標(biāo)來配置BusyBox的內(nèi)容。如果您熟悉Linux內(nèi)核的編譯過程,就會(huì)注意到menuconfig與配置Linux內(nèi)核的內(nèi)容所使用的目標(biāo)相同。實(shí)際上,它們都采用了相同的基于ncurses的應(yīng)用程序。

使用手工配置,我們可以指定在最終的BusyBox映像中包含的命令。我們也可以對BusyBox環(huán)境進(jìn)行配置,例如包括對NSA(美國國家安全代理)的安全增強(qiáng)Linux(SELinux),指定要使用的編譯器(用來在嵌入式環(huán)境中進(jìn)行交叉編譯)以及BusyBox應(yīng)該靜態(tài)編譯還是動(dòng)態(tài)編譯。圖1給出了menuconfig的主界面。在這里我們應(yīng)該可以看到可以為BusyBox配置的不同類型的應(yīng)用程序(applet)。

圖1。使用menuconfig配置BusyBox

多體系結(jié)構(gòu)支持

可以簡單地為BusyBox指定交叉編譯器意味著我們可以為很多體系結(jié)構(gòu)編譯BusyBox。要為您的目標(biāo)體系結(jié)構(gòu)編譯BusyBox,我們需要一個(gè)交叉編譯器和一個(gè)已經(jīng)為特定目標(biāo)體系結(jié)構(gòu)編譯好的C庫(uClibc或glibc)。

要手工配置BusyBox,請使用下面的命令:

清單7。手工配置BusyBox

$makemenuconfig

$make

$

這為我們提供了可以調(diào)用的BusyBox的二進(jìn)制文件。下一個(gè)步驟是圍繞BusyBox構(gòu)建一個(gè)環(huán)境,包括將標(biāo)準(zhǔn)Linux命令重定向到BusyBox二進(jìn)制文件的符號(hào)鏈接。我們可以使用下面的命令簡單地完成這個(gè)過程:

清單8。構(gòu)建BusyBox環(huán)境

$makeinstall

$

默認(rèn)情況下,這會(huì)創(chuàng)建一個(gè)新的本地子目錄_install,其中包含了基本的Linux環(huán)境。在這個(gè)根目錄中,您會(huì)找到一個(gè)鏈接到BusyBox的linuxrc程序。這個(gè)linuxrc程序在構(gòu)建安裝盤或急救盤(允許提前進(jìn)行模塊化的引導(dǎo))時(shí)非常有用。同樣是在這個(gè)根目錄中,還有一個(gè)包含操作系統(tǒng)二進(jìn)制文件的/sbin子目錄。還有一個(gè)包含用戶二進(jìn)制文件的/bin目錄。在構(gòu)建軟盤發(fā)行版或嵌入式初始RAM磁盤時(shí),我們可以將這個(gè)_install目錄遷移到目標(biāo)環(huán)境中。我們還可以使用make程序的PREFIX選項(xiàng)將安裝目錄重定向到其他位置。例如,下面的代碼就使用/tmp/newtarget根目錄來安裝這些符號(hào)鏈接,而不是使用。/_install目錄:

清單9。將符號(hào)鏈接安裝到另外一個(gè)目錄中

$makePREFIX=/tmp/newtargetinstall

$

使用installmake目標(biāo)創(chuàng)建的符號(hào)鏈接都來自于busybox。links文件。這個(gè)文件是在編譯BusyBox時(shí)創(chuàng)建的,它包含了已經(jīng)配置的命令清單。在執(zhí)行install時(shí),就會(huì)檢查busybox。links文件確定要?jiǎng)?chuàng)建的符號(hào)鏈接。

到BusyBox的命令行鏈接也可以使用BusyBox在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建。CONFIG_FEATURE_INSTALLER選項(xiàng)就可以啟用這個(gè)特性,在運(yùn)行時(shí)可以這樣執(zhí)行:

清單10。在運(yùn)行時(shí)創(chuàng)建命令鏈接

$。/busybox--install-s

$

-s選項(xiàng)強(qiáng)制創(chuàng)建這些符號(hào)鏈接(否則就創(chuàng)建硬鏈接)。這個(gè)選項(xiàng)要求系統(tǒng)中存在/proc文件系統(tǒng)。

BusyBox編譯選項(xiàng)

BusyBox包括了幾個(gè)編譯選項(xiàng),可以幫助為我們編譯和調(diào)試正確的BusyBox。

表1。為BusyBox提供的幾個(gè)make選項(xiàng)

make目標(biāo)說明

help顯示make選項(xiàng)的完整列表

defconfig啟用默認(rèn)的(通用)配置

allnoconfig禁用所有的應(yīng)用程序(空配置)

allyesconfig啟用所有的應(yīng)用程序(完整配置)

allbareconfig啟用所有的應(yīng)用程序,但是不包括子特性

config基于文本的配置工具

menuconfigN-curses(基于菜單的)配置工具

all編譯BusyBox二進(jìn)制文件和文檔(。/docs)

busybox編譯BusyBox二進(jìn)制文件

clean清除源代碼樹

distclean徹底清除源代碼樹

sizes顯示所啟用的應(yīng)用程序的文本/數(shù)據(jù)大小

在定義配置時(shí),我們只需要輸入make就可以真正編譯BusyBox二進(jìn)制文件。例如,要為所有的應(yīng)用程序編譯BusyBox,我們可以執(zhí)行下面的命令:

清單11。編譯BusyBox二進(jìn)制程序

$makeallyesconfig

$make

$

壓縮BusyBox

如果您非常關(guān)心對BusyBox映像的壓縮,就需要記住兩件事情:

永遠(yuǎn)不要編譯為靜態(tài)二進(jìn)制文件(這會(huì)將所有需要的庫都包含到映像文件中)。相反,如果我們是編譯為一個(gè)共享映像,那么它會(huì)使用其他應(yīng)用程序使用的庫(例如/lib/libc。so。X)。

使用uClibc進(jìn)行編譯,這是一個(gè)對大小進(jìn)行過優(yōu)化的C庫,它是為嵌入式系統(tǒng)開發(fā)的;而不要使用標(biāo)準(zhǔn)的glibc(GNUC庫)來編譯。

BusyBox命令中支持的選項(xiàng)

BusyBox中的命令并不支持所有可用選項(xiàng),不過這些命令都包含了常用的選項(xiàng)。如果我們需要知道一個(gè)命令可以支持哪些選項(xiàng),可以使用--help選項(xiàng)來調(diào)用這個(gè)命令,如清單12所示。

清單12。使用--help選項(xiàng)調(diào)用命令

$。/busyboxwc--help

BusyBoxv1。1。1(2006。04。09-15:27+0000)multi-callbinary

Usage:wc[OPTION]。。。[FILE]。。。

Printline,word,andbytecountsforeachFILE,andatotallineif

morethanoneFILEisspecified。WithnoFILE,readstandardinput。

Options:

-cprintthebytecounts

-lprintthenewlinecounts

-Lprintthelengthofthelongestline

-wprintthewordcounts

$

這些特定的數(shù)據(jù)只有在啟用了CONFIG_FEATURE_VERBOSE_USAGE選項(xiàng)時(shí)才可以使用。如果沒有這個(gè)選項(xiàng),我們就無法獲得這些詳細(xì)數(shù)據(jù),但是這樣可以節(jié)省大約13KB的空間。

向BusyBox中添加新命令

向BusyBox添加一個(gè)新命令非常簡單,這是因?yàn)樗哂辛己枚x的體系結(jié)構(gòu)。第一個(gè)步驟是為新命令的源代碼選擇一個(gè)位置。我們要根據(jù)命令的類型(網(wǎng)絡(luò),shell等)來選擇位置,并與其他命令保持一致。這一點(diǎn)非常重要,因?yàn)檫@個(gè)新命令最終會(huì)在menuconfig的配置菜單中出現(xiàn)(在下面的例子中,是MiscellaneousUtilities菜單)。

對于這個(gè)例子來說,我將這個(gè)新命令稱為newcmd,并將它放到了。/miscutils目錄中。這個(gè)新命令的源代碼如清單13所示。

清單13。集成到BusyBox中的新命令的源代碼

#include"busybox。h"

intnewcmd_main(intargc,char*argv[])

{

inti;

printf("newcmdcalled:n");

for(i=0;i

printf("arg[%d]=%sn",i,argv[i]);

}

return0;

}

接下來,我們要將這個(gè)新命令的源代碼添加到所選子目錄中的Makefile。in中。在本例中,我更新了。/miscutils/Makefile。in文件。請按照字母順序來添加新命令,以便維持與現(xiàn)有命令的一致性:

清單14。將命令添加到Makefile。in中

MISCUTILS-$(CONFIG_MT)+=mt。o

MISCUTILS-$(CONFIG_NEWCMD)+=newcmd。o

MISCUTILS-$(CONFIG_RUNLEVEL)+=runlevel。o

接下來再次更新。/miscutils目錄中的配置文件,以便讓新命令在配置過程中是可見的。這個(gè)文件名為Config。in,新命令是按照字母順序添加的:

清單15。將命令添加到Config。in中

configCONFIG_NEWCMD

bool"newcmd"

defaultn

help

newcmdisanewtestcommand。

這個(gè)結(jié)構(gòu)定義了一個(gè)新配置項(xiàng)(通過config關(guān)鍵字)以及一個(gè)配置選項(xiàng)(CONFIG_NEWCMD)。新命令可以啟用,也可以禁用,因此我們對配置的菜單屬性使用了bool(Boolean)值。這個(gè)命令默認(rèn)是禁用的(n表示No),我們可以最后放上一個(gè)簡短的Help描述。在源代碼樹的。/scripts/config/Kconfig-language。txt文件中,我們可以看到配置語法的完整文法。

接下來需要更新。/include/applets。h文件,使其包含這個(gè)新命令。將下面這行內(nèi)容添加到這個(gè)文件中,記住要按照字母順序。維護(hù)這個(gè)次序非常重要,否則我們的命令就會(huì)找不到。

清單16。將命令添加到applets。h中

USE_NEWCMD(APPLET(newcmd,newcmd_main,_BB_DIR_USER_BIN,_BB_SUID_NEVER))

這定義了命令名(newcmd),它在Busybox源代碼中的函數(shù)名(newcmd_main),應(yīng)該在哪里會(huì)為這個(gè)新命令創(chuàng)建鏈接(在這種情況中,它在/usr/bin目錄中),最后這個(gè)命令是否有權(quán)設(shè)置用戶id(在本例中是no)。

倒數(shù)第二個(gè)步驟是向。/include/usage。h文件中添加詳細(xì)的幫助信息。正如您可以從這個(gè)文件的例子中看到的一樣,使用信息可能非常詳細(xì)。在本例中,我只添加了一點(diǎn)信息,這樣就可以編譯這個(gè)新命令了:

清單17。向usage。h添加幫助信息

#definenewcmd_trivial_usage"None"

#definenewcmd_full_usage"None"

最后一個(gè)步驟是啟用新命令(通過makemenuconfig,然后在MiscellaneousUtilities菜單中啟用這個(gè)選項(xiàng))然后使用make來編譯BusyBox。

使用新的BusyBox,我們可以對這個(gè)新命令進(jìn)行測試,如清單18所示。

清單18。測試新命令

$。/busyboxnewcmdarg1

newcmdcalled:

arg[0]=newcmd

arg[1]=arg1

$。/busyboxnewcmd--help

BusyBoxv1。1。1(2006。04。12-13:47+0000)multi-callbinary

Usage:newcmdNone

None

就是這樣!BusyBox開發(fā)人員開發(fā)了一個(gè)優(yōu)秀但非常容易擴(kuò)展的工具。

結(jié)束語

BusyBox是為構(gòu)建內(nèi)存有限的嵌入式系統(tǒng)和基于軟盤系統(tǒng)的一個(gè)優(yōu)秀工具。BusyBox通過將很多必需的工具放入一個(gè)可執(zhí)行程序,并讓它們可以共享代碼中相同的部分,從而對它們的大小進(jìn)行了很大程度的縮減,BusyBox對于嵌入式系統(tǒng)來說是一個(gè)非常有用的工具,因此值得我們花一些時(shí)間進(jìn)行探索。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉