1.引言
嵌入式Linux是一種開放源碼的真正32位的操作系統(tǒng),,并且可以進(jìn)行裁減和優(yōu)化,,性能穩(wěn)定,并且支持多任務(wù)和軟實時,,所以深受開發(fā)者的信賴,。它支持從IntelX86到MotorolaPowerPC,ARM,CompaqAlpha等多種硬件平臺,,并且提供了豐富的軟件資源,,具有強大的網(wǎng)絡(luò)支持功能,支持GUI開發(fā),,并且嵌入式Linux的開發(fā)技術(shù)資源豐富,。如何管理各個應(yīng)用在系統(tǒng)中無沖突安全地工作?如何把開發(fā)的系統(tǒng)快速的轉(zhuǎn)化為可發(fā)布的產(chǎn)品,?如何優(yōu)化和管理嵌入式系統(tǒng)的開發(fā)過程,,保證在有限的工期之內(nèi)完成高質(zhì)量的產(chǎn)品,?使用平臺創(chuàng)建套件(PCS)來開發(fā)嵌入式Linux應(yīng)用可以很好地解決這些問題。
2.平臺創(chuàng)建套件介紹
平臺創(chuàng)建套件(PlatformCreationSuit)是由Metrowerks公司開發(fā)的一套專門用于進(jìn)行嵌入式Linux應(yīng)用的一套系統(tǒng),,它提供的主要功能有:配置操作系統(tǒng),,開發(fā)自己的應(yīng)用,自動編譯(Build),,部署(Deploy),調(diào)試(Debug),檢查許可文件,,集成新的軟件等等。
平臺創(chuàng)建套件包含三個主要的組成部分:
目標(biāo)向?qū)Чぞ?TargetWizardTools),用來管理,,配置,,擴展,生成和部署傳統(tǒng)的開放源碼的Linux軟件元素,,來全面的支持目標(biāo)產(chǎn)品的需要,。如圖一。目標(biāo)向?qū)Чぞ咛峁┝藬U展基本的Linux環(huán)境的功能,,它允許集成千萬種可下載的開放源代碼和二進(jìn)制應(yīng)用,,GNU工具集,新的Linux內(nèi)核,,或者用來提高內(nèi)核功能的改進(jìn)的設(shè)備支持,,安全,實時性能,,服務(wù)質(zhì)量(QOS)和網(wǎng)絡(luò)等部件,。
CodeWarrior可視化開發(fā)環(huán)境,用來進(jìn)行項目管理,,創(chuàng)建和生成嵌入式Linux應(yīng)用軟件,。CodeWarrior可視化開發(fā)環(huán)境是一個非常優(yōu)秀的可視化開發(fā)工具,包括編輯環(huán)境,,調(diào)試環(huán)境和項目管理功能,,快速開發(fā)工具,等等,。因為CodeWarrior可視化開發(fā)環(huán)境已被眾多的嵌入式應(yīng)用開發(fā)人員所熟悉,,這里不再詳細(xì)介紹。
板極支持包工具(BoardSupportPackage),包括用來創(chuàng)建,,部署和調(diào)試操作系統(tǒng),,驅(qū)動程序,和針對目標(biāo)硬件平臺的應(yīng)用所需要的所有元素,,通常一個BSP中包括Linux內(nèi)核,,設(shè)備驅(qū)動程序,應(yīng)用和服務(wù),,各種類庫,,GNU工具集(編譯器,,連接器,等等),,部署向?qū)У鹊取?/p>
圖一:平臺創(chuàng)建套件
這張圖是PCS中最常用的模塊:TargetWizard的界面,。在TargetWizard中所有的部件都以樹型結(jié)構(gòu)顯示,部件的圖標(biāo)表明它的狀態(tài),,這樣整個系統(tǒng)中各個部件及其狀態(tài)都一目了然,。開發(fā)者可以很方便的對部件進(jìn)行裁減,只要通過簡單菜單操作來打開(Enable)和關(guān)閉(Disable)就可以對系統(tǒng)中的部件進(jìn)行配置,。PCS會自動管理各個部件之間的依賴和沖突關(guān)系,這就避免了開發(fā)者在研究部件依賴關(guān)系和解決部件沖突的時候花費大量的時間,。開發(fā)者在打開一個部件的時候,如果它所依賴的部件并沒有打開,,那么在狀態(tài)窗口中會顯示出這個部件的依賴信息,開發(fā)者可以根據(jù)這些信息逐一地解決,。當(dāng)有沖突的時候,,在狀態(tài)窗口中會顯示出具體的沖突信息,開發(fā)者可以順利地解決問題,。在沒有沖突檢測的情況下,,開發(fā)者可能意識不到?jīng)_突的存在,而直到運行的時候才發(fā)現(xiàn)沖突的存在,PCS在很大程度上避免了類似問題的發(fā)生,。
TargetWizard同時與其它的功能模塊緊密相連,,PackageEditor是一個可視化的環(huán)境來導(dǎo)入新的驅(qū)動程序、應(yīng)用和庫文件,PCS同時也提供了手動方式來完成這些功能的方法;LinuxKernelImportTool可以用來導(dǎo)入新的Kernel;GNUToolchainImportTool可以用來導(dǎo)入新的toolchain;DebianBinaryImportTool允許開發(fā)者下載并導(dǎo)入多種公開發(fā)布的DebianGNU/Linux二進(jìn)制應(yīng)用程序;ExportBSPtool可以用來導(dǎo)出BSP,是生成BSP的工具;SkeletonDeploymentWizard是可以設(shè)置一些通用屬性的部署工具;GDB(GNUDebugger)和DDD(DataDisplayDebugger)是目標(biāo)鏡像文件已經(jīng)部署到目標(biāo)板上的調(diào)試工具,。
3.基于平臺創(chuàng)建套件的嵌入式Linux應(yīng)用的開發(fā)過程
進(jìn)行嵌入式Linux的開發(fā)大致都采用以下的開發(fā)過程:
1.基于功能需求選擇一個目標(biāo)板(MCG,Force,PC104,PPC,等等)或者根據(jù)需求選擇一個處理器(購買一個評估開發(fā)板)和外圍芯片,,定制目標(biāo)板。
2.定制和配置操作系統(tǒng),。
3.開發(fā)定制的應(yīng)用,。
4.重新配置軟件,進(jìn)行部署,。
5.維護(hù)軟件,。
使用平臺創(chuàng)建套件(PCS)可以加速整個嵌入式系統(tǒng)的開發(fā)過程。下面介紹使用平臺創(chuàng)建套件(PCS)進(jìn)行嵌入式系統(tǒng)開發(fā)可以采用的詳細(xì)的開發(fā)過程,。
•評估硬件和軟件
根據(jù)功能需求購買評估目標(biāo)板或定制目標(biāo)板,,并準(zhǔn)備開始進(jìn)行自己的設(shè)計。
•安裝PCS和BSP
現(xiàn)在最新的PCS版本是3.0,它可以運行在很多主流X86Linux平臺上,,其中包括RedHat9.0,RedHat8.0,SuSe8.2,SuSe8.1,Debian3.0,。Metrowerks提供了很多種平臺的參考BSP(BoardSupportPackage,板極支持包),包括X86,MotorolaPowerPC,MIPS,ToshibaTx,ARM,ColdFire,HitachiSH等多個系統(tǒng)的BSP。
•為目標(biāo)板創(chuàng)建一個項目
基于BSP創(chuàng)建一個新的項目,。PCS有一套非常優(yōu)秀的BSP管理系統(tǒng),,幫助開發(fā)者在同一個開發(fā)環(huán)境里同時存在互相不干擾的不同的目標(biāo)板項目,,每個不同的BSP中包含不同的Linux內(nèi)核和工具鏈,為項目提供交叉編譯環(huán)境,。PCS提供了一套界面非常友好的項目創(chuàng)建項目向?qū)?,幫助開發(fā)者選定BSP和進(jìn)行項目設(shè)置。選擇已經(jīng)存在的配置狀態(tài)文件,,或者使用默認(rèn)的配置狀態(tài)文件,。不同的配置狀態(tài)文件可以保證開發(fā)者在同一個項目中有不同的配置,這樣用戶可以很方便的不同的配置中切換,,而不用重新進(jìn)行配置,。下一步是進(jìn)行內(nèi)核裁減配置。大多數(shù)BSP已經(jīng)提供了一個默認(rèn)的內(nèi)核配置,,可是根據(jù)功能需求的不同開發(fā)者經(jīng)常需要自己進(jìn)行內(nèi)核的裁減工作,。在PCS中進(jìn)行內(nèi)核的裁減是相對簡單的多的事情,開發(fā)者不需要使用繁瑣的文本菜單進(jìn)行配置和手動編譯內(nèi)核,。
•軟件包配置
PCS中包含了幾十個通用的常用軟件包,,避免了開發(fā)者到處尋找的煩惱。用戶可以通過PCS自帶的PackageEditor工具導(dǎo)入自己需要的軟件包,。開發(fā)者可以在PCS中進(jìn)行軟件包的配置,,例如打開guilibrary,關(guān)閉webserver等工作都可以輕松完成。
在PCS中進(jìn)行軟件包的配置是非常簡單的,,只需要在軟件包的上下文菜單中選擇即可,。
圖二:軟件包配置
編譯這個項目
PCS允許開發(fā)者按照自己的期望來對Linux部件進(jìn)行編譯。開發(fā)者可以只編譯那些上次編譯之后重新配置的部件,,也可以強制編譯項目所包含的全部的部件,,不管是否已經(jīng)編譯過。
•部署Linuxloader和開發(fā)包到板上
對于已經(jīng)存在的SBC,應(yīng)該已經(jīng)提供了這些軟件包,。對于定制的目標(biāo)板還需要做下面的工作:用于目標(biāo)板的bootload固件,,板上bring-up,遠(yuǎn)程bootload等。這樣就完成了開發(fā)模式下最小板上環(huán)境,。
•完成新的驅(qū)動程序
如果功能需求需要的話,,開發(fā)者要完成為目標(biāo)板的特定硬件驅(qū)動程序。
•開發(fā)應(yīng)用
開發(fā)者開發(fā)運行在目標(biāo)板上的應(yīng)用,,開發(fā)者可以使用隨同PCS一同發(fā)布的CodewarriorIDE進(jìn)行應(yīng)用的開發(fā)和調(diào)試,。
•重新配置:由開發(fā)模式轉(zhuǎn)換到產(chǎn)品模式
修改目標(biāo)板固件:
支持本地bootload。
支持本地根文件系統(tǒng),,通常將根文件設(shè)置為只讀模式,。
去除開發(fā)用的遺留部件:
去除調(diào)試工具。
去除用于方便開發(fā)而導(dǎo)入的無用部件。
去除無用的類庫,,只保留需要的那部分,。
為啟動特殊的應(yīng)用而改變啟動過程。
最終產(chǎn)品測試,。
•部署最終產(chǎn)品,,發(fā)布產(chǎn)品。
軟件的部署是一個比較復(fù)雜的過程,,但是PCS提供了一個非常方便的部署向?qū)?,可以在很大的程度上減少部署的工作量。部署的過程包括為目標(biāo)板生成嵌入式鏡像文件,,然后部署到目標(biāo)板上,。在部署之前需要使用PCS提供的交叉編譯環(huán)境對所有的軟件包進(jìn)行編譯。PCS會幫助開發(fā)者生成系統(tǒng)的鏡像文件,,包括生成文件系統(tǒng),,轉(zhuǎn)換格式使得鏡像文件可以下載到目標(biāo)板上。PCS提供了一個擴展性很好的策略,,就是開發(fā)者可以開發(fā)自己的部署向?qū)硗瓿梢恍┨厥獾牟渴鸩僮?,在PCS文檔中有非常詳細(xì)的關(guān)于這部分功能的介紹。
•在PCS中導(dǎo)出新的BSP,,可以在以后的開發(fā)中應(yīng)用。
PCS提供了一套圖形化的導(dǎo)出BSP的工具,,用戶在圖形界面上進(jìn)行簡單的設(shè)置之后就可以導(dǎo)出的BSP以便在以后的開發(fā)中使用,。大多數(shù)的項目是在一個已經(jīng)存在的BSP的基礎(chǔ)上創(chuàng)建的,導(dǎo)出的BSP可以讓很多成果和解決方案在以后的項目中得到應(yīng)用,這是非常必要的,。
4.結(jié)束語
通過對使用平臺創(chuàng)建套件工具進(jìn)行嵌入式Linux應(yīng)用開發(fā)過程的研究我們可以看出平臺創(chuàng)建套件工具在Linux內(nèi)核配置,,部件之間的依賴關(guān)系的管理和沖突的避免,生成在目標(biāo)板上可運行的目標(biāo)文件,,調(diào)試目標(biāo)板和導(dǎo)出BSP方面都有非常新穎且可行的處理方式,。