朱壽羽 陳洪邦 李孝成
摘 要:隨著摩爾定律持續有效,傳統的單核處理器逐漸被片上系統和多核處理器所取代,如何在多機多核環境中實現高效的開發調試成為我們所面臨的問題之一。面向對系統可靠性要求極高的電力控制領域,設計并實現了一個基于SylixOS國產操作系統的統一開發調試器。首先對統一開發調試器的設計進行了簡單介紹,然后在GDB基礎上對多核調試的連接方法和多線程調試進行了改進。通過測試表明,此統一開發調試器能夠在主流國產多核處理器上實現遠程多核調試,可以顯著縮短程序員的調試時間。
關鍵詞:國產軟硬件;遠程調試;GDB;菊花鏈;多核調試
0引言
目前,智能電網日益受到國家的重視,其中研究的重點就是擺脫電網設備底層操作系統對國外操作系統的依賴,避免存在安全隱患。在南京翼輝信息獨立負責“核高基”部分課題后,將扭轉我國電網控制領域底層操作系統受制于人的局面。在片上系統和多核處理器帶來豐厚回報的同時,如何針對多核處理器設計調試環境成為開發過程中的難題[1-2]。首先程序員在代碼調試過程中所需的時間大幅度增加,而且冗余多機技術在電力控制領域普遍采用,但現有的大多數調試工具只是針對單核單處理器[3],因此本文基于SylixOS國產實時操作系統,設計并實現一個多機多核調試器,能夠滿足在國產龍芯、飛騰、智芯等處理器上的調試要求。
1調試器的總體設計
如圖1所示,統一開發調試器的設計采用宿主機和目標機的開發調試環境[4-5],在宿主機上編寫源代碼,利用翼輝集成開發環境RealEvo-IDE在宿主機上編譯生成可執行代碼并下載到目標機上。目標機上運行配合宿主機端GDB的調試代理,實現對被調試程序的調試,調試代理和被調試程序都基于運行在龍芯、飛騰、智芯等國產處理器上的SylixOS操作系統。調試時,兩端通過串口、網口或JTAG接口進行連接,GDB利用遠程串行通信協議RSP與調試代理進行發送調試指令和接收調試反饋的通信。
1.1 GDB調試原理
基于GDB遠程調試、設置斷點、單步運行、讀寫寄存器等強大功能以及實時、開源、跨平臺性好等特點成為此統一開發調試器主要依托的調試方案[6]。下面簡述GDB和調試代理之間的調試過程[7-9]。如圖2所示,GDB通過用戶接口的循環機制接收到用戶輸入的調試指令,結合對命令進行統一管理的符號表進行解釋和處理,生成調試代理可以識別的指令,然后將調試指令按照RSP協議固定的格式進行封裝和發送。當調試代理通過連接通道接收到封裝后的指令時,先進行指令的解析,然后根據指令生成調試事件并將此事件加入到調試事件鏈中等待處理,最后調試代理將調試結果反饋到宿主機端GDB。
1.2 RSP協議
GDB運行在PC端,調試代理運行在開發板上,所以兩者之間需要在串口、網口或JTAG接口等通道的基礎上實現數據的傳輸,遠程串行通信協議RSP實現了這一功能,它能很好的實現命令的封裝和傳輸以及其他必要的功能。RSP協議定義了GDB和調試代理之間通信時統一的數據包格式[10],此協議和大多數通信協議類似,傳輸的數據包包含了起始位,結束位以及校驗和這三個部分,其格式如圖3所示,
$為起始位,#為結束位,Data為數據部分,Checksum是將數據部分所有字符的ASCLL碼取和后與256取模所得的校驗和。當調試代理端在調試過程中接收到GDB端發送的消息時,就會對消息中的數據部分進行校驗,并根據校驗的結果給GDB端正確的回應。“+”表示校驗和正確,可進行下一步傳輸,“-”表示校驗和錯誤,需要進行重新校驗。
2調試器的實現
2.1多核連接方法的實現
目前大多數芯片廠商生產的芯片只留出單一的JTAG接口,而沒有考慮到處理器中內核的個數。一般開發者都是采用IEEE 1149.1標準菊花鏈連接方法來同步和處理多核的調試工作,如圖4所示。
通過IPi的TDO與IPi+1的TDI相連的方式將多個IP核連接成一個串行的鏈,同時它們通過TAP控制器共享測試模式選擇TMS、測試時鐘TCK、測試復位TRST控制信號。當接收到掃描測試指令時,指令經過此連接方式進入到IP核TAP的指令寄存器中,從而能夠達到在同一時間對多個IP核的TAP進行訪問的目的,也可以同時獲取各個IP核邊界上的輸入信號以及輸出信號,此連接方式的運用對多核處理器的調試有很大幫助。但菊花鏈連接方式一個很大的缺點就是其與IEEE1149.1的標準不一致,而且此連接方式在多個IP核中選擇特定的一個IP核進行調試會有很大的工作量。后期有人提出的TLM(TAP Linking Module)連接方法和并行多TAP控制器互連調試方法都存在一定的缺陷,不能實現多核調試 [11]。
本設計利用菊花鏈連接的長處,既能對多個IP核進行同時調試以滿足觀察多核之間互相配合情況的要求,又能對特定的某一個IP核進行調試。如圖5所示,首先我們在硬件上增加了模式選擇控制器Pattern_TAP,同時在軟件上附加模式開關Switch_TAP,然后將接口進行封裝。當調度器發出Select_TAP1指令時,指令經過解釋后將選擇Pattern_TAP的bypass數據寄存器,對TAP1的TMS產生一個選擇信號, 進入單核調試模式,基于SylixOS操作系統的RealEvo-IDE調試軟件對IP1進行調試。當調度器發出TRST_n的信號,對IP1的調試處于掛起狀態。通過這種方式也可以實現對其余IP核TAP的調試。當調度器發出Select_DC命令時,Pattern_TAP將DCflag標志寄存器的值置0(默認狀態下為1),進入Daisy-Chain菊花鏈互連多核調試模式,TAP1的TDI輸入切入到Pattern_TAP的TDO輸出,TAPn的TDO輸出連接到JTAG接口的TDO上,而TAP之間通過菊花鏈的連接方法進行互連,這樣統一開發調試器便可實現對多個IP核進行同時調試。調度器發出DC_EXIT命令時,將退出多核調試。通過增加模式選擇控制器和模式開關這種方式,便可滿足不同得調試需求。
2.2多線程的實現
GDB雖然支持多線程調試,但其all-stop模式在對個別線程進行單步調試時,可能會干擾到其余線程。而non-stop模式在某個線程運行斷點時,GDB可能會停止整個進程。所以不難看出GDB對多線程調試的能力還是不完善的[12]。而此統一開發調試器是在調試代理的基礎上進行改進,使其可以更優的實現對多線程的調試。改進的基本的方案是在命令中指定內核號、進程號和線程號,運行在開發板上的調試代理會根據此命令讓特定內核上的線程運行調試.如圖6所示,調試代理在接收并解析調試命令后,會從命令中獲取到內核號、進程號和線程號,然后會進行相關信息的匹配,符合的情況下切換線程執行調試命令。例如收到next[123.1-6,124]>2的調試命令,調試代理將此命令翻譯為讓2號內核上的123號進程的1-6號線程及124號進程進行單步運行。
2.3調試功能測試
測試工作基于運行在宿主機上的RealEvo-IDE,其主要功能是 SylixOS 工程管理和程序調試,可以通過JTAG接口、網口或串口與目標機交互。RealEvo-IDE 的交叉編譯器在宿主機上編譯生成可以在目標機上運行的 SylixOS 鏡像文件,統一開發調試器實現了宿主機與目標機之間多核調試。下面進行串口調試的測試,首先我們通過使用串口線將宿主機與目標機相連,如圖7所示,在SylixOS Terminal中使用/dev/ttyS*參數輸入“debug” 命令。
然后在RealEvo-IDE界面打開“Debugger→Connection”屬性頁,在“Type”下拉框選擇“Serial”,在“Device”編輯框中輸入 PC 端與設備相連的調試串口名稱,在“Speed”編輯框設置調試串口波特率為115200,如圖 8所示。
進行上面的操作后,便可進行調試,如查看內存內容。在“Memory”界面上點擊加號按鈕添加一個內存監控器,點擊“OK”后,默認以十六進制顯示該地址處的內存數據,點擊“New Renderings…”按鈕可以選擇其他類型的顯示方式,如9圖中以“Floating Point”類型為例。
3 結束語
本文基于SylixOS國產操作系統和集成開發環境RealEvo-IDE,對多核調試的連接方法和GDB調試代理多線程調試進行改進,設計了一個統一開發調試器。該統一開發調試器能夠良好地支持國產龍芯、飛騰、智芯等處理器的軟件調試。但是,統一開發調試器調試功能和調試命令還需不斷的完善和優化,給開發者帶來更好的調試環境。
參考文獻:
[1]蔡玉鑫. 嵌入式多核處理器核間通信方法的設計與實現[D].西安電子科技大學,2015.
[2]夏安祥,史浩山,阮園,劉紅紅.一種可重定向的交叉調試器實現方法[J].計算機應用研究,2011,28(10):3735-3738.
[3]王超. 嵌入式多核調試器的研究與實現[D].電子科技大學,2015.
[4]楊群,李笑天,何虎.面向Superscalar與VLIW混合架構處理器的調試器設計[J].計算機應用與軟件,2015,32(05):84-87+163.
[5]霍峰.基于某國產操作系統的交叉調試技術的研究[J].電子測試,2018(Z1):90-91.
[6]姚文星. 基于JTAG的多核DSP調試系統的研究與實現[D].中國民航大學,2014.
[7]鐘太聰. 基于多核的GDB遠程任務級調試改進[D].電子科技大學,2010.
[8]韓斌,羅克露.基于aCoral操作系統遠程調試器的設計[J].實驗科學與技術,2013,11(05):38-40+70.
[9]陳必泉,黃承慧.GDBSERVER原理分析及其應用[J].計算機工程與設計,2005(03):746-749.
[10]李琮,王竹平,費曉琪.基于GDB的多核DSP平臺調試器的設計與實現[J].微電子學與計算機,2015,32(01):72-75.
[11]王玥. 嵌入式SoC可調試設計的研究[D].浙江大學,2007.
[12]李鵬程. 面向嵌入式系統的多核調試工具研究與實現[D].電子科技大學,2017.