蔣 龍,劉 兵,羅小華
(1.浙江大學超大規(guī)模集成電路設(shè)計研究所,杭州310000;
2.杭州中天微系統(tǒng)有限公司軟件研發(fā)部,杭州310012)
基于調(diào)試器的通用Flash在線編程系統(tǒng)
蔣 龍1,劉 兵2,羅小華1
(1.浙江大學超大規(guī)模集成電路設(shè)計研究所,杭州310000;
2.杭州中天微系統(tǒng)有限公司軟件研發(fā)部,杭州310012)
在嵌入式系統(tǒng)中,Flash是經(jīng)常使用的只讀存儲方式。針對目前Flash在線編程接口形式較多、軟件通用性不強的現(xiàn)狀,利用嵌入式調(diào)試技術(shù)實現(xiàn)一種通用Flash在線編程系統(tǒng)。通過定義特定Flash在線編程驅(qū)動程序封裝不同F(xiàn)lash在線編程細節(jié),并在基于Eclipse的集成開發(fā)環(huán)境下封裝整個系統(tǒng)。系統(tǒng)內(nèi)部復用現(xiàn)有的嵌入式調(diào)試軟件工具,與嵌入式目標端的Flash驅(qū)動程序配合,可實現(xiàn)Flash在線編程的功能。在使用方面,該系統(tǒng)呈現(xiàn)給用戶一個操作簡單、可視化強的軟件操作界面;在功能方面,通過定制Flash驅(qū)動程序,該系統(tǒng)對目前業(yè)內(nèi)主流Flash進行在線編程,具有在線編程的通用性。
嵌入式系統(tǒng);Flash在線編程;調(diào)試器;Eclipse插件;集成開發(fā)環(huán)境;軟件復用
對于嵌入式系統(tǒng)來說,Flash幾乎成為必不可少的硬件單元,因此Flash的在線編程在嵌入式開發(fā)中是非常重要的一個環(huán)節(jié)[1]。目前業(yè)界對Flash的在線編程接口千差萬別,每個廠商的Flash編程方式各有不同,相同的嵌入式平臺,針對不同的Flash單元要做不同的定制[2]。這種情況顯然不利于嵌入式開發(fā)效率的提高。
目前,針對Flash在線編程的研究普遍集中在底層硬件的實現(xiàn)層面,對于嵌入式軟件開發(fā)的效率提升完全沒有考慮[3]。文獻[1]介紹了一種基于JTAG實現(xiàn)的Flash編程方法,利用芯片SRAM區(qū)域作為數(shù)據(jù)緩沖區(qū),通過JTAG進行控制,最終實現(xiàn)Flash編程。整體方案較好,不足之處在于需要較多的硬件單元。文獻[2]同樣是基于JTAG的Flash編程實現(xiàn),通過專用的硬件目標板去控制原有的CPU core中的JTAG邏輯模塊,通過PC端軟件實現(xiàn)對Flash的編程,整體的軟硬件代價都相對高。文獻[4]的問題在于整個論述都是對TMS320F2812芯片的理論研究,沒能提出一種更為通用的方式。
針對目前Flash編程接口形式多變對嵌入式軟件開發(fā)帶來的不便[4],本文設(shè)計并實現(xiàn)一套通用的Flash在線編程系統(tǒng)。該系統(tǒng)利用現(xiàn)有嵌入式調(diào)試通道,將頂層Eclipse集成開發(fā)環(huán)境與運行在嵌入式目標端RAM中的Flash驅(qū)動整合,最終實現(xiàn)各種Flash在線編程的功能。整體方案只需要嵌入式端極小RAM(小于1 KB)的硬件開銷(一般嵌入式系統(tǒng)都可以滿足該RAM要求),可解決嵌入式Flash在線編程的通用性問題[5],提高嵌入式軟件開發(fā)中Flash在線編程的效率。
2.1 整體框架及原理描述
通用Flash在線編程系統(tǒng)的核心原理在于:通過用戶自定義Flash驅(qū)動,封裝不同F(xiàn)lash編程接口,利用嵌入式調(diào)試工具,將驅(qū)動加載到嵌入式目標板RAM中,然后運用斷點(break)、寫內(nèi)存(restore)和運行(continue)等基本調(diào)試命令,通過對驅(qū)動程序的控制,完成對Flash硬件的在線編程工作。Eclipse集成開發(fā)環(huán)境的功能是封裝了調(diào)試工具的調(diào)試過程,為用戶提供一個Flash編程操作界面。整個系統(tǒng)如圖1所示。
圖1 通用Flash在線編程系統(tǒng)框圖
運行在嵌入式目標端RAM空間的Flash驅(qū)動程序封裝了Flash編程接口的細節(jié),該程序在整個系統(tǒng)中始終處于被調(diào)試的狀態(tài),調(diào)試器發(fā)送調(diào)試命令,控制Flash驅(qū)動程序,完成Flash的在線編程。
2.2 模塊功能說明
2.2.1 Flash驅(qū)動模塊
整個系統(tǒng)的核心在于Flash驅(qū)動程序的設(shè)計,驅(qū)動模塊需要完成2個功能:(1)為Flash編程用戶提供通用Flash編程接口;(2)向調(diào)試器提供一組控制接口,使得調(diào)試器能夠通過基本的調(diào)試命令來實現(xiàn)對Flash編程的控制。整個模塊如圖2所示。
在該模塊中,用戶自定義部分需要由Flash編程用戶根據(jù)具體的Flash器件特性實現(xiàn)。通過這種方式,可以實現(xiàn)Flash編程的通用性。通用接口及含義見表1。
圖2 Flash驅(qū)動模塊框圖
表1 驅(qū)動模塊通用Flash編程接口說明
調(diào)試器控制接口給出的是一些全局符號,如表2所示。調(diào)試器可以在驅(qū)動程序處于調(diào)試狀態(tài)時,讀寫這些全局符號,從而準確地控制Flash驅(qū)動程序,實現(xiàn)通用Flash在線編程的操作[6]。
表2 驅(qū)動模塊調(diào)試器控制接口說明
當驅(qū)動處于調(diào)試狀態(tài)下時,Flash編程事件輪詢單元利用調(diào)試器控制接口的信息來調(diào)用不同的Flash編程接口,實現(xiàn)Flash的讀寫、擦除等操作[7]。
2.2.2 調(diào)試器模塊
調(diào)試器模塊雖然在系統(tǒng)中非常重要,但本文系統(tǒng)只是使用調(diào)試器的最基本的調(diào)試操作,這也是本文系統(tǒng)的一個優(yōu)點:最大限度實現(xiàn)了軟件復用[8]。表3給出系統(tǒng)工作時調(diào)試器的基本命令以及作用。
表3 系統(tǒng)使用的基本調(diào)試命令說明
通過使用上述命令,調(diào)試器可以準確控制目標端RAM中運行的Flash驅(qū)動的運行流程,從而實現(xiàn)Flash編程操作,該過程如圖3所示??梢钥闯?涉及到的調(diào)試操作全部是嵌入式調(diào)試中經(jīng)常使用的基本調(diào)試操作,因此,對于調(diào)試器模塊來說,在整個系統(tǒng)中,并沒有任何的擴展,完全實現(xiàn)了軟件復用。
圖3 調(diào)試器模塊控制流程
2.2.3 Eclipse模塊
Eclipse模塊將調(diào)試驅(qū)動的細節(jié)進行了封裝。具體來說,該模塊負責提供給用戶一個Flash編程操作界面,并將調(diào)試器模塊使用到的基本調(diào)試命令進行后臺封裝[9]。
在界面上,僅提供給用戶Flash編程的操作;在后臺,將調(diào)試流程進行封裝;這種做法可以做大限度地避免將本系統(tǒng)的原理暴露給Flash編程的用戶,符合軟件封裝原則[10]。
3.1 嵌入式環(huán)境
本文系統(tǒng)的實現(xiàn)環(huán)境:嵌入式硬件平臺是杭州中天微系統(tǒng)有限公司的32位高性能嵌入式CPU CK610,并使用基于該芯片的SoC平臺,該平臺使用了SPANSION公司S29GL-N型號Nor Flash的只讀器件;嵌入式軟件平臺方面,調(diào)試器部分使用杭州中天微系統(tǒng)有限公司的嵌入式CK-GDB,以及基于Eclipse的集成開發(fā)環(huán)境 C-Sky Development Suite (CDS)。本文首先針對Nor Flash編寫驅(qū)動程序,然后在CDS平臺上進行插件開發(fā),完成通用Flash在線編程系統(tǒng)的設(shè)計。
3.2 Flash驅(qū)動框架設(shè)計實現(xiàn)
驅(qū)動框架的設(shè)計嚴格按照原理闡述,結(jié)合圖2所示的 Flash驅(qū)動模塊框圖,在驅(qū)動工程中,通用Flash編程接口需要由具體的Flash編程用戶來實現(xiàn),而調(diào)試器控制接口是確定的,而且盡量避免暴露給用戶,因此本文在實現(xiàn)中將兩部分代碼放在了不同的源文件中[11]。整個驅(qū)動工程的文件目錄如圖4所示。
這里crt0.S是啟動文件,ckcpu.ld是鏈接腳本,而gdb.init文件是gdb的啟動腳本。這3個文件是嵌入式工程必備文件。
圖4 驅(qū)動工程目錄
本文將調(diào)試器控制接口以及Flash編程事件輪詢單元放在了main.c文件中,并使注釋main.c文件是只讀文件;而需要用戶自定義的通用Flash編程接口全部放到driver.c文件中,該文件是需要用戶根據(jù)具體的Flash硬件單元來自定義完成的。
事件輪詢單元(main.c文件)的核心代碼如下:
上述代碼是整個驅(qū)動程序的核心代碼,調(diào)試器通過驅(qū)動提供的全局控制變量對控制while循環(huán)的流程。
3.3 Eclipse插件設(shè)計實現(xiàn)
本文通過Eclipse插件開發(fā)技術(shù),為用戶實現(xiàn)了一個Flash編程的GUI,最終用戶在實際使用中是通過該GUI,一鍵操作完成對Flash的編程的。
具體來說,需要對Eclipse的擴展點進行擴展,然后在此擴展點上進行GUI后臺邏輯封裝工作。
插件開發(fā)核心代碼如下:
通過xml方式對Eclipse進行了擴展點開發(fā),后續(xù)僅需要完成實現(xiàn)該擴展點的類:com.csky.cds.Flash.ui.FlashUIHandler即可,鑒于篇幅,本文不在此贅述。
本文使用CDS提供的demo程序作為演示程序,使用上文實現(xiàn)的Flash插件開發(fā)界面進行Flash編程操作,將demo燒寫到基于CK-CPU的SoC平臺的Nor Flash空間中。最終在Eclipse界面上顯示“Programmed successfully“,見圖5中圓圈圈出部分。
圖5 Eclipse上Flash燒寫成功界面
為驗證是否如界面所示,將嵌入式目標板串口連接至電腦,重新上電,發(fā)現(xiàn)電腦串口顯示“Hello,CSky!”的預期結(jié)果。這說明嵌入式目標端Nor Flash對應空間確實已經(jīng)被正確燒寫了。從而證明了該通用Flash在線編程系統(tǒng)的正確性[12]。
本文提出了一種通用的Flash在線編程的方法,通過定義Flash驅(qū)動程序封裝了不同F(xiàn)lash的在線編程細節(jié),采用現(xiàn)有的嵌入式調(diào)試手段,最終在Eclipse層面上將該方法的原理進行封裝,為用戶呈現(xiàn)一個可視化的Flash編程界面,實現(xiàn)了Flash在線編程的通用性。該方法也大幅提高了嵌入式Flash在線編程的速度。但在本文系統(tǒng)中,Flash驅(qū)動模塊源代碼會將原理細節(jié)暴露給用戶,這不符合軟件封裝原則。在下一步工作中,對于Flash驅(qū)動的模塊,可以考慮使用庫的形式將這些細節(jié)封裝起來,只將通用Flash編程接口的實現(xiàn)交給用戶,做到完全的封裝。
[1] 陳 超,沈海斌.基于JTAG的可重構(gòu)Flash快速編程方法[J].計算機工程,2010,36(17):280-282,285.
[2] 吳玉香,周建香.基于JTAG的Flash在線編程系統(tǒng)實現(xiàn)[J].化工自動化及儀表,2009,36(6):70-74.
[3] 李 靜,張樹團.TMS320F2812片內(nèi)Flash在線燒寫技術(shù)研究[J].國外電子元器件,2008,10:37-38,40.
[4] 董相暉,張志敏.一種基于EJTAG快速在線燒寫Flash的設(shè)計[J].微電子學與計算機,2007,24(12):106-108.
[5] 李 慧,周 明.JTAG模式下的MPC5554外部FLASH編程的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2009,32(2): 76-79,83.
[6] 趙海艦,甘 萌.嵌入式系統(tǒng)中的Flash編程技術(shù)研究[J].計算機工程與設(shè)計,2005,26(11):3006-3009.
[7] 陸林燕,王魯靜,鄭正奇.NAND FLASH編程實現(xiàn)研究分析[J].計算機技術(shù)與發(fā)展,2008,18(3):118-120,124.
[8] 黃冰峰,游志宇,杜 楊,等.基于SoPC目標板Flash編程設(shè)計的創(chuàng)建及應用[J].電子設(shè)計工程,2009, 17(3):100-102,105.
[9] 魏楚元,李陶深,張增芳.Eclipse:基于插件的下一代通用集成開發(fā)環(huán)境[J].計算機應用與軟件,2005, 22(6):38-40.
[10] 薛東方,尚朝軒,何 強,等.基于Visual DSP++環(huán)境的Flash在線編程實現(xiàn)[J].科學技術(shù)與工程,2008, 8(4):1095-1097.
[11] 閆守孟,周興社,李志剛.面向嵌入式驅(qū)動軟件開發(fā)的設(shè)備仿真技術(shù)研究[J].西北工業(yè)大學學報,2004, 22(1):11-14.
[12] 單錦輝,姜 瑛,孫 萍.軟件測試研究進展[J].北京大學學報,2005,41(1):134-145.
編輯 金胡考
General Flash Online Programming System Based on Debugger
JIANG Long1,LIU Bing2,LUO Xiaohua1
(1.Institute of VLSI Design,Zhejiang University,Hangzhou 310000,China;
2.Department of Software Research and Development,C-SKY Microsystems Co.,Ltd.,Hangzhou 310012,China)
In embedded systems,Flash is an often-used way of read-only memory.For all kinds of Flash online programming interface in the present industry,a general Flash online programming system is implemented in this paper by using the embedded debugging techniques.This system encapsulates the different Flash online programming details by defining specific Flash online programming driver.An Integrated Development Environment(IDE)based on Eclipse is at the top of the system,and in the background,the existing embedded debug tool is reused to achieve Flash online programming with the help of specific Flash driver running on the embedded target.In terms of use,this system presents a simple operation,strong visual software interface for Flash online programming,and in the aspect of function,major Flash in the industry can be online programming in this system,which implements the generality of Flash online programming.
embedded system;Flash online programming;debugger;Eclipse plug-in;Integrated Development Environment (IDE);software reuse
1000-3428(2014)11-0046-04
A
TP31
10.3969/j.issn.1000-3428.2014.11.009
“核高基”重大專項“高性能嵌入式CPU關(guān)鍵技術(shù)研究”(2010ZX01030-001-001-002)。
蔣 龍(1987-),男,碩士研究生,主研方向:嵌入式調(diào)試技術(shù);劉 兵,碩士;羅小華,副教授。
2013-11-25
2013-12-20E-mail:ZJU_PeterJL@163.com
中文引用格式:蔣 龍,劉 兵,羅小華.基于調(diào)試器的通用Flash在線編程系統(tǒng)[J].計算機工程,2014,40(11):46-49.
英文引用格式:Jiang Long,Liu Bing,Luo Xiaohua.General Flash Online Programming System Based on Debugger[J].Computer Engineering,2014,40(11):46-49.