嵌入式Linux開發(fā)
嵌入式Linux的開發(fā)和研究是Linux領(lǐng)域研究的一個熱點(diǎn),目前已開發(fā)成功的嵌入式系統(tǒng)有一半以上都是Linux。Linux到底有什么優(yōu)勢,使之取得如此輝煌的成績呢?本文分為兩大部分:Linux的優(yōu)點(diǎn)、Linux開發(fā)。
一、Linux的優(yōu)勢:
廣泛的硬件支持
Linux能夠支持x86、ARM、MIPS、ALPHA、PowerPC等多種體系結(jié)構(gòu),目前已經(jīng)成功移植到數(shù)十種硬件平臺,幾乎能夠運(yùn)行在所有流行的CPU上。Linux有著異常豐富的驅(qū)動程序資源,支持各種主流硬件設(shè)備和***硬件技術(shù),甚至可以在沒有存儲管理單元(MMU)的處理器上運(yùn)行,這些都進(jìn)一步促進(jìn)了Linux在嵌入式系統(tǒng)中的應(yīng)用。
內(nèi)核高效穩(wěn)定
Linux內(nèi)核的高效和穩(wěn)定已經(jīng)在各個領(lǐng)域內(nèi)得到了大量事實(shí)的驗(yàn)證,Linux的內(nèi)核設(shè)計非常精巧,分成進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程間通信、虛擬文件系統(tǒng)和網(wǎng)絡(luò)接口五大部分,其獨(dú)特的模塊機(jī)制可以根據(jù)用戶的需要,實(shí)時地將某些模塊插入到內(nèi)核或從內(nèi)核中移走。這些特性使得Linux系統(tǒng)內(nèi)核可以裁剪得非常小巧,很適合于嵌入式系統(tǒng)的需要。
開放源碼,軟件豐富
Linux是開放源代碼的自由操作系統(tǒng),它為用戶提供了***限度的自由度,由于嵌入式系統(tǒng)千差萬別,往往需要針對具體的應(yīng)用進(jìn)行修改和優(yōu)化,因而獲得源代碼就變得至關(guān)重要了。Linux的軟件資源十分豐富,每一種通用程序在Linux上幾乎都可以找到,并且數(shù)量還在不斷增加。在Linux上開發(fā)嵌入式應(yīng)用軟件一般不用從頭做起,而是可以選擇一個類似的自由軟件做為原型,在其上進(jìn)行二次開發(fā)。
優(yōu)秀的開發(fā)工具
開發(fā)嵌入式系統(tǒng)的關(guān)鍵是需要有一套完善的開發(fā)和調(diào)試工具。傳統(tǒng)的嵌入式開發(fā)調(diào)試工具是在線仿真器(In-Circuit Emulator,ICE),它通過取代目標(biāo)板的微處理器,給目標(biāo)程序提供一個完整的仿真環(huán)境,從而使開發(fā)者能夠非常清楚地了解到程序在目標(biāo)板上的工作狀態(tài),便于監(jiān)視和調(diào)試程序。在線仿真器的價格非常昂貴,而且只適合做非常底層的調(diào)試,如果使用的是嵌入式Linux,一旦軟硬件能夠支持正常的串口功能時,即使不用在線仿真器也可以很好地進(jìn)行開發(fā)和調(diào)試工作,從而節(jié)省了一筆不小的開發(fā)費(fèi)用。嵌入式Linux為開發(fā)者提供了一套完整的工具鏈(Tool Chain),它利用GNU的gcc做編譯器,用gdb、kgdb、xgdb做調(diào)試工具,能夠很方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個級別的調(diào)試。
完善的網(wǎng)絡(luò)通信和文件管理機(jī)制
Linux至誕生之日起就與Internet密不可分,支持所有標(biāo)準(zhǔn)的Internet網(wǎng)絡(luò)協(xié)議,并且很容易移植到嵌入式系統(tǒng)當(dāng)中。此外,Linux還支持ext2、fat16、fat32、romfs等文件系統(tǒng),這些都為開發(fā)嵌入式系統(tǒng)應(yīng)用打下了很好的基礎(chǔ)。
二、嵌入式Linux開發(fā)技術(shù):
嵌入式系統(tǒng)是一種根據(jù)特定用途所專門開發(fā)的系統(tǒng),它只完成預(yù)期要完成的功能,因此其開發(fā)過程和開發(fā)環(huán)境同傳統(tǒng)的軟件開發(fā)相比有著顯著的不同。
1.開發(fā)流程
在嵌入式系統(tǒng)的應(yīng)用開發(fā)中,整個系統(tǒng)的開發(fā)過程如圖2所示:
圖2 嵌入式系統(tǒng)的開發(fā)流程
嵌入式系統(tǒng)發(fā)展到今天,對應(yīng)于各種微處理器的硬件平臺一般都是通用的、固定的、成熟的,這就大大減少了由硬件系統(tǒng)引入錯誤的機(jī)會。此外,由于嵌入式操作系統(tǒng)屏蔽了底層硬件的復(fù)雜性,使得開發(fā)者通過操作系統(tǒng)提供的API函數(shù)就可以完成大部分工作,因此大大簡化了開發(fā)過程,提高了系統(tǒng)的穩(wěn)定性。嵌入式系統(tǒng)的開發(fā)者現(xiàn)在已經(jīng)從反復(fù)進(jìn)行硬件平臺設(shè)計的過程中解脫出來,從而可以將主要精力放在滿足特定的需求上。
嵌入式系統(tǒng)通常是一個資源受限的系統(tǒng),因此直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時候甚至是不可能的。目前一般采用的解決辦法是首先在通用計算機(jī)上編寫程序,然后通過交叉編譯生成目標(biāo)平臺上可以運(yùn)行的二進(jìn)制代碼格式,***再下載到目標(biāo)平臺上的特定位置上運(yùn)行。
需要交叉開發(fā)環(huán)境(Cross Development Environment)的支持是嵌入式應(yīng)用軟件開發(fā)時的一個顯著特點(diǎn),交叉開發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境,它與運(yùn)行嵌入式應(yīng)用軟件的環(huán)境有所不同,通常采用宿主機(jī)/目標(biāo)機(jī)模式,如圖3所示。
圖3 交叉開發(fā)環(huán)境
宿主機(jī)(Host)是一臺通用計算機(jī)(如PC機(jī)或者工作站),它通過串口或者以太網(wǎng)接口與目標(biāo)機(jī)通信。宿主機(jī)的軟硬件資源比較豐富,不但包括功能強(qiáng)大的操作系統(tǒng)(如Windows和Linux),而且還有各種各樣優(yōu)秀的開發(fā)工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能夠大大提高嵌入式應(yīng)用軟件的開發(fā)速度和效率。
目標(biāo)機(jī)(Target)一般在嵌入式應(yīng)用軟件開發(fā)期間使用,用來區(qū)別與嵌入式系統(tǒng)通信的宿主機(jī),它可以是嵌入式應(yīng)用軟件的實(shí)際運(yùn)行環(huán)境,也可以是能夠替代實(shí)際運(yùn)行環(huán)境的仿真系統(tǒng),但軟硬件資源通常都比較有限。嵌入式系統(tǒng)的交叉開發(fā)環(huán)境一般包括交叉編譯器、交叉調(diào)試器和系統(tǒng)仿真器,其中交叉編譯器用于在宿主機(jī)上生成能在目標(biāo)機(jī)上運(yùn)行的代碼,而交叉調(diào)試器和系統(tǒng)仿真器則用于在宿主機(jī)與目標(biāo)機(jī)間完成嵌入式軟件的調(diào)試。在采用宿主機(jī)/目標(biāo)機(jī)模式開發(fā)嵌入式應(yīng)用軟件時,首先利用宿主機(jī)上豐富的資源和良好的開發(fā)環(huán)境開發(fā)和仿真調(diào)試目標(biāo)機(jī)上的軟件,然后通過串口或者以網(wǎng)絡(luò)將交叉編譯生成的目標(biāo)代碼傳輸并裝載到目標(biāo)機(jī)上,并在監(jiān)控程序或者操作系統(tǒng)的支持下利用交叉調(diào)試器進(jìn)行分析和調(diào)試,***目標(biāo)機(jī)在特定環(huán)境下脫離宿主機(jī)單獨(dú)運(yùn)行。
建立交叉開發(fā)環(huán)境是進(jìn)行嵌入式軟件開發(fā)的***步,目前常用的交叉開發(fā)環(huán)境主要有開放和商業(yè)兩種類型。開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈、目前已經(jīng)能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業(yè)的交叉開發(fā)環(huán)境則主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。
2. 交叉編譯和鏈接
在完成嵌入式軟件的編碼之后,需要進(jìn)行編譯和鏈接以生成可執(zhí)行代碼,由于開發(fā)過程大多是在使用Intel公司x86系列CPU的通用計算機(jī)上進(jìn)行的,而目標(biāo)環(huán)境的處理器芯片卻大多為ARM、MIPS、PowerPC、DragonBall等系列的微處理器,這就要求在建立好的交叉開發(fā)環(huán)境中進(jìn)行交叉編譯和鏈接。
交叉編譯器和交叉鏈接器是能夠在宿主機(jī)上運(yùn)行,并且能夠生成在目標(biāo)機(jī)上直接運(yùn)行的二進(jìn)制代碼的編譯器和鏈接器。例如在基于ARM體系結(jié)構(gòu)的gcc交叉開發(fā)環(huán)境中,arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。通常情況下,并不是每一種體系結(jié)構(gòu)的嵌入式微處理器都只對應(yīng)于一種交叉編譯器和交叉鏈接器,比如對于M68K體系結(jié)構(gòu)的gcc交叉開發(fā)環(huán)境而言,就對應(yīng)于多種不同的編譯器和鏈接器。如果使用的是COFF格式的可執(zhí)行文件,那么在編譯Linux內(nèi)核時需要使用m68k-coff-gcc和m68k-coff-ld,而在編譯應(yīng)用程序時則需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。
嵌入式系統(tǒng)在鏈接過程中通常都要求使用較小的函數(shù)庫,以便***產(chǎn)生的可執(zhí)行代碼能夠盡可能地小,因此實(shí)際運(yùn)用時一般使用經(jīng)過特殊處理的函數(shù)庫。對于嵌入式Linux系統(tǒng)來講,功能越來越強(qiáng)、體積越來越大的C語言函數(shù)庫glibc和數(shù)學(xué)函數(shù)庫libm已經(jīng)很難滿足實(shí)際的需要,因此需要采用它們的精化版本uClibc、uClibm和newlib等。
目前嵌入式的集成開發(fā)環(huán)境都支持交叉編譯和交叉鏈接,如WindRiver Tornado和GNU工具鏈等,編寫好的嵌入式軟件經(jīng)過交叉編譯和交叉鏈接后通常會生成兩種類型的可執(zhí)行文件:用于調(diào)試的可執(zhí)行文件和用于固化的可執(zhí)行文件。
3. 交叉調(diào)試
嵌入式軟件經(jīng)過編譯和鏈接后即進(jìn)入調(diào)試階段,調(diào)試是軟件開發(fā)過程中必不可少的一個環(huán)節(jié),嵌入式軟件開發(fā)過程中的交叉調(diào)試與通用軟件開發(fā)過程中的調(diào)試方式有所差別。在通用軟件開發(fā)中,調(diào)試器與被調(diào)試的程序往往運(yùn)行在同一臺計算機(jī)上,調(diào)試器是一個單獨(dú)運(yùn)行著的進(jìn)程,它通過操作系統(tǒng)提供的調(diào)試接口來控制被調(diào)試的進(jìn)程。而在嵌入式軟件開發(fā)中,調(diào)試時采用的是在宿主機(jī)和目標(biāo)機(jī)之間進(jìn)行的交叉調(diào)試,調(diào)試器仍然運(yùn)行在宿主機(jī)的通用操作系統(tǒng)之上,但被調(diào)試的進(jìn)程卻是運(yùn)行在基于特定硬件平臺的嵌入式操作系統(tǒng)中,調(diào)試器和被調(diào)試進(jìn)程通過串口或者網(wǎng)絡(luò)進(jìn)行通信,調(diào)試器可以控制、訪問被調(diào)試進(jìn)程,讀取被調(diào)試進(jìn)程的當(dāng)前狀態(tài),并能夠改變被調(diào)試進(jìn)程的運(yùn)行狀態(tài)。
交叉調(diào)試(Cross Debug)又常常被稱為遠(yuǎn)程調(diào)試(Remote Debug),是一種允許調(diào)試器以某種方式控制目標(biāo)機(jī)上被調(diào)試進(jìn)程的運(yùn)行方式,并具有查看和修改目標(biāo)機(jī)上內(nèi)存單元、寄存器以及被調(diào)試進(jìn)程中變量值等各種調(diào)試功能的調(diào)試方式。一般而言,遠(yuǎn)程調(diào)試過程的結(jié)構(gòu)如圖4所示。
圖4遠(yuǎn)程調(diào)試結(jié)構(gòu)
嵌入式系統(tǒng)的交叉調(diào)試有多種方法,可以被細(xì)分成不同的層次,但一般都具有如下一些典型特點(diǎn):
調(diào)試器和被調(diào)試進(jìn)程運(yùn)行在不同的機(jī)器上,調(diào)試器運(yùn)行在PC或者工作站上(宿主機(jī)),而被調(diào)試的進(jìn)程則運(yùn)行在各種專業(yè)調(diào)試板上(目標(biāo)機(jī))。
調(diào)試器通過某種通信方式與被調(diào)試進(jìn)程建立聯(lián)系,如串口、并口、網(wǎng)絡(luò)、DBM、JTAG或者專用的通信方式。
在目標(biāo)機(jī)上一般會具備某種形式的調(diào)試代理,它負(fù)責(zé)與調(diào)試器共同配合完成對目標(biāo)機(jī)上運(yùn)行著的進(jìn)程的調(diào)試。這種調(diào)試代理可能是某些支持調(diào)試功能的硬件設(shè)備(如DBI 2000),也可能是某些專門的調(diào)試軟件(如gdbserver)。
目標(biāo)機(jī)可能是某種形式的系統(tǒng)仿真器,通過在宿主機(jī)上運(yùn)行目標(biāo)機(jī)的仿真軟件,整個調(diào)試過程可以在一臺計算機(jī)上運(yùn)行。此時物理上雖然只有一臺計算機(jī),但邏輯上仍然存在著宿主機(jī)和目標(biāo)機(jī)的區(qū)別。
在嵌入式軟件開發(fā)過程中的調(diào)試方式有很多種,應(yīng)根據(jù)實(shí)際的開發(fā)要求和條件進(jìn)行選擇。就調(diào)試方法而言,嵌入式系統(tǒng)的交叉調(diào)試可以分為硬件調(diào)試和軟件調(diào)試兩種,前者使用仿真調(diào)試器協(xié)助調(diào)試過程,而后者則使用軟件調(diào)試器完成調(diào)試過程。
硬件調(diào)試
相對于軟件調(diào)試而言,使用硬件調(diào)試器可以獲得更強(qiáng)大的調(diào)試功能和更優(yōu)秀的調(diào)試性能。硬件調(diào)試器的基本原理是通過仿真硬件的執(zhí)行過程,讓開發(fā)者在調(diào)試時可以隨時了解到系統(tǒng)的當(dāng)前執(zhí)行情況。目前嵌入式系統(tǒng)開發(fā)中最常用到的硬件調(diào)試器是ROM Monitor、ROM Emulator、In-Circuit Emulator和In-Circuit Debugger。
采用ROM Monitor方式進(jìn)行交叉調(diào)試需要在宿主機(jī)上運(yùn)行調(diào)試器,在目標(biāo)機(jī)上運(yùn)行ROM監(jiān)視器(ROM Monitor)和被調(diào)試程序,宿主機(jī)通過調(diào)試器與目標(biāo)機(jī)上的ROM監(jiān)視器建立通信連接,它們之間的通信遵循遠(yuǎn)程調(diào)試協(xié)議。ROM監(jiān)視器可以是一段運(yùn)行在目標(biāo)機(jī)ROM上的可執(zhí)行程序,也可以是一個專門的硬件調(diào)試設(shè)備,它負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行情況,能夠與宿主機(jī)端的調(diào)試器一同完成對應(yīng)用程序的調(diào)試。在使用這種調(diào)試方式時,被調(diào)試程序首先通過ROM監(jiān)視器下載到目標(biāo)機(jī),然后在ROM監(jiān)視器的監(jiān)控下完成調(diào)試,目前使用的絕大部分ROM監(jiān)視器能夠完成設(shè)置斷點(diǎn)、單步執(zhí)行、查看寄存器、修改內(nèi)存空間等各項(xiàng)調(diào)試功能。
采用ROM Emulator方式進(jìn)行交叉調(diào)試時需要使用ROM仿真器,它通常被插入到目標(biāo)機(jī)上的ROM插槽中,專門用于仿真目標(biāo)機(jī)上的ROM芯片。在使用這種調(diào)試方式時,被調(diào)試程序首先下載到ROM仿真器中,它等效于下載到目標(biāo)機(jī)的ROM芯片上,然后在ROM仿真器中完成對目標(biāo)程序的調(diào)試。ROM Emulator調(diào)試方式通過使用一個ROM仿真器,雖然避免了每次修改程序后都必須重新燒寫到目標(biāo)機(jī)ROM中這一費(fèi)時費(fèi)力的操作,但由于ROM仿真器本身比較昂貴,功能相對來講又比較單一,因此只適應(yīng)于某些特定場合。
采用In-Circuit Emulator(ICE)方式進(jìn)行交叉調(diào)試時需要使用在線仿真器,它是仿照目標(biāo)機(jī)上的CPU而專門設(shè)計的硬件,可以完全仿真處理器芯片的行為,并且提供了非常豐富的調(diào)試功能。在使用在線仿真器進(jìn)行調(diào)試的過程中,可以按順序單步執(zhí)行,也可以倒退執(zhí)行,還可以實(shí)時查看所有需要的數(shù)據(jù),從而給調(diào)試過程帶來了很多的便利。嵌入式系統(tǒng)應(yīng)用的一個顯著特點(diǎn)是與現(xiàn)實(shí)世界中的硬件直接相關(guān),存在各種異變和事先未知的變化,從而給微處理器的指令執(zhí)行帶來各種不確定因素,這種不確定性在目前情況下只有通過在線仿真器才有可能發(fā)現(xiàn),因此盡管在線仿真器的價格非常昂貴,但仍然得到了非常廣泛的應(yīng)用。
采用In-Circuit Debugger(ICD)方式進(jìn)行交叉調(diào)試時需要使用在線調(diào)試器。由于ICE的價格非常昂貴,并且每種CPU都需要一種與之對應(yīng)的ICE,使得開發(fā)成本非常高,一個比較好的解決辦法是讓CPU直接在其內(nèi)部實(shí)現(xiàn)調(diào)試功能,并通過在開發(fā)板上引出的調(diào)試端口,發(fā)送調(diào)試命令和接收調(diào)試信息,完成調(diào)試過程。目前Motorola公司提供的開發(fā)板上使用的是DBM調(diào)試端口,而ARM公司提供的開發(fā)板上使用的則是JTAG調(diào)試端口,使用合適的軟件工具與這些調(diào)試端口進(jìn)行連接,可以獲得與ICE類似的調(diào)試效果。
軟件調(diào)試
軟件調(diào)試通常要在不同的層次上進(jìn)行,有時可能需要對嵌入式操作系統(tǒng)的內(nèi)核進(jìn)行調(diào)試,而有時可能僅僅只需要調(diào)試嵌入式應(yīng)用程序就可以了。在嵌入式系統(tǒng)的整個開發(fā)過程中,不同層次上的軟件調(diào)試需要使用不同的調(diào)試方法。
嵌入式操作系統(tǒng)的內(nèi)核調(diào)試相對來講比較困難,這是因?yàn)樵趦?nèi)核中不便于增加一個調(diào)試器程序,而只能通過遠(yuǎn)程調(diào)試的方法,通過串口和操作系統(tǒng)內(nèi)置的"調(diào)試樁"(debug stub)進(jìn)行通信,共同完成調(diào)試過程。調(diào)試樁可以看成是一個調(diào)試服務(wù)器,它通過操作系統(tǒng)獲得一些必要的調(diào)試信息,并且負(fù)責(zé)處理宿主機(jī)發(fā)送來的調(diào)試命令。具體到嵌入式Linux系統(tǒng)內(nèi)核,調(diào)試時可以先在Linux內(nèi)核中設(shè)置一個調(diào)試樁,用作調(diào)試過程中和宿主機(jī)之間的通信服務(wù)器,然后就可以在宿主機(jī)中通過調(diào)試器的串口與調(diào)試樁進(jìn)行通信,并通過調(diào)試器控制目標(biāo)機(jī)上Linux內(nèi)核的運(yùn)行。
嵌入式應(yīng)用軟件的調(diào)試可以使用本地調(diào)試和遠(yuǎn)程調(diào)試兩種方法,相對于操作系統(tǒng)的調(diào)試而言,這兩種方式都比較簡單。如果采用的是本地調(diào)試,首先要將所需的調(diào)試器移植到目標(biāo)系統(tǒng)中,然后就可以直接在目標(biāo)機(jī)上運(yùn)行調(diào)試器來調(diào)試應(yīng)用程序了;如果采用的是遠(yuǎn)程調(diào)試,則需要移植一個調(diào)試服務(wù)器到目標(biāo)系統(tǒng)中,并通過它與宿主機(jī)上的調(diào)試器共同完成應(yīng)用程序的調(diào)試。在嵌入式Linux系統(tǒng)的開發(fā)中,遠(yuǎn)程調(diào)試時目標(biāo)機(jī)上使用的調(diào)試服務(wù)器通常是gdbserver,而宿主機(jī)上使用的調(diào)試器則是gdb,兩者相互配合共同完成調(diào)試過程。
3. 系統(tǒng)測試
嵌入式系統(tǒng)的硬件一般采用專門的測試儀器進(jìn)行測試,而軟件則需要有相關(guān)的測試技術(shù)和測試工具的支持,并要采用特定的測試策略。測試技術(shù)指的是軟件測試的專門途徑,以及能夠更加有效地運(yùn)用這些途徑的特定方法。在嵌入式軟件測試中,常常要在基于目標(biāo)機(jī)的測試和基于宿主機(jī)的測試之間做出折衷,基于目標(biāo)機(jī)的測試需要消耗較多的時間和經(jīng)費(fèi),而基于宿主機(jī)的測試雖然代價較小,但畢竟是在仿真環(huán)境中進(jìn)行的,因此難以完全反映軟件運(yùn)行時的實(shí)際情況。這兩種環(huán)境下的測試可以發(fā)現(xiàn)不同的軟件缺陷,關(guān)鍵是要對目標(biāo)機(jī)環(huán)境和宿主機(jī)環(huán)境下的測試內(nèi)容進(jìn)行合理取舍。
測試工具指的是那些能夠用來輔助測試的工具,測試工具主要用來支持測試人員的測試工作,本身不能直接用來進(jìn)行測試,測試工具一般都是通用工具,測試人員應(yīng)該根據(jù)實(shí)際情況對它們進(jìn)行適當(dāng)?shù)恼{(diào)整。嵌入式軟件測試中經(jīng)常用到測試工具主要有內(nèi)存分析工具、性能分析工具、覆蓋分析工具、缺陷跟蹤工具等。
內(nèi)存分析工具
嵌入式系統(tǒng)的內(nèi)存資源通常是受限的,內(nèi)存分析工具可以用來處理在進(jìn)行動態(tài)內(nèi)存分配時產(chǎn)生的缺陷。當(dāng)動態(tài)分配的內(nèi)存被錯誤地引用時,產(chǎn)生的錯誤通常難以再現(xiàn),可出現(xiàn)的失效難以追蹤,使用內(nèi)存分析工具可以很好地檢測出這類缺陷。目前常用的內(nèi)存分析工具有軟件和硬件兩種,基于軟件的內(nèi)存分析工具可能會對代碼的執(zhí)行性能帶來很大影響,從而影響系統(tǒng)的實(shí)時性;基于硬件的內(nèi)存分析工具價格昂貴,并且只能在特定的環(huán)境中使用。
性能分析工具
嵌入式系統(tǒng)的性能通常是一個非常關(guān)鍵的因素,開發(fā)人員一般需要對系統(tǒng)的某些關(guān)鍵代碼進(jìn)行優(yōu)化來改進(jìn)性能,而首先遇到的問題自然就是確定需要對哪些代碼進(jìn)行優(yōu)化。性能分析工具可以為開發(fā)人員提供有關(guān)的數(shù)據(jù),說明執(zhí)行時間是如何消耗的,是什么時候消耗的,以及每個進(jìn)程所使用的時間。這些數(shù)據(jù)可以幫助確定哪些進(jìn)程消耗了過多的執(zhí)行時間,從而可以決定如何優(yōu)化軟件,以獲得更好的時間性能。此外,性能分析工具還可以引導(dǎo)開發(fā)人員發(fā)現(xiàn)在系統(tǒng)調(diào)用中存在的錯誤以及程序結(jié)構(gòu)上的缺陷。
覆蓋分析工具
在進(jìn)行白盒測試時,可以使用代碼覆蓋分析工具追蹤哪些代碼被執(zhí)行過,分析過程一般通過插樁來完成,插樁可以是在測試環(huán)境中嵌入硬件,也可以是在可執(zhí)行代碼中加入軟件,或者是兩者的結(jié)合。開發(fā)人員通過對分析結(jié)果進(jìn)行總結(jié),可以確定哪些代碼被執(zhí)行過,哪些代碼被遺漏了。目前常用的覆蓋分析工具一般都會提供有關(guān)功能覆蓋、分支覆蓋、條件覆蓋等信息。
本文討論了嵌入式Linux系統(tǒng)的開發(fā)與一般通用計算機(jī)軟件開發(fā)的不同點(diǎn)及應(yīng)該注意的事項(xiàng),這些都是今后在進(jìn)行嵌入式Linux系統(tǒng)開發(fā)時必須具備的基礎(chǔ)知識。