劉 芳,臧 威
(中國航空工業(yè)飛行自動(dòng)控制研究所軟件工程中心,陜西西安 710065)
隨著嵌入式軟件規(guī)模及復(fù)雜性的不斷增加,開發(fā)時(shí)間和費(fèi)用也不斷增長,如何快速有效地開發(fā)一款高效完善的嵌入式軟件集成開發(fā)平臺(tái),成為目前亟待解決的問題。由于嵌入式是一個(gè)資源受限系統(tǒng),自身不具備開發(fā)能力,直接在嵌入式系統(tǒng)的硬件平臺(tái)上編寫、調(diào)試軟件較為困難[1]。目前一般采用的解決辦法是首先在通用計(jì)算機(jī)上編寫程序,然后通過交叉編譯生成目標(biāo)平臺(tái)上可運(yùn)行的二進(jìn)制代碼格式,最后再燒寫到目標(biāo)平臺(tái)的特定位置上運(yùn)行,或生成帶調(diào)試信息的程序,由調(diào)試器提取相應(yīng)的代碼段下載到目標(biāo)機(jī)中進(jìn)行源碼級或機(jī)器碼級調(diào)試?;谏鲜鍪聦?shí),在嵌入式系統(tǒng)開發(fā)過程中,出于安全性、可靠性及性能上的考慮,完善的調(diào)試解決方案成為關(guān)鍵。
Eclipse平臺(tái)目前作為一種編譯器、編輯器、調(diào)試器以及其他軟件開發(fā)工具的插件,正在嵌入式領(lǐng)域獲得發(fā)展動(dòng)力[2]。風(fēng)河系統(tǒng)公司已將其從專有用戶接口和平臺(tái)轉(zhuǎn)移到 Eclipse。Accelerated科技、Altera、TI和Xilinx等公司也將Eclipse平臺(tái)作為自身工具的基礎(chǔ)。由于Eclipse平臺(tái)只是用于開發(fā)者工具的一個(gè)框架,不直接支持C/C++;其使用外部插件來提供支持。CDT項(xiàng)目則致力于為Eclipse平臺(tái)提供功能完全的C/C++集成開發(fā)環(huán)境。
文中嵌入式集成開發(fā)環(huán)境MRTOS以開源軟件Eclipse CDT為基礎(chǔ)進(jìn)行開發(fā),其上構(gòu)建了 Zylin Embedded CDT作為Eclipse CDT的插件實(shí)現(xiàn)了主機(jī)端與PowerPC755目標(biāo)機(jī)端的嵌入式交叉調(diào)試開發(fā)功能??傮w上,MRTOS實(shí)現(xiàn)的功能包括項(xiàng)目系統(tǒng)、編輯環(huán)境、構(gòu)建環(huán)境、配置環(huán)境和目標(biāo)機(jī)管理等基本功能和目標(biāo)機(jī)調(diào)試等擴(kuò)展功能,可完成從工程建立和管理、編譯、鏈接及目標(biāo)代碼的生成,到軟件仿真、硬件仿真等完整的開發(fā)流程。
交叉開發(fā)環(huán)境在嵌入式應(yīng)用開發(fā)過程中占有重要地位。當(dāng)前交叉開發(fā)環(huán)境主要由文本編輯器、交叉編譯器、仿真器、遠(yuǎn)程調(diào)試器、連接器、目標(biāo)對象查看器、Shell和下載器等工具組成。交叉開發(fā)環(huán)境需占有大量資源,通常運(yùn)行在宿主機(jī)上,而開發(fā)出的嵌入式應(yīng)用則運(yùn)行在嵌入式計(jì)算機(jī)上,稱之為目標(biāo)機(jī)。在嵌入式應(yīng)用開發(fā)前期,程序員開發(fā)自身的嵌入式應(yīng)用,經(jīng)過交叉編譯、鏈接,可使用仿真器模擬目標(biāo)機(jī)環(huán)境進(jìn)行初步調(diào)試運(yùn)行。嵌入式硬件系統(tǒng)區(qū)別較大,嵌入式開發(fā)的中后期,需要將嵌入式應(yīng)用轉(zhuǎn)移到目標(biāo)機(jī)繼續(xù)進(jìn)行開發(fā)、調(diào)試;同時(shí)軟件開發(fā)者要對目標(biāo)系統(tǒng),例如硬件的各種寄存器、內(nèi)存空間,操作系統(tǒng)的信號量、消息隊(duì)列、任務(wù)和堆棧等,具有完全的觀察、控制和調(diào)試能力。這樣的主機(jī)-目標(biāo)機(jī)系統(tǒng)就構(gòu)成一個(gè)交叉開發(fā)環(huán)境[3]。主機(jī)系統(tǒng)是用與開發(fā)嵌入式軟件系統(tǒng),目標(biāo)機(jī)系統(tǒng)是被開發(fā)的嵌入式系統(tǒng),二者通過網(wǎng)絡(luò)、串口等通信方式連接,共同完成嵌入式軟件的開發(fā)[4]。一般在目標(biāo)機(jī)上有調(diào)試器的某種代理Agent,該代理能與調(diào)試器一同配合完成對目標(biāo)機(jī)上運(yùn)行程序的調(diào)試操作[5]。
基于交叉開發(fā)環(huán)境的系統(tǒng)結(jié)構(gòu)如圖1所示,這是一個(gè)基于Eclipse平臺(tái)的集成開發(fā)環(huán)境,簡稱MRTOS。主機(jī)端的交叉編譯器提供對嵌入式應(yīng)用的交叉編譯,同時(shí)鏈接了應(yīng)用支持庫和操作系統(tǒng)核心代碼,并生成可在目標(biāo)系統(tǒng)中運(yùn)行的可執(zhí)行代碼。遠(yuǎn)程調(diào)試器、Shell和目標(biāo)對象查看器統(tǒng)稱為運(yùn)行時(shí)工具,發(fā)送請求信息到目標(biāo)系統(tǒng)并顯示返回的結(jié)果或信息。仿真器提供模擬的硬件環(huán)境仿真,使得開發(fā)初期可在宿主機(jī)上運(yùn)行可執(zhí)行代碼。而工具接口和目標(biāo)機(jī)服務(wù)器管理所有主機(jī)端工具和在仿真器或目標(biāo)機(jī)中運(yùn)行的嵌入式應(yīng)用通信及信息的交互。
圖1 MRTOS系統(tǒng)結(jié)構(gòu)
嵌入式系統(tǒng)的調(diào)試通常需使用交叉調(diào)試(Cross Debug)也稱為遠(yuǎn)程調(diào)試(Remote Debug)技術(shù),這是一種允許調(diào)試器以某種方式控制目標(biāo)機(jī)上被調(diào)試進(jìn)程的運(yùn)行方式,并具有查看和修改目標(biāo)機(jī)上內(nèi)存單元、寄存器及被調(diào)試進(jìn)程中變量值等基本功能的調(diào)試方式[6]。
MRTOS采用的是基于Eclipse平臺(tái)上的CDT交叉調(diào)試技術(shù)。CDT是完全用Java實(shí)現(xiàn)的開放源碼項(xiàng)目,其作為Eclipse SDK平臺(tái)的一組插件,將C/C++透視圖添加到Eclipse工作臺(tái)Workbench中,則Workbench可用多數(shù)視圖、向?qū)?、高級編輯和調(diào)試來支持C/C++開發(fā)。
MRTOS主要通過對CDT調(diào)試UI、CDT調(diào)試MI和CDT調(diào)試啟動(dòng)等部分插件進(jìn)行擴(kuò)展,使擴(kuò)展后的CDT能夠調(diào)用GDB可遠(yuǎn)程連接到目標(biāo)機(jī)的調(diào)試模塊,并且可在調(diào)試透視圖下對程序進(jìn)行插入、刪除斷點(diǎn)、單步執(zhí)行、查詢變量值及檢查內(nèi)存等基本調(diào)試操作,使之具有嵌入式遠(yuǎn)程調(diào)試的功能。調(diào)試前端流程如圖2所示。主要部分的擴(kuò)展如下:(1)調(diào)試器遠(yuǎn)程連接部分。當(dāng)用戶選擇進(jìn)行遠(yuǎn)程連接時(shí),負(fù)責(zé)收集用戶關(guān)于遠(yuǎn)程調(diào)試的配置信息,例如:連接方式、端口號等,并利用這些信息使調(diào)試器與遠(yuǎn)程模擬器進(jìn)行連接,連接成功則建立調(diào)試會(huì)話,若遇異常則退出。(2)調(diào)試信息處理部分。該部分實(shí)現(xiàn)圖形界面中相關(guān)視圖的擴(kuò)展點(diǎn),接收解析后的調(diào)試信息,并將結(jié)果顯示在UI中。(3)調(diào)試管理部分。負(fù)責(zé)創(chuàng)立或中止命令輸入輸出隊(duì)列和事件隊(duì)列,與GDB MI的接口調(diào)用等,負(fù)責(zé)控制與調(diào)試器信息的交互。
圖2 調(diào)試前端流程圖
在MRTOS嵌入式系統(tǒng)實(shí)例中,開發(fā)的交叉調(diào)試環(huán)境以Eclipse平臺(tái)和CDT項(xiàng)目為依托,通過運(yùn)行于主機(jī)端的遠(yuǎn)程調(diào)試器GDB來調(diào)試運(yùn)行在PowerPC755之上的針對PowerPC體系結(jié)構(gòu)編譯的應(yīng)用程序或系統(tǒng)程序。其調(diào)試目標(biāo)是運(yùn)行PowerPC755上的程序,本地GDB調(diào)試器和目標(biāo)機(jī)間的通信基于串口進(jìn)行,以擴(kuò)展的RSP協(xié)議作為調(diào)試器和目標(biāo)機(jī)之間的通信協(xié)議。
交叉調(diào)試環(huán)境主要分為兩個(gè)部分:MRTOS嵌入式CDT GUI插件和MRTOS嵌入式CDT內(nèi)核插件,分別實(shí)現(xiàn)了宿主機(jī)調(diào)試前端GUI和目標(biāo)機(jī)端調(diào)試內(nèi)核的功能。兩部分通過擴(kuò)展的GDB串行通信協(xié)議(RSP)進(jìn)行通信。宿主機(jī)一般為通用PC機(jī),以Eclipse和擴(kuò)展的CDT插件為調(diào)試前端,在Eclipse所提供的圖形化界面中用戶可方便地向被調(diào)試目標(biāo)發(fā)送命令。整個(gè)系統(tǒng)的開發(fā)架構(gòu)如圖3所示。
圖3 MRTOS嵌入式交叉調(diào)試環(huán)境開發(fā)架構(gòu)
MRTOS嵌入式CDT GUI插件主要實(shí)現(xiàn)了宿主機(jī)調(diào)試前端GUI,基于Eclipse平臺(tái)實(shí)現(xiàn)。在具體的工程實(shí)踐中,zylincdt4.0.zip包是 MRTOS嵌入式 CDT的GUI實(shí)現(xiàn),對應(yīng)的源碼工程是embeddedcdt4_0,該工程主要在CDT插件的基礎(chǔ)上進(jìn)行擴(kuò)展,使之具有嵌入式交叉調(diào)試的GUI功能,具體實(shí)現(xiàn)了交叉調(diào)試時(shí)的啟動(dòng)配置選項(xiàng),用于GDB相關(guān)信息的配置,并最終生成gdbinit文件。MRTOS嵌入式交叉調(diào)試系統(tǒng)在啟動(dòng)Debug透視圖時(shí),主要調(diào)用了工程的gdbinit文件。其中,gdbinit文件示例源碼如下(遠(yuǎn)程速率為38 400 bit·s-1,端口號為com9):
圖4 啟動(dòng)配置選項(xiàng)GUI界面
MRTOS嵌入式CDT GUI插件還可實(shí)現(xiàn)利用Wizard頁面創(chuàng)建新工程的功能。具體實(shí)現(xiàn)包括以下步驟:
(1)根據(jù)Eclipse CDT創(chuàng)建新工程的Wizard各頁面的實(shí)現(xiàn)過程,構(gòu)建適用于某系統(tǒng)軟件開發(fā)的新工程Wizard框架,包括MSL項(xiàng)目、OS項(xiàng)目和應(yīng)用項(xiàng)目。具體每個(gè)Wizard頁面的界面使用SWT/JFace界面編程技術(shù)進(jìn)行實(shí)現(xiàn)。
(2)調(diào)研Eclipse CDT源碼,在最后一個(gè)wizardPage中點(diǎn)擊“Finish”按鈕后將新創(chuàng)建的工程添加顯示在左邊Package Explorer的工程樹形結(jié)構(gòu)中。
(3)在步驟(2)的基礎(chǔ)上,結(jié)合具體需求,實(shí)現(xiàn)自身Wizard顯示工程樹形結(jié)構(gòu)的功能。具體實(shí)現(xiàn)工程的一個(gè)OS項(xiàng)目樹形結(jié)構(gòu)包括:“包含”文件夾,“calllib”文件夾(調(diào)用的庫函數(shù)),“ppc755_le_soft_debug”文件夾(包括處理器配置和內(nèi)存配置,分別采用 Master-Detail技術(shù)實(shí)現(xiàn)),“src”文件夾(包括 .h,.c,.S 文件)及“syscall”文件夾(系統(tǒng)調(diào)用)。
(4)結(jié)合ZylinCDT的調(diào)試配置選項(xiàng)的實(shí)現(xiàn),使其實(shí)現(xiàn)自身的調(diào)試配置選項(xiàng)。
總之,MRTOS嵌入式交叉調(diào)試環(huán)境GUI實(shí)現(xiàn)的關(guān)鍵技術(shù)有以下方面:(1)工程樹形結(jié)構(gòu)的顯示。(2)Master-Detail技術(shù)實(shí)現(xiàn)。(3)調(diào)試配置選項(xiàng)的實(shí)現(xiàn),包括選擇相應(yīng)的調(diào)試器、生成相應(yīng)的調(diào)試命令文件和GDB進(jìn)行通信等。
MRTOS嵌入式CDT內(nèi)核插件主要實(shí)現(xiàn)了目標(biāo)機(jī)端調(diào)試內(nèi)核,基于Eclipse平臺(tái)實(shí)現(xiàn)。在具體的工程實(shí)踐中,org.eclipse.cdt.zip包是MRTOS嵌入式 CDT的內(nèi)核實(shí)現(xiàn),對應(yīng)的源碼是最新 CDT插件源碼,為MRTOS嵌入式CDT GUI插件提供了眾多可調(diào)用的接口函數(shù),其工程結(jié)構(gòu)如表1所示。
表1 MRTOS嵌入式CDT內(nèi)核插件工程結(jié)構(gòu)
在表1中,CDT調(diào)試MI內(nèi)核是嵌入式CDT內(nèi)核插件的核心。其主要實(shí)現(xiàn)以下功能模塊:
(1)調(diào)試類型判斷模塊。負(fù)責(zé)檢測從調(diào)試器MI接口返回的調(diào)試信息,若檢測到所進(jìn)行的是交叉調(diào)試任務(wù),則通知進(jìn)行交叉調(diào)試的相關(guān)處理;若是本地調(diào)試任務(wù),則通知進(jìn)行CDT原來的調(diào)試機(jī)制。該部分同時(shí)負(fù)責(zé)收集調(diào)試命令發(fā)出后調(diào)試器的回饋信息。
(2)交叉調(diào)試信息解析模塊。若在檢測MI返回信息時(shí)發(fā)現(xiàn)是交叉調(diào)試信息,則信息由該模塊接收,并根據(jù)交叉調(diào)試時(shí)各種返回的調(diào)試信息的格式進(jìn)行信息解析、提取和存儲(chǔ),以提供給交叉調(diào)試的信息處理模塊使用。
(3)調(diào)試信息處理模塊。實(shí)現(xiàn)圖形界面中相關(guān)視圖的擴(kuò)展點(diǎn),根據(jù)視圖刷新的要求從解析部分分離的信息當(dāng)中取得有效數(shù)據(jù),并根據(jù)數(shù)據(jù)實(shí)現(xiàn)視圖的有效刷新。
(4)調(diào)試管理模塊。該模塊相當(dāng)于調(diào)試管理者,負(fù)責(zé)創(chuàng)立或終止命令輸入輸出隊(duì)列、事件隊(duì)列及進(jìn)程會(huì)話;啟動(dòng)或終止輸入輸出線程;初始化命令工廠、與MI的接口等,負(fù)責(zé)控制與調(diào)試器信息的交互。
綜上所述,MRTOS嵌入式CDT GUI插件實(shí)現(xiàn)了交叉調(diào)試時(shí)的啟動(dòng)配置GUI,包括GDB信息配置、gdbinit文件生成等;MRTOS嵌入式CDT內(nèi)核插件實(shí)現(xiàn)了交叉調(diào)試信息解析及處理等功能,包括后臺(tái)GDB調(diào)用gdbinit文件并執(zhí)行其中的GDB命令、進(jìn)行目標(biāo)板調(diào)試等。圖5顯示了MRTOS嵌入式交叉調(diào)試環(huán)境的開發(fā)流程。
圖5 MRTOS嵌入式交叉調(diào)試環(huán)境開發(fā)流程
目前嵌入式交叉調(diào)試主要采用硬件調(diào)試器與調(diào)試程序相結(jié)合的方法,但硬件調(diào)試器的價(jià)格較高,增加了系統(tǒng)開發(fā)成本。文中給出了一種基于Eclipse平臺(tái)的MRTOS嵌入式交叉調(diào)試環(huán)境的設(shè)計(jì)與實(shí)現(xiàn),不僅為嵌入式軟件的調(diào)試提供了方便,且有助于嵌入式系統(tǒng)的軟硬協(xié)同設(shè)計(jì)開發(fā)。經(jīng)驗(yàn)證,其可方便地編輯、編譯代碼并可進(jìn)行圖形化交叉調(diào)試,并在工作使用中取得了滿意的效果。另外,在研究過程中,還有某些方面需要完善,如可根據(jù)需要,不斷增加編輯器組件的功能;擴(kuò)展調(diào)試系統(tǒng),使其支持非相似環(huán)境下不同硬件平臺(tái)和TCP/IP調(diào)試等多種調(diào)試方式等。
[1]ERICH G,KENTB.Contributing to eclipse:principles,patterns,and plugins[M].USA MI:Engineering Mechanics,2003.
[2]郭春霞,裘雪紅.嵌入式系統(tǒng)安全的研究與設(shè)計(jì)[J].電子科技,2005(8):49-54.
[3]溫利娜,謝彬,李連云.交叉開發(fā)環(huán)境中的目標(biāo)機(jī)代理設(shè)計(jì)[J].計(jì)算機(jī)工程,2007,33(2):277 -279.
[4]陳小平,謝彬,李斌.嵌入式軟件協(xié)同開發(fā)支撐技術(shù)[J].計(jì)算機(jī)工程,2007,33(18):90 -92.
[5]王立澤,劉斌,楊順昆,等.面向VxWorks的嵌入式軟件集成開發(fā)環(huán)境研究[J].計(jì)算機(jī)工程,2006,32(3):55-56.
[6]王興杰,李允,江浩,等.基于Linux的嵌入式交叉開發(fā)技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2008,25(1):206-208.