王 品,劉 冰,賀紅衛(wèi)
(中國兵器科學(xué)研究院,北京 100089)
?
面向DSP的嵌入式遠(yuǎn)程調(diào)試環(huán)境設(shè)計*
王品,劉冰,賀紅衛(wèi)
(中國兵器科學(xué)研究院,北京100089)
摘要:針對目前DSP軟件開發(fā)環(huán)境存在的不足,提出了基于GDB構(gòu)建遠(yuǎn)程調(diào)試環(huán)境的方案。介紹了GDB遠(yuǎn)程調(diào)試原理,詳細(xì)討論了遠(yuǎn)程調(diào)試環(huán)境設(shè)計中關(guān)鍵技術(shù)——調(diào)試服務(wù)器的設(shè)計。以TMS320C674x DSP為目標(biāo)平臺,對方案予以實現(xiàn),針對C674x DSP特有的可變長指令和超長指令字架構(gòu),描述了調(diào)試服務(wù)器相應(yīng)的實現(xiàn)方法。實驗結(jié)果表明,基于GDB構(gòu)建的面向DSP的嵌入式遠(yuǎn)程調(diào)試環(huán)境能夠滿足DSP應(yīng)用軟件調(diào)試的需要。
關(guān)鍵詞:DSP,GDB,遠(yuǎn)程調(diào)試,調(diào)試服務(wù)器
近年來,數(shù)字信號處理器(Digital Signal Processor,DSP)由于其靈活、穩(wěn)定、重復(fù)性好、可大規(guī)模集成和易于實時實現(xiàn)等優(yōu)點,被廣泛應(yīng)用于雷達(dá)、語音、通信、圖像處理等諸多方面[1],在火指控系統(tǒng)中也發(fā)揮著重要作用[2]。目前軟件開發(fā)人員使用DSP廠商提供的集成環(huán)境作為DSP軟件調(diào)試環(huán)境,需要配備專用的仿真器,成本較高,一般只支持Windows操作系統(tǒng)作為調(diào)試主機(jī),并且核心技術(shù)都掌握在少數(shù)DSP廠商手中。由于上述問題的存在,特別是國家對武器系統(tǒng)軟硬件安全可控要求的不斷提高,使得研究面向DSP平臺的嵌入式遠(yuǎn)程調(diào)試環(huán)境設(shè)計技術(shù)具有重要意義?;贕DB的遠(yuǎn)程調(diào)試環(huán)境具有成本低、不受廠商具體調(diào)試協(xié)議限制、安全可控的特點,既支持Windows操作系統(tǒng)作為調(diào)試主機(jī),也支持Linux操作系統(tǒng)作為調(diào)試主機(jī)[3],是實現(xiàn)DSP軟件調(diào)試的一種可選方案。
GDB的全稱為GNU Debugger,是GNU開源組織發(fā)布的支持多種目標(biāo)平臺的程序調(diào)試工具。GDB遠(yuǎn)程調(diào)試系統(tǒng)由調(diào)試主機(jī)GDB環(huán)境、調(diào)試服務(wù)器和通訊信道3部分組成。GDB也稱為主調(diào)試器,運行在調(diào)試主機(jī)中,面向調(diào)試人員,實現(xiàn)調(diào)試功能,而GDB的調(diào)試目標(biāo)是目標(biāo)機(jī)中的應(yīng)用程序。要完成GDB和應(yīng)用程序的交互,目標(biāo)機(jī)需要有一段程序充當(dāng)GDB和應(yīng)用程序的中介,為GDB實現(xiàn)調(diào)試功能提供底層支撐,實現(xiàn)數(shù)據(jù)傳輸、執(zhí)行GDB命令、獲取和控制應(yīng)用程序狀態(tài)等功能,它就是調(diào)試服務(wù)器。GDB和調(diào)試服務(wù)器之間采用遠(yuǎn)程串行協(xié)議(RSP)交換數(shù)據(jù)。有了GDB和調(diào)試服務(wù)器,還需要通訊信道將兩者連接起來,如網(wǎng)口、串口等。遠(yuǎn)程調(diào)試原理如圖1。
圖1 遠(yuǎn)程調(diào)試原理
相對于本地調(diào)試,遠(yuǎn)程調(diào)試具有以下特點:
①主調(diào)試器和被調(diào)試程序運行在不同的計算機(jī)上,通過一定的通信方式將調(diào)試主機(jī)和目標(biāo)機(jī)相連,繞開了目標(biāo)機(jī)上軟硬件資源有限的限制,為用戶提供強(qiáng)大的調(diào)試環(huán)境。
②目標(biāo)機(jī)上無需操作系統(tǒng)支持。目標(biāo)機(jī)上即使運行操作系統(tǒng),也主要是用于嵌入式應(yīng)用的支撐,而不是用于目標(biāo)機(jī)的開發(fā)環(huán)境平臺。
③本地調(diào)試只能調(diào)試相同指令集的程序,而遠(yuǎn)程調(diào)試可以調(diào)試與主機(jī)不同指令集的程序。
④由于主調(diào)試器和被調(diào)試程序的分離,不可避免地引入了通信開銷,對調(diào)試效率有一定影響。
典型的遠(yuǎn)程調(diào)試過程如圖2所示。
圖2 遠(yuǎn)程調(diào)試過程
構(gòu)建基于GDB的嵌入式遠(yuǎn)程調(diào)試環(huán)境,主調(diào)試器、目標(biāo)機(jī)調(diào)試服務(wù)器、通訊信道缺一不可。本文采用串口作為通訊信道,操作簡單。目前,GDB已經(jīng)提供了對TI DSP的支持,只需在官網(wǎng)下載GDB源碼,使用相應(yīng)編譯選項進(jìn)行編譯,即可生成針對目標(biāo)平臺的主調(diào)試器,因此,本方案的關(guān)鍵技術(shù)是調(diào)試服務(wù)器的設(shè)計。
調(diào)試服務(wù)器作為目標(biāo)系統(tǒng)上運行的一段程序,功能如下:
①在應(yīng)用程序發(fā)生異常時,作為中斷服務(wù)程序處理異常,與主調(diào)試器交互信息,通知用戶。
②執(zhí)行調(diào)試器的命令,包括寄存器訪問、修改;目標(biāo)機(jī)內(nèi)存訪問、修改;設(shè)置、刪除斷點;單步、恢復(fù)應(yīng)用程序運行等[4]。
根據(jù)上述各項功能需求,調(diào)試服務(wù)器的實現(xiàn)方法如下:
①通過異常機(jī)制實現(xiàn)單步和斷點功能,中斷被調(diào)試程序。實現(xiàn)調(diào)試服務(wù)器的關(guān)鍵是協(xié)調(diào)調(diào)試服務(wù)器與被調(diào)試程序獲得目標(biāo)機(jī)控制權(quán)的時機(jī)。調(diào)試服務(wù)器以插入“陷阱指令”的方法使目標(biāo)機(jī)產(chǎn)生異常,進(jìn)入異常處理程序,同時,將調(diào)試服務(wù)器設(shè)計為異常處理程序,對軟中斷或未定義指令異常進(jìn)行處理,收到continue或step命令后,將斷點或下一條指令地址處的指令替換為軟中斷指令或未定義指令,恢復(fù)被調(diào)試程序的上下文,使被調(diào)試程序獲得處理器控制權(quán),從掛起處繼續(xù)運行;當(dāng)被調(diào)試程序運行至被替換為軟中斷指令或未定義指令的地址處時,目標(biāo)機(jī)產(chǎn)生中斷或異常,開始執(zhí)行異常處理程序,從而使調(diào)試服務(wù)器獲得目標(biāo)機(jī)的控制權(quán),在異常處理程序中,保存被調(diào)試程序的上下文,以供GDB查詢和恢復(fù)應(yīng)用程序的執(zhí)行。通過這種方式,調(diào)試服務(wù)器實現(xiàn)了對被調(diào)試程序執(zhí)行過程的控制,并能夠收集到程序掛起時的上下文信息。
②執(zhí)行調(diào)試器的命令。寄存器訪問和修改,是通過在進(jìn)入調(diào)試服務(wù)器時,首先保存被調(diào)試程序上下文實現(xiàn)的,當(dāng)收到讀寄存器命令時,調(diào)試服務(wù)器將先前保存的寄存器值返回給主機(jī)端;在恢復(fù)被調(diào)試程序運行前,要恢復(fù)先前保存的、可能被GDB修改的被調(diào)試程序上下文,從而實現(xiàn)寄存器的修改。查看、修改目標(biāo)系統(tǒng)內(nèi)存的命令通過直接讀寫內(nèi)存實現(xiàn)。單步運行功能是通過在下一條指令地址處插入軟中斷或者未定義指令,使處理器產(chǎn)生異常實現(xiàn)的。設(shè)置斷點功能則是通過在斷點地址處插入軟中斷或者未定義指令,使處理器產(chǎn)生異常實現(xiàn)的。
實現(xiàn)了上述功能,在調(diào)試主機(jī)編譯生成的應(yīng)用程序就能夠通過GDB和調(diào)試服務(wù)器的配合,下載到目標(biāo)系統(tǒng)中進(jìn)行調(diào)試,驗證應(yīng)用程序的正確性。
根據(jù)不同體系結(jié)構(gòu)處理器的特點,調(diào)試服務(wù)器的實現(xiàn)方式存在一定的差別。在對遠(yuǎn)程調(diào)試技術(shù)進(jìn)行研究的過程中可以看到,目前已經(jīng)出現(xiàn)了面向ARM、i386等體系結(jié)構(gòu)處理器的調(diào)試服務(wù)器[5],而對面向DSP的調(diào)試服務(wù)器的研究還很少見。支持可變長指令和并行指令是C674x DSP與其他體系結(jié)構(gòu)處理器的不同之處,這一特點增加了計算下一條指令地址和替換指令的難度,下文圍繞可變長指令和并行指令的處理,對C674x DSP調(diào)試服務(wù)器的實現(xiàn)進(jìn)行介紹。
TMS320C674x是TI公司推出的C6000平臺上的定點DSP芯片,具有低成本,低功耗和高性能的特點,有強(qiáng)大的計算能力和快速中斷響應(yīng)處理能力。該芯片擁有可變長指令體系和超長指令字架構(gòu),可變長指令體系提供了靈活的DSP 16位精簡指令和32位指令兩種指令集,為程序員編程提供了便利條件。超長指令字架構(gòu)是指在單一時鐘周期執(zhí)行多條指令的高性能架構(gòu),也可以叫作并行執(zhí)行指令架構(gòu)。該芯片既具有數(shù)字信號處理能力,又具有強(qiáng)大的事件管理能力和嵌入式控制功能,適用于有大批量數(shù)據(jù)處理的測控場合,如工業(yè)自動化控制、電力電子技術(shù)應(yīng)用、智能化儀器儀表及電機(jī)系統(tǒng)等[1]。
4.1指令長度計算
TMS320C674x DSP指令可分為16位精簡指令和32位指令。在中斷被調(diào)試程序執(zhí)行時,采用的是插入“陷阱”的方式,而16位精簡指令和32位指令占用的內(nèi)存空間和操作碼均不相同。如果要插入“陷阱”處的指令是32位指令,則插入SWE(軟中斷)指令,否則插入16位非法指令。所以在調(diào)試服務(wù)器進(jìn)行應(yīng)用程序調(diào)試時,首先需要判斷被調(diào)試程序當(dāng)前執(zhí)行的指令是16位精簡指令還是32位指令,然后根據(jù)各自的規(guī)則作出相應(yīng)的處理。判定地址addr處指令位數(shù)的方法如下:
①計算addr地址處指令所屬取指包包頭地址pAddr,pAddr為滿足下列條件的最小值:(pAddr+4)%32==0,pAddr>=addr。
②判斷pAddr地址處指令pIns是不是包頭,如果pIns的高4位不是0xe,說明本條指令不是包頭,addr處指令位數(shù)為32位,流程結(jié)束。
③計算pAddr地址處指令在所屬取指包中的序號num,num=(pAddr%32)/4。
④獲得pIns中num對應(yīng)的Layout位flag,flag= (pIns>>(21+ num))&0x1,如果flag為1,addr處指令位數(shù)為16位,否則為32位。
4.2并行指令判斷方法
并行指令是在單一時鐘周期內(nèi)同時執(zhí)行的指令。在進(jìn)行指令替換時,需要針對并行指令進(jìn)行處理,否則會導(dǎo)致指令重復(fù)執(zhí)行等錯誤。
判斷某地址處指令與下一條指令是否并行執(zhí)行采用的方法是:首先判斷該指令是16位指令還是32位指令。如果是32位指令,則讀取指令操作碼P標(biāo)志位(第0位),如果該位為1,說明下一條指令與當(dāng)前指令是并行指令;反之,則不是并行指令。不同于32位指令,16位指令的并行標(biāo)志位不包含在指令中,而是包含在取指包包頭中。如果該指令是16位指令,則計算當(dāng)前指令是所屬取指包中的第幾條指令,讀取包頭中相應(yīng)的并行標(biāo)志位,判斷下一條指令與當(dāng)前指令是否并行指令。
4.3調(diào)試服務(wù)器處理流程
目標(biāo)機(jī)發(fā)生異常、調(diào)試服務(wù)器獲得處理器控制權(quán)后,處理流程如下:
①保存被調(diào)試程序上下文,將軟中斷和非法指令恢復(fù)為之前保存的合法指令;
②通過讀取IERR(內(nèi)部異常報告寄存器)狀態(tài),根據(jù)16位精簡指令和32位指令產(chǎn)生異常的機(jī)制和類型不同,判斷是16位非法指令還是32位軟中斷指令引起的異常,由此得出被調(diào)試程序?qū)⒁獔?zhí)行的指令的位數(shù);
③按照16位精簡指令和32位指令兩種情況分別調(diào)整PC值。因為DSP處理器認(rèn)為未定義指令是沒有被處理器執(zhí)行的指令,而軟中斷指令是被執(zhí)行過的指令,所以在調(diào)試服務(wù)器進(jìn)一步處理前,若應(yīng)用程序當(dāng)前指令是16位精簡指令,則當(dāng)前指令即為應(yīng)用程序恢復(fù)執(zhí)行后的應(yīng)執(zhí)行的第一條指令,不需要調(diào)整PC值;若當(dāng)前指令是32位指令,調(diào)整PC值為PC值減4,使PC-4處指令成為應(yīng)用程序恢復(fù)執(zhí)行后執(zhí)行的第一條指令;
④按照RSP協(xié)議通知GDB應(yīng)用程序執(zhí)行被中斷;
⑤接收GDB命令。若接收到單步執(zhí)行命令‘s’,轉(zhuǎn)到步驟⑥。若接收到恢復(fù)運行命令‘c’,轉(zhuǎn)到步驟⑧,否則執(zhí)行并應(yīng)答GDB命令后,轉(zhuǎn)到步驟⑤;
⑥根據(jù)指令編碼規(guī)則及并行指令判斷方法分析當(dāng)前指令,計算與當(dāng)前指令不并行的下一條指令的地址,獲得與當(dāng)前指令并行的所有指令的地址及內(nèi)容,根據(jù)16位精簡指令和32位指令兩種情況逐條判斷是否跳轉(zhuǎn),如果有跳轉(zhuǎn)指令則得出跳轉(zhuǎn)目標(biāo)地址;
⑦計算出nextAddress(下一條指令地址)和jumpAddress(跳轉(zhuǎn)目標(biāo)地址)后,替換目標(biāo)地址處指令。替換nextAddress處指令時,根據(jù)16位精簡指令和32位指令分別處理;
a. nextAddress處是32位指令時,替換nextAd-dress處為SWE指令;
b. nextAddress處是16位精簡指令時,除需替換nextAddress處指令為16位非法指令外,還需替換nextAddress處指令所在取指包包頭的指令,將并行標(biāo)志位清零,確保nextAddress處指令不與nextAddress處指令的下一條指令并行執(zhí)行;
如果即將執(zhí)行的指令中包括跳轉(zhuǎn)指令,還需要替換jumpAddress處的指令,同樣根據(jù)16位精簡指令和32位指令兩種情況分別處理;
a. jumpAddress處是32位指令時,替換jumpAddress處為SWE指令;
b. jumpAddress處是16位精簡指令時,除需替換jumpAddress處指令為16位非法指令外,還需替換jumpAddress處指令所在取指包包頭的指令,將并行標(biāo)志位清零,確保jumpAddress處指令不與jumpAddress處指令的下一條指令并行執(zhí)行;
⑧恢復(fù)被調(diào)試程序上下文,返回被調(diào)試程序產(chǎn)生異常處繼續(xù)執(zhí)行。
處理流程圖如圖3所示。
4.4實驗驗證
將調(diào)試主機(jī)與目標(biāo)平臺通過串口連接,對TMS320C674x DSP目標(biāo)平臺進(jìn)行調(diào)試。實驗結(jié)果顯示,調(diào)試系統(tǒng)能夠?qū)崿F(xiàn)設(shè)置斷點、單步、查看或修改變量值、查看或修改通用寄存器等源碼級調(diào)試功能,調(diào)試界面如圖4所示。采用本方案構(gòu)建的面向DSP的嵌入式遠(yuǎn)程調(diào)試環(huán)境能夠滿足DSP應(yīng)用軟件調(diào)試的需要。
本文討論了基于GDB的DSP遠(yuǎn)程調(diào)試環(huán)境的實現(xiàn)方案,并詳細(xì)介紹了其中的關(guān)鍵技術(shù)——調(diào)試服務(wù)器的設(shè)計和實現(xiàn),在TMS320C674x DSP上驗證了該遠(yuǎn)程調(diào)試環(huán)境的正確性。本方案設(shè)計的調(diào)試環(huán)境可與免費開源、功能強(qiáng)大的ECLIPSE框架無縫集成,借助GNU的GCC編譯器,即可構(gòu)成一個圖形化的面向DSP平臺的集成軟件開發(fā)環(huán)境,實現(xiàn)一體化的工程管理、編譯鏈接和遠(yuǎn)程調(diào)試功能,滿足集成軟件開發(fā)環(huán)境安全可控的需要。
參考文獻(xiàn):
[1]TEXAS I I.TMS320C6000系列DSP的CPU與外設(shè)[M].卞紅雨,紀(jì)祥春,譯.北京:清華大學(xué)出版社,2007.
[2]張遜,鄧雅娟,王國剛. DSP在艦炮火控系統(tǒng)中的應(yīng)用[J].指揮控制與仿真,2006,28(2):82-84.
[3]王欽騫.嵌入式系統(tǒng)調(diào)試器的研究與實現(xiàn)[D].成都:電子科技大學(xué),2006.
圖3 調(diào)試服務(wù)器處理流程圖
圖4 遠(yuǎn)程調(diào)試界面
[4]況陽,雷航,詹瑾瑜. USB設(shè)備端驅(qū)動的研究及在GDB遠(yuǎn)程調(diào)試中的應(yīng)用[J].計算機(jī)應(yīng)用研究,2011,28(10):3770-3772.
[5]程君,劉云霞.基于ARM平臺的GDB遠(yuǎn)程調(diào)試環(huán)境的研究與實現(xiàn)[J].科技資訊,2007,17(7):26-27.
Design of Embedded Remote Debugging Environment for DSP
WANG Pin,LIU Bing,HE Hong-wei
(Academy of Chinese Weapon Science,Beijing 100089,China)
Abstract:Due to the shortcomings exist in software development environment for DSP,a solution to build remote debugging environment on GDB is proposed. After describing the GDB remote debugging principles,the design of debug server is discussed in detail which is key technology of remote debugging environment. The solution is implemented on TMS320C674x DSP target platform,and the implement method of debug server for variable -width instructions and VLIW architecture is described. Experimental results show that the embedded remote debugging environment for DSP built on GDB is able to meet the needs of DSP application software debugging.
Key words:DSP,GDB,remote debug,debug server
中圖分類號:TP311.5
文獻(xiàn)標(biāo)識碼:A
文章編號:1002-0640(2016)05-0137-04
收稿日期:2015-04-27修回日期:2015-05-27
*基金項目:國家科技重大專項基金資助項目(2013ZX01020-004)
作者簡介:王品(1984-),男,吉林松原人,碩士,工程師。研究方向:嵌入式軟件開發(fā)環(huán)境。