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