嵌入系統(tǒng)開發(fā)已經(jīng)趨于規(guī)范化,但是嵌入式系統(tǒng)的開發(fā)并不像在普通PC機上進行軟件開發(fā)那樣容易,它同樣需要一個高度集成的開發(fā)平臺,來降低開發(fā)的難度。目前市場上的嵌入式系統(tǒng)集成開發(fā)平臺特點是: ( 1)多數(shù)嵌入式系統(tǒng)集成開發(fā)平臺都是以Windows為系統(tǒng)環(huán)境,很少有以Linux為系統(tǒng)環(huán)境的;( 2)部分集成開發(fā)平臺具有一定的開放性,許多功能作為插件供用戶選擇; ( 3)多數(shù)集成開發(fā)平臺通用性較差,僅支持一個或者幾個系列的微處理器; ( 4)目前嵌入式系統(tǒng)集成開發(fā)平臺產(chǎn)品大都價格昂貴; ( 5)很少有集成開發(fā)平臺集成有圖形模塊支持的功能。
為了解決其它嵌入式集成開發(fā)平臺的缺點,本文研究了嵌入式系統(tǒng)可視化集成開發(fā)平臺,ESGIDE ( Embedded system graphical integrated development environment),其最大特點是具有圖形化人機交互功能和ARM CPU工作方式自動初始化。所謂圖形化人機交互,是指把將要裁剪和配置的系統(tǒng)級軟件(比如bootloader、kernel、通用I /O輸入、輸出等)化整為零,封裝成不同功能的形象化圖形模塊,開發(fā)者根據(jù)自己開發(fā)的系統(tǒng)需要,選擇不同圖形模塊,動態(tài)生成bootloader、kernel、I /O等系統(tǒng)級的源代碼,不需要開發(fā)者自己輸入,這大大簡化了開發(fā)步驟,減輕了程序員的負擔(dān),減少了操作的復(fù)雜度,提高了開發(fā)效率。另一方面,ARM系列CPU應(yīng)用比較廣泛,不同型號的CPU在開發(fā)時需要對使用的內(nèi)部資源進行初始化。傳統(tǒng)的做法是開發(fā)者確定工作方式,確定工作方式字,然后手動編程。我們采用開發(fā)模式是:以定時器應(yīng)用為例,將定時器的個數(shù),工作方式確定,時鐘頻率的確定,是否允許中斷等編寫成對話框模式,開發(fā)者只要選中其中的方式,初始化控制字自動生成,編寫代碼自動生成,同樣大大簡化了開發(fā)步驟,減輕了程序員的負擔(dān)。
面向?qū)ο蠹夹g(shù)是當前實現(xiàn)軟件模塊化、提高軟件復(fù)用性最優(yōu)的方法,現(xiàn)在成為計算機領(lǐng)域中的一種主流技術(shù),本文提出利用面向?qū)ο蟮募夹g(shù)來設(shè)計一種嵌入式軟件IDE,對嵌入式軟件開發(fā)中的各個對象的類進行分析與設(shè)計,架構(gòu)一個通用的開發(fā)模型,根據(jù)硬件配置自動產(chǎn)生基本的系統(tǒng)軟件方案。只需要系統(tǒng)中的每個對象類的屬性及其操作設(shè)置,自動搭建交叉編譯環(huán)境,降低操作系統(tǒng)裁減和移植的難度,產(chǎn)生驅(qū)動程序的基本框架。開發(fā)人員只需要配置好各個模塊的基本信息,將更多精力集中在系統(tǒng)的應(yīng)用上。
1嵌入式軟件的開發(fā)流程
與常見的PC和服務(wù)器軟件不同,嵌入式軟件主要是對設(shè)備內(nèi)部各部分的運行進行協(xié)調(diào),并不與設(shè)備使用者發(fā)生直接接觸。PC和服務(wù)器軟件的運行環(huán)境是標準化的,而嵌入式軟件的運行環(huán)境隨電子設(shè)備的不同而改變,必須針對不同的電子產(chǎn)品進行專門的設(shè)計、開發(fā)和優(yōu)化。由于嵌入式Linux操作系統(tǒng)在嵌入式開發(fā)中占據(jù)了主流,因此本文圍繞針對移植有Linux操作系統(tǒng)的嵌入式開發(fā)流程進行討論。
典型的基于嵌入式Linux操作系統(tǒng)的嵌入式軟件開發(fā)流程如下[1]:( 1)獲取硬件系統(tǒng)的信息:如選取的微處理器體系,F(xiàn)lash型號、網(wǎng)卡型號及其他外設(shè)的信息等;( 2)建立交叉編譯工具:一般的GCC工具都是針對X86體系的,為了能夠生產(chǎn)目標板執(zhí)行的代碼必須建立交叉編譯工具;( 3)開發(fā)Bootloader:建立啟動系統(tǒng)的主引導(dǎo)程序;( 4)移植Linux內(nèi)核:如基于Linux2.6內(nèi)核移植;( 5)開發(fā)一個根文件系統(tǒng):如rootfs的制作;( 6)開發(fā)特定硬件的驅(qū)動程序:如LCD,Keypad等;( 7)開發(fā)上層的應(yīng)用程序:如QT GUI開發(fā)。
對于開發(fā)過程的各個環(huán)節(jié),有的提供了輔助的開發(fā)工具,有的需要完全依賴經(jīng)驗手工從底層開發(fā),嵌入式軟件開發(fā)依然停留在手工作坊式的方式,很難做到工程化管理。本文所設(shè)計的IDE將涵蓋整個開發(fā)的各個重要環(huán)節(jié),力求最大程度上降低開發(fā)難度,在集成化開發(fā)環(huán)境里完成主要工作。
2 IDE面向?qū)ο蟮姆治雠c設(shè)計
對于運行嵌入式Linux操作系統(tǒng)的系統(tǒng),根據(jù)其開發(fā)流程,利用面向?qū)ο蠹夹g(shù)分析設(shè)計出6個基本的大類,并給出對象之間的協(xié)作關(guān)系圖,如圖1、圖2所示。這幾個大類貫穿了嵌入式軟件開發(fā)的重要環(huán)節(jié)。
圖1嵌入式軟件IDE基本類
圖2基本對象類的協(xié)作圖
硬件系統(tǒng)信息類,承載了硬件系統(tǒng)的描述信息,比如選取何種體系的微處理器,處理器的工作頻率設(shè)置,采用何種啟動方式,是NandFlash,還是NorFlash或者EPROM等,用戶通過設(shè)定這些參數(shù),其他對象將獲取其中的信息進行配置。
嵌入式開發(fā)需要交叉編譯,Linux環(huán)境下一般就是采用開源Gcc系列進行配置,環(huán)境搭建類管理交叉編譯鏈的源代碼,根據(jù)體系架構(gòu)的信息自動生成運行腳本,在制定目錄下生成完整的交叉編譯鏈,這是嵌入式開發(fā)的基礎(chǔ)。
工程管理類,集成開發(fā)環(huán)境的主要目的就是同一組織文檔,省卻人工管理,自動編譯運行源碼,其中包含了文件操作,組織好源代碼之間的關(guān)系,利用make技術(shù)進行編譯,牽扯到大量全局環(huán)境參數(shù)的設(shè)定。
引入控制字庫類是方便部分程序的編寫,比如Bootloader類需要對處理器初始化,基本的驅(qū)動控制器進行操作,其中包含了匯編指令級別和C語言的操作,開發(fā)人員往往需要對參考手冊熟練掌握,大大降低了開發(fā)效率??刂谱謳毂M量包含了常見的處理器系列的寄存器控制字庫,只需選擇某個具體功能,便可產(chǎn)生需要的指令源碼。同樣驅(qū)動程序開發(fā)中,也是頻繁利用了C語言對寄存器進行操作。
系統(tǒng)移植類涵蓋了整個系統(tǒng)需要移植的模塊,引導(dǎo)程序,操作系統(tǒng)內(nèi)核和文件系統(tǒng),各類封裝了大量繁雜的細節(jié)內(nèi)容,盡量以最簡化形式幫助開發(fā)人員完成操作,重要的環(huán)節(jié)只需設(shè)定參數(shù),其他交由對象自動執(zhí)行。
面向?qū)ο笞钪匾奶卣骶褪恰案邇?nèi)聚度和低耦合性”,各個對象封裝了細節(jié)操作,只需要有限的外部接口交換信息,這種柔性思想最大程度上提高了軟件的復(fù)用性。本文所設(shè)計的IDE,根據(jù)體系結(jié)構(gòu)的不同,所需修改的只是個別對象的內(nèi)部數(shù)據(jù)和操作,整體架構(gòu)不受任何影響[2,3]。
圖3給出了面向?qū)ο笄度胧郊砷_發(fā)平臺的結(jié)構(gòu)。
圖3面向?qū)ο蟮那度胧郊砷_發(fā)平臺結(jié)構(gòu)框圖
3系統(tǒng)的具體實現(xiàn)
目前可視化的面向編程語言種類比較多,從對面向?qū)ο蠹夹g(shù)的支持程度上來說,微軟最新的VC#從封裝性、類型安全性方面相當強大。重要的是,類層次清晰,編碼容易,可以根據(jù)面向?qū)ο笤O(shè)計的框架輕松的進行轉(zhuǎn)換,卻和C ++一樣強大。所以本文利用VC#設(shè)計了嵌入式軟件IDE,對各個類編寫詳細代碼。
整個系統(tǒng)基本架構(gòu)如圖4所示。
圖4 IDE的系統(tǒng)架構(gòu)圖
集成開發(fā)環(huán)境運行于Windows平臺下,但需要Linux的強大命令集,在此,本文提出了Cygwin技術(shù)來模擬Linux運行環(huán)境,從而使得IDE的底層得到強大的各種命令支持,可以運行各種腳本文件。此技術(shù)屬于開源項目,安裝后需個別地方的細節(jié)修改。
交叉編譯工具鏈模塊是IDE設(shè)計的核心,開發(fā)一個實用的編譯器,需要花費大量的人力物力和財力,其可靠性也要經(jīng)受時間的考驗。幸運的是,GNU提供了免費的、功能強大的GCC工具鏈,它不僅可以編譯Linux操作系統(tǒng)下的應(yīng)用程序以及Linux內(nèi)核,而且還是一款交叉編譯器,支持ARM、PowerPC、x86、Intel960、M68等幾乎所有知名的CPU廠家,而且國外大多數(shù)集成開發(fā)工具都從GCC移植而來。