成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

嵌入式Linux開(kāi)發(fā)

系統(tǒng) Linux
嵌入式Linux的開(kāi)發(fā)和研究是Linux領(lǐng)域研究的一個(gè)熱點(diǎn),目前已開(kāi)發(fā)成功的嵌入式系統(tǒng)有一半以上都是Linux。Linux到底有什么優(yōu)勢(shì),使之取得如此輝煌的成績(jī)呢?本文除了講述Linux的優(yōu)勢(shì)以外,還分析了Linux開(kāi)發(fā)的流程、環(huán)境等一系列的內(nèi)容。

  嵌入式Linux開(kāi)發(fā)和研究是Linux領(lǐng)域研究的一個(gè)熱點(diǎn),目前已開(kāi)發(fā)成功的嵌入式系統(tǒng)有一半以上都是Linux。Linux到底有什么優(yōu)勢(shì),使之取得如此輝煌的成績(jī)呢?本文分為兩大部分:Linux的優(yōu)點(diǎn)、Linux開(kāi)發(fā)。

一、Linux的優(yōu)勢(shì):

  廣泛的硬件支持

  Linux能夠支持x86、ARM、MIPS、ALPHA、PowerPC等多種體系結(jié)構(gòu),目前已經(jīng)成功移植到數(shù)十種硬件平臺(tái),幾乎能夠運(yùn)行在所有流行的CPU上。Linux有著異常豐富的驅(qū)動(dòng)程序資源,支持各種主流硬件設(shè)備和***硬件技術(shù),甚至可以在沒(méi)有存儲(chǔ)管理單元(MMU)的處理器上運(yùn)行,這些都進(jìn)一步促進(jìn)了Linux在嵌入式系統(tǒng)中的應(yīng)用。

  內(nèi)核高效穩(wěn)定

  Linux內(nèi)核的高效和穩(wěn)定已經(jīng)在各個(gè)領(lǐng)域內(nèi)得到了大量事實(shí)的驗(yàn)證,Linux的內(nèi)核設(shè)計(jì)非常精巧,分成進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程間通信、虛擬文件系統(tǒng)和網(wǎng)絡(luò)接口五大部分,其獨(dú)特的模塊機(jī)制可以根據(jù)用戶(hù)的需要,實(shí)時(shí)地將某些模塊插入到內(nèi)核或從內(nèi)核中移走。這些特性使得Linux系統(tǒng)內(nèi)核可以裁剪得非常小巧,很適合于嵌入式系統(tǒng)的需要。

  開(kāi)放源碼,軟件豐富

  Linux是開(kāi)放源代碼的自由操作系統(tǒng),它為用戶(hù)提供了***限度的自由度,由于嵌入式系統(tǒng)千差萬(wàn)別,往往需要針對(duì)具體的應(yīng)用進(jìn)行修改和優(yōu)化,因而獲得源代碼就變得至關(guān)重要了。Linux的軟件資源十分豐富,每一種通用程序在Linux上幾乎都可以找到,并且數(shù)量還在不斷增加。在Linux上開(kāi)發(fā)嵌入式應(yīng)用軟件一般不用從頭做起,而是可以選擇一個(gè)類(lèi)似的自由軟件做為原型,在其上進(jìn)行二次開(kāi)發(fā)。

  優(yōu)秀的開(kāi)發(fā)工具

  開(kāi)發(fā)嵌入式系統(tǒng)的關(guān)鍵是需要有一套完善的開(kāi)發(fā)和調(diào)試工具。傳統(tǒng)的嵌入式開(kāi)發(fā)調(diào)試工具是在線仿真器(In-Circuit Emulator,ICE),它通過(guò)取代目標(biāo)板的微處理器,給目標(biāo)程序提供一個(gè)完整的仿真環(huán)境,從而使開(kāi)發(fā)者能夠非常清楚地了解到程序在目標(biāo)板上的工作狀態(tài),便于監(jiān)視和調(diào)試程序。在線仿真器的價(jià)格非常昂貴,而且只適合做非常底層的調(diào)試,如果使用的是嵌入式Linux,一旦軟硬件能夠支持正常的串口功能時(shí),即使不用在線仿真器也可以很好地進(jìn)行開(kāi)發(fā)和調(diào)試工作,從而節(jié)省了一筆不小的開(kāi)發(fā)費(fèi)用。嵌入式Linux為開(kāi)發(fā)者提供了一套完整的工具鏈(Tool Chain),它利用GNU的gcc做編譯器,用gdb、kgdb、xgdb做調(diào)試工具,能夠很方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個(gè)級(jí)別的調(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),這些都為開(kāi)發(fā)嵌入式系統(tǒng)應(yīng)用打下了很好的基礎(chǔ)。

二、嵌入式Linux開(kāi)發(fā)技術(shù):

  嵌入式系統(tǒng)是一種根據(jù)特定用途所專(zhuān)門(mén)開(kāi)發(fā)的系統(tǒng),它只完成預(yù)期要完成的功能,因此其開(kāi)發(fā)過(guò)程和開(kāi)發(fā)環(huán)境同傳統(tǒng)的軟件開(kāi)發(fā)相比有著顯著的不同。

1.開(kāi)發(fā)流程

  在嵌入式系統(tǒng)的應(yīng)用開(kāi)發(fā)中,整個(gè)系統(tǒng)的開(kāi)發(fā)過(guò)程如圖2所示:

  圖2 嵌入式系統(tǒng)的開(kāi)發(fā)流程

  

嵌入式/Linux/開(kāi)發(fā)

 

  嵌入式系統(tǒng)發(fā)展到今天,對(duì)應(yīng)于各種微處理器的硬件平臺(tái)一般都是通用的、固定的、成熟的,這就大大減少了由硬件系統(tǒng)引入錯(cuò)誤的機(jī)會(huì)。此外,由于嵌入式操作系統(tǒng)屏蔽了底層硬件的復(fù)雜性,使得開(kāi)發(fā)者通過(guò)操作系統(tǒng)提供的API函數(shù)就可以完成大部分工作,因此大大簡(jiǎn)化了開(kāi)發(fā)過(guò)程,提高了系統(tǒng)的穩(wěn)定性。嵌入式系統(tǒng)的開(kāi)發(fā)者現(xiàn)在已經(jīng)從反復(fù)進(jìn)行硬件平臺(tái)設(shè)計(jì)的過(guò)程中解脫出來(lái),從而可以將主要精力放在滿(mǎn)足特定的需求上。

  嵌入式系統(tǒng)通常是一個(gè)資源受限的系統(tǒng),因此直接在嵌入式系統(tǒng)的硬件平臺(tái)上編寫(xiě)軟件比較困難,有時(shí)候甚至是不可能的。目前一般采用的解決辦法是首先在通用計(jì)算機(jī)上編寫(xiě)程序,然后通過(guò)交叉編譯生成目標(biāo)平臺(tái)上可以運(yùn)行的二進(jìn)制代碼格式,***再下載到目標(biāo)平臺(tái)上的特定位置上運(yùn)行。

  需要交叉開(kāi)發(fā)環(huán)境(Cross Development Environment)的支持是嵌入式應(yīng)用軟件開(kāi)發(fā)時(shí)的一個(gè)顯著特點(diǎn),交叉開(kāi)發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境,它與運(yùn)行嵌入式應(yīng)用軟件的環(huán)境有所不同,通常采用宿主機(jī)/目標(biāo)機(jī)模式,如圖3所示。

  圖3 交叉開(kāi)發(fā)環(huán)境

  

 

嵌入式/Linux/開(kāi)發(fā)

  宿主機(jī)(Host)是一臺(tái)通用計(jì)算機(jī)(如PC機(jī)或者工作站),它通過(guò)串口或者以太網(wǎng)接口與目標(biāo)機(jī)通信。宿主機(jī)的軟硬件資源比較豐富,不但包括功能強(qiáng)大的操作系統(tǒng)(如Windows和Linux),而且還有各種各樣優(yōu)秀的開(kāi)發(fā)工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能夠大大提高嵌入式應(yīng)用軟件的開(kāi)發(fā)速度和效率。

  目標(biāo)機(jī)(Target)一般在嵌入式應(yīng)用軟件開(kāi)發(fā)期間使用,用來(lái)區(qū)別與嵌入式系統(tǒng)通信的宿主機(jī),它可以是嵌入式應(yīng)用軟件的實(shí)際運(yùn)行環(huán)境,也可以是能夠替代實(shí)際運(yùn)行環(huán)境的仿真系統(tǒng),但軟硬件資源通常都比較有限。嵌入式系統(tǒng)的交叉開(kāi)發(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ī)模式開(kāi)發(fā)嵌入式應(yīng)用軟件時(shí),首先利用宿主機(jī)上豐富的資源和良好的開(kāi)發(fā)環(huán)境開(kāi)發(fā)和仿真調(diào)試目標(biāo)機(jī)上的軟件,然后通過(guò)串口或者以網(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)行。

  建立交叉開(kāi)發(fā)環(huán)境是進(jìn)行嵌入式軟件開(kāi)發(fā)的***步,目前常用的交叉開(kāi)發(fā)環(huán)境主要有開(kāi)放和商業(yè)兩種類(lèi)型。開(kāi)放的交叉開(kāi)發(fā)環(huán)境的典型代表是GNU工具鏈、目前已經(jīng)能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業(yè)的交叉開(kāi)發(fā)環(huán)境則主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。

2. 交叉編譯和鏈接

  在完成嵌入式軟件的編碼之后,需要進(jìn)行編譯和鏈接以生成可執(zhí)行代碼,由于開(kāi)發(fā)過(guò)程大多是在使用Intel公司x86系列CPU的通用計(jì)算機(jī)上進(jìn)行的,而目標(biāo)環(huán)境的處理器芯片卻大多為ARM、MIPS、PowerPC、DragonBall等系列的微處理器,這就要求在建立好的交叉開(kāi)發(fā)環(huán)境中進(jìn)行交叉編譯和鏈接。

  交叉編譯器和交叉鏈接器是能夠在宿主機(jī)上運(yùn)行,并且能夠生成在目標(biāo)機(jī)上直接運(yùn)行的二進(jìn)制代碼的編譯器和鏈接器。例如在基于ARM體系結(jié)構(gòu)的gcc交叉開(kāi)發(fā)環(huán)境中,arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。通常情況下,并不是每一種體系結(jié)構(gòu)的嵌入式微處理器都只對(duì)應(yīng)于一種交叉編譯器和交叉鏈接器,比如對(duì)于M68K體系結(jié)構(gòu)的gcc交叉開(kāi)發(fā)環(huán)境而言,就對(duì)應(yīng)于多種不同的編譯器和鏈接器。如果使用的是COFF格式的可執(zhí)行文件,那么在編譯Linux內(nèi)核時(shí)需要使用m68k-coff-gcc和m68k-coff-ld,而在編譯應(yīng)用程序時(shí)則需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。

  嵌入式系統(tǒng)在鏈接過(guò)程中通常都要求使用較小的函數(shù)庫(kù),以便***產(chǎn)生的可執(zhí)行代碼能夠盡可能地小,因此實(shí)際運(yùn)用時(shí)一般使用經(jīng)過(guò)特殊處理的函數(shù)庫(kù)。對(duì)于嵌入式Linux系統(tǒng)來(lái)講,功能越來(lái)越強(qiáng)、體積越來(lái)越大的C語(yǔ)言函數(shù)庫(kù)glibc和數(shù)學(xué)函數(shù)庫(kù)libm已經(jīng)很難滿(mǎn)足實(shí)際的需要,因此需要采用它們的精化版本uClibc、uClibm和newlib等。

  目前嵌入式的集成開(kāi)發(fā)環(huán)境都支持交叉編譯和交叉鏈接,如WindRiver Tornado和GNU工具鏈等,編寫(xiě)好的嵌入式軟件經(jīng)過(guò)交叉編譯和交叉鏈接后通常會(huì)生成兩種類(lèi)型的可執(zhí)行文件:用于調(diào)試的可執(zhí)行文件和用于固化的可執(zhí)行文件。

3. 交叉調(diào)試

  嵌入式軟件經(jīng)過(guò)編譯和鏈接后即進(jìn)入調(diào)試階段,調(diào)試是軟件開(kāi)發(fā)過(guò)程中必不可少的一個(gè)環(huán)節(jié),嵌入式軟件開(kāi)發(fā)過(guò)程中的交叉調(diào)試與通用軟件開(kāi)發(fā)過(guò)程中的調(diào)試方式有所差別。在通用軟件開(kāi)發(fā)中,調(diào)試器與被調(diào)試的程序往往運(yùn)行在同一臺(tái)計(jì)算機(jī)上,調(diào)試器是一個(gè)單獨(dú)運(yùn)行著的進(jìn)程,它通過(guò)操作系統(tǒng)提供的調(diào)試接口來(lái)控制被調(diào)試的進(jìn)程。而在嵌入式軟件開(kāi)發(fā)中,調(diào)試時(shí)采用的是在宿主機(jī)和目標(biāo)機(jī)之間進(jìn)行的交叉調(diào)試,調(diào)試器仍然運(yùn)行在宿主機(jī)的通用操作系統(tǒng)之上,但被調(diào)試的進(jìn)程卻是運(yùn)行在基于特定硬件平臺(tái)的嵌入式操作系統(tǒng)中,調(diào)試器和被調(diào)試進(jìn)程通過(guò)串口或者網(wǎng)絡(luò)進(jìn)行通信,調(diào)試器可以控制、訪問(wèn)被調(diào)試進(jìn)程,讀取被調(diào)試進(jìn)程的當(dāng)前狀態(tài),并能夠改變被調(diào)試進(jìn)程的運(yùn)行狀態(tài)。

  交叉調(diào)試(Cross Debug)又常常被稱(chēng)為遠(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)試過(guò)程的結(jié)構(gòu)如圖4所示。

  圖4遠(yuǎn)程調(diào)試結(jié)構(gòu)

  

 

嵌入式/Linux/開(kāi)發(fā)

  嵌入式系統(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)行在各種專(zhuān)業(yè)調(diào)試板上(目標(biāo)機(jī))。

  調(diào)試器通過(guò)某種通信方式與被調(diào)試進(jìn)程建立聯(lián)系,如串口、并口、網(wǎng)絡(luò)、DBM、JTAG或者專(zhuān)用的通信方式。

  在目標(biāo)機(jī)上一般會(huì)具備某種形式的調(diào)試代理,它負(fù)責(zé)與調(diào)試器共同配合完成對(duì)目標(biāo)機(jī)上運(yùn)行著的進(jìn)程的調(diào)試。這種調(diào)試代理可能是某些支持調(diào)試功能的硬件設(shè)備(如DBI 2000),也可能是某些專(zhuān)門(mén)的調(diào)試軟件(如gdbserver)。

  目標(biāo)機(jī)可能是某種形式的系統(tǒng)仿真器,通過(guò)在宿主機(jī)上運(yùn)行目標(biāo)機(jī)的仿真軟件,整個(gè)調(diào)試過(guò)程可以在一臺(tái)計(jì)算機(jī)上運(yùn)行。此時(shí)物理上雖然只有一臺(tái)計(jì)算機(jī),但邏輯上仍然存在著宿主機(jī)和目標(biāo)機(jī)的區(qū)別。

  在嵌入式軟件開(kāi)發(fā)過(guò)程中的調(diào)試方式有很多種,應(yīng)根據(jù)實(shí)際的開(kāi)發(fā)要求和條件進(jìn)行選擇。就調(diào)試方法而言,嵌入式系統(tǒng)的交叉調(diào)試可以分為硬件調(diào)試和軟件調(diào)試兩種,前者使用仿真調(diào)試器協(xié)助調(diào)試過(guò)程,而后者則使用軟件調(diào)試器完成調(diào)試過(guò)程。

  硬件調(diào)試

  相對(duì)于軟件調(diào)試而言,使用硬件調(diào)試器可以獲得更強(qiáng)大的調(diào)試功能和更優(yōu)秀的調(diào)試性能。硬件調(diào)試器的基本原理是通過(guò)仿真硬件的執(zhí)行過(guò)程,讓開(kāi)發(fā)者在調(diào)試時(shí)可以隨時(shí)了解到系統(tǒng)的當(dāng)前執(zhí)行情況。目前嵌入式系統(tǒng)開(kāi)發(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ī)通過(guò)調(diào)試器與目標(biāo)機(jī)上的ROM監(jiān)視器建立通信連接,它們之間的通信遵循遠(yuǎn)程調(diào)試協(xié)議。ROM監(jiān)視器可以是一段運(yùn)行在目標(biāo)機(jī)ROM上的可執(zhí)行程序,也可以是一個(gè)專(zhuān)門(mén)的硬件調(diào)試設(shè)備,它負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行情況,能夠與宿主機(jī)端的調(diào)試器一同完成對(duì)應(yīng)用程序的調(diào)試。在使用這種調(diào)試方式時(shí),被調(diào)試程序首先通過(guò)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)試時(shí)需要使用ROM仿真器,它通常被插入到目標(biāo)機(jī)上的ROM插槽中,專(zhuān)門(mén)用于仿真目標(biāo)機(jī)上的ROM芯片。在使用這種調(diào)試方式時(shí),被調(diào)試程序首先下載到ROM仿真器中,它等效于下載到目標(biāo)機(jī)的ROM芯片上,然后在ROM仿真器中完成對(duì)目標(biāo)程序的調(diào)試。ROM Emulator調(diào)試方式通過(guò)使用一個(gè)ROM仿真器,雖然避免了每次修改程序后都必須重新燒寫(xiě)到目標(biāo)機(jī)ROM中這一費(fèi)時(shí)費(fèi)力的操作,但由于ROM仿真器本身比較昂貴,功能相對(duì)來(lái)講又比較單一,因此只適應(yīng)于某些特定場(chǎng)合。

  采用In-Circuit Emulator(ICE)方式進(jìn)行交叉調(diào)試時(shí)需要使用在線仿真器,它是仿照目標(biāo)機(jī)上的CPU而專(zhuān)門(mén)設(shè)計(jì)的硬件,可以完全仿真處理器芯片的行為,并且提供了非常豐富的調(diào)試功能。在使用在線仿真器進(jìn)行調(diào)試的過(guò)程中,可以按順序單步執(zhí)行,也可以倒退執(zhí)行,還可以實(shí)時(shí)查看所有需要的數(shù)據(jù),從而給調(diào)試過(guò)程帶來(lái)了很多的便利。嵌入式系統(tǒng)應(yīng)用的一個(gè)顯著特點(diǎn)是與現(xiàn)實(shí)世界中的硬件直接相關(guān),存在各種異變和事先未知的變化,從而給微處理器的指令執(zhí)行帶來(lái)各種不確定因素,這種不確定性在目前情況下只有通過(guò)在線仿真器才有可能發(fā)現(xiàn),因此盡管在線仿真器的價(jià)格非常昂貴,但仍然得到了非常廣泛的應(yīng)用。

  采用In-Circuit Debugger(ICD)方式進(jìn)行交叉調(diào)試時(shí)需要使用在線調(diào)試器。由于ICE的價(jià)格非常昂貴,并且每種CPU都需要一種與之對(duì)應(yīng)的ICE,使得開(kāi)發(fā)成本非常高,一個(gè)比較好的解決辦法是讓CPU直接在其內(nèi)部實(shí)現(xiàn)調(diào)試功能,并通過(guò)在開(kāi)發(fā)板上引出的調(diào)試端口,發(fā)送調(diào)試命令和接收調(diào)試信息,完成調(diào)試過(guò)程。目前Motorola公司提供的開(kāi)發(fā)板上使用的是DBM調(diào)試端口,而ARM公司提供的開(kāi)發(fā)板上使用的則是JTAG調(diào)試端口,使用合適的軟件工具與這些調(diào)試端口進(jìn)行連接,可以獲得與ICE類(lèi)似的調(diào)試效果。

  軟件調(diào)試

  軟件調(diào)試通常要在不同的層次上進(jìn)行,有時(shí)可能需要對(duì)嵌入式操作系統(tǒng)的內(nèi)核進(jìn)行調(diào)試,而有時(shí)可能僅僅只需要調(diào)試嵌入式應(yīng)用程序就可以了。在嵌入式系統(tǒng)的整個(gè)開(kāi)發(fā)過(guò)程中,不同層次上的軟件調(diào)試需要使用不同的調(diào)試方法。

  嵌入式操作系統(tǒng)的內(nèi)核調(diào)試相對(duì)來(lái)講比較困難,這是因?yàn)樵趦?nèi)核中不便于增加一個(gè)調(diào)試器程序,而只能通過(guò)遠(yuǎn)程調(diào)試的方法,通過(guò)串口和操作系統(tǒng)內(nèi)置的"調(diào)試樁"(debug stub)進(jìn)行通信,共同完成調(diào)試過(guò)程。調(diào)試樁可以看成是一個(gè)調(diào)試服務(wù)器,它通過(guò)操作系統(tǒng)獲得一些必要的調(diào)試信息,并且負(fù)責(zé)處理宿主機(jī)發(fā)送來(lái)的調(diào)試命令。具體到嵌入式Linux系統(tǒng)內(nèi)核,調(diào)試時(shí)可以先在Linux內(nèi)核中設(shè)置一個(gè)調(diào)試樁,用作調(diào)試過(guò)程中和宿主機(jī)之間的通信服務(wù)器,然后就可以在宿主機(jī)中通過(guò)調(diào)試器的串口與調(diào)試樁進(jìn)行通信,并通過(guò)調(diào)試器控制目標(biāo)機(jī)上Linux內(nèi)核的運(yùn)行。

  嵌入式應(yīng)用軟件的調(diào)試可以使用本地調(diào)試和遠(yuǎn)程調(diào)試兩種方法,相對(duì)于操作系統(tǒng)的調(diào)試而言,這兩種方式都比較簡(jiǎn)單。如果采用的是本地調(diào)試,首先要將所需的調(diào)試器移植到目標(biāo)系統(tǒng)中,然后就可以直接在目標(biāo)機(jī)上運(yùn)行調(diào)試器來(lái)調(diào)試應(yīng)用程序了;如果采用的是遠(yuǎn)程調(diào)試,則需要移植一個(gè)調(diào)試服務(wù)器到目標(biāo)系統(tǒng)中,并通過(guò)它與宿主機(jī)上的調(diào)試器共同完成應(yīng)用程序的調(diào)試。在嵌入式Linux系統(tǒng)的開(kāi)發(fā)中,遠(yuǎn)程調(diào)試時(shí)目標(biāo)機(jī)上使用的調(diào)試服務(wù)器通常是gdbserver,而宿主機(jī)上使用的調(diào)試器則是gdb,兩者相互配合共同完成調(diào)試過(guò)程。

3. 系統(tǒng)測(cè)試

  嵌入式系統(tǒng)的硬件一般采用專(zhuān)門(mén)的測(cè)試儀器進(jìn)行測(cè)試,而軟件則需要有相關(guān)的測(cè)試技術(shù)和測(cè)試工具的支持,并要采用特定的測(cè)試策略。測(cè)試技術(shù)指的是軟件測(cè)試的專(zhuān)門(mén)途徑,以及能夠更加有效地運(yùn)用這些途徑的特定方法。在嵌入式軟件測(cè)試中,常常要在基于目標(biāo)機(jī)的測(cè)試和基于宿主機(jī)的測(cè)試之間做出折衷,基于目標(biāo)機(jī)的測(cè)試需要消耗較多的時(shí)間和經(jīng)費(fèi),而基于宿主機(jī)的測(cè)試雖然代價(jià)較小,但畢竟是在仿真環(huán)境中進(jìn)行的,因此難以完全反映軟件運(yùn)行時(shí)的實(shí)際情況。這兩種環(huán)境下的測(cè)試可以發(fā)現(xiàn)不同的軟件缺陷,關(guān)鍵是要對(duì)目標(biāo)機(jī)環(huán)境和宿主機(jī)環(huán)境下的測(cè)試內(nèi)容進(jìn)行合理取舍。

  測(cè)試工具指的是那些能夠用來(lái)輔助測(cè)試的工具,測(cè)試工具主要用來(lái)支持測(cè)試人員的測(cè)試工作,本身不能直接用來(lái)進(jìn)行測(cè)試,測(cè)試工具一般都是通用工具,測(cè)試人員應(yīng)該根據(jù)實(shí)際情況對(duì)它們進(jìn)行適當(dāng)?shù)恼{(diào)整。嵌入式軟件測(cè)試中經(jīng)常用到測(cè)試工具主要有內(nèi)存分析工具、性能分析工具、覆蓋分析工具、缺陷跟蹤工具等。

  內(nèi)存分析工具

  嵌入式系統(tǒng)的內(nèi)存資源通常是受限的,內(nèi)存分析工具可以用來(lái)處理在進(jìn)行動(dòng)態(tài)內(nèi)存分配時(shí)產(chǎn)生的缺陷。當(dāng)動(dòng)態(tài)分配的內(nèi)存被錯(cuò)誤地引用時(shí),產(chǎn)生的錯(cuò)誤通常難以再現(xiàn),可出現(xiàn)的失效難以追蹤,使用內(nèi)存分析工具可以很好地檢測(cè)出這類(lèi)缺陷。目前常用的內(nèi)存分析工具有軟件和硬件兩種,基于軟件的內(nèi)存分析工具可能會(huì)對(duì)代碼的執(zhí)行性能帶來(lái)很大影響,從而影響系統(tǒng)的實(shí)時(shí)性;基于硬件的內(nèi)存分析工具價(jià)格昂貴,并且只能在特定的環(huán)境中使用。

  性能分析工具

  嵌入式系統(tǒng)的性能通常是一個(gè)非常關(guān)鍵的因素,開(kāi)發(fā)人員一般需要對(duì)系統(tǒng)的某些關(guān)鍵代碼進(jìn)行優(yōu)化來(lái)改進(jìn)性能,而首先遇到的問(wèn)題自然就是確定需要對(duì)哪些代碼進(jìn)行優(yōu)化。性能分析工具可以為開(kāi)發(fā)人員提供有關(guān)的數(shù)據(jù),說(shuō)明執(zhí)行時(shí)間是如何消耗的,是什么時(shí)候消耗的,以及每個(gè)進(jìn)程所使用的時(shí)間。這些數(shù)據(jù)可以幫助確定哪些進(jìn)程消耗了過(guò)多的執(zhí)行時(shí)間,從而可以決定如何優(yōu)化軟件,以獲得更好的時(shí)間性能。此外,性能分析工具還可以引導(dǎo)開(kāi)發(fā)人員發(fā)現(xiàn)在系統(tǒng)調(diào)用中存在的錯(cuò)誤以及程序結(jié)構(gòu)上的缺陷。

  覆蓋分析工具

  在進(jìn)行白盒測(cè)試時(shí),可以使用代碼覆蓋分析工具追蹤哪些代碼被執(zhí)行過(guò),分析過(guò)程一般通過(guò)插樁來(lái)完成,插樁可以是在測(cè)試環(huán)境中嵌入硬件,也可以是在可執(zhí)行代碼中加入軟件,或者是兩者的結(jié)合。開(kāi)發(fā)人員通過(guò)對(duì)分析結(jié)果進(jìn)行總結(jié),可以確定哪些代碼被執(zhí)行過(guò),哪些代碼被遺漏了。目前常用的覆蓋分析工具一般都會(huì)提供有關(guān)功能覆蓋、分支覆蓋、條件覆蓋等信息。

  本文討論了嵌入式Linux系統(tǒng)的開(kāi)發(fā)與一般通用計(jì)算機(jī)軟件開(kāi)發(fā)的不同點(diǎn)及應(yīng)該注意的事項(xiàng),這些都是今后在進(jìn)行嵌入式Linux系統(tǒng)開(kāi)發(fā)時(shí)必須具備的基礎(chǔ)知識(shí)。

責(zé)任編輯:zhaolei
相關(guān)推薦

2011-01-06 15:11:09

嵌入式linux

2011-06-13 14:00:55

Qt Designer linux

2010-01-13 09:51:21

微軟Linux嵌入式

2009-07-17 16:06:59

ARM嵌入式開(kāi)發(fā)

2009-12-09 10:12:28

嵌入式Linux

2009-12-17 10:33:05

嵌入式Linux

2009-12-16 15:41:40

嵌入式Linux入門(mén)

2011-08-16 16:32:13

Linux驅(qū)動(dòng)程序

2009-06-11 11:09:02

Linux嵌入式開(kāi)發(fā)環(huán)境

2010-01-13 09:15:35

嵌入式

2011-07-05 15:42:02

QT 嵌入式 Embedded

2021-10-26 21:50:10

Rust嵌入式開(kāi)發(fā)

2009-12-23 16:52:26

Linux自學(xué)嵌入式

2009-12-09 10:50:53

嵌入式Linux

2010-09-25 15:05:49

LINUXJVM

2022-01-04 22:19:38

Linux開(kāi)發(fā)嵌入式

2009-12-24 17:21:38

嵌入式Linux

2022-01-03 23:33:40

Linux組件系統(tǒng)

2021-12-19 22:34:45

Linux容器系統(tǒng)

2009-12-23 10:33:30

Silverlight
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 黄色免费观看网站 | 欧美成人猛片aaaaaaa | 亚洲一区二区三区视频 | 午夜视频在线 | 亚洲精品视 | 国产在线观| 天天澡天天狠天天天做 | 日韩一区二区在线视频 | 欧美一区二区三区在线 | 91精品国产高清一区二区三区 | 天天综合国产 | 午夜电影福利 | 日本黄色激情视频 | 91日韩在线 | 国产三级日本三级 | 日韩成人在线播放 | 欧美高清性xxxxhd | 九九热精| 激情欧美一区二区三区 | 日韩成人在线电影 | 在线黄色网 | 91欧美精品| 日本一区二区高清不卡 | 中文字幕亚洲视频 | 精品国产一区二区三区成人影院 | 中文字幕日韩欧美一区二区三区 | 91av久久久| 国产亚洲精品91 | 免费av观看| 日韩欧美三级电影 | 黄网免费 | 91精品福利 | 日韩电影中文字幕 | 中文字幕一区二区三区四区五区 | 亚洲精品久久久9婷婷中文字幕 | 国产最新视频在线 | 国产黄色网 | 中文字幕二区三区 | japanhd美女动 | 色婷婷九月 | 狠狠久久综合 |