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