<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > S698系列處理器軟件調試工具V8MON的設計與應用

S698系列處理器軟件調試工具V8MON的設計與應用

作者:龔永紅,許怡冰,駱杰華 時(shí)間:2012-11-20 來(lái)源:電子產(chǎn)品世界 收藏

  1 引言

本文引用地址:http://dyxdggzs.com/article/139098.htm

  在嵌入式軟件開(kāi)發(fā)中,調試是一個(gè)重要的環(huán)節,調試工具是衡量軟件開(kāi)發(fā)環(huán)境優(yōu)劣的重要因素??梢哉f(shuō)嵌入式交叉是嵌入式系統開(kāi)發(fā)者使用最多的工具,也是整個(gè)開(kāi)發(fā)周期中使用時(shí)間最長(cháng)的工具。

  目前基于SPARC核的嵌入式已經(jīng)成為歐美市場(chǎng)的主流,2003年珠海歐比特控制工程股份有限公司成功研制出國內第一款SPARC V8架構32位嵌入式S698,經(jīng)過(guò)幾年發(fā)展,S698已成為系列化產(chǎn)品,有軍品級、商業(yè)級、多類(lèi)型等,并廣泛應用于國防、航空、通信等領(lǐng)域。

  是歐比特公司自主研發(fā)的基于S698系列處理器的軟件,可以運行于Windows以及Linux平臺,具有使用簡(jiǎn)捷、接口豐富等特點(diǎn),同時(shí)也可運用于其它SPARC V8架構的處理器平臺。的調試功能主要包括:程序下載、運行、內存讀寫(xiě)、反匯編、斷點(diǎn)設置、數據跟蹤等。

  2 調試原理

  2.1 交叉調試

  嵌入式系統中的軟件調試與桌面軟件的調試有很大的不同。調試嵌入式系統時(shí),和被調試程序往往是物理上分離的。調試器運行在宿主機上,而被調試程序運行在目標機上,宿主機與目標機之間通過(guò)某種媒介進(jìn)行通信。通常情況下,還要在目標機上運行一個(gè)稱(chēng)為調試代理(Debug Agent)的監控程序,由它來(lái)負責與運行在宿主機上的調試器進(jìn)行通信,控制被調試程序的執行,并將被調試程序的執行情況及時(shí)反饋給調試器。

  使用調試代理軟件的最大的缺點(diǎn)是占用目標系統的資源,消耗處理器時(shí)間,造成應用程序的最終運行環(huán)境和調試環(huán)境有差異,且影響被調試程序的運行。目前一些高端處理器都內置有硬件調試邏輯單元,可以通過(guò)硬件方式完成調試過(guò)程中的通訊、控制工作,且不占用系統資源,不影響程序的運行,不需要調試代理程序的參與。

  S698系列處理器的內部就集成有調試單元DSU(Debug Support Unit),DSU可以獨立于IU處理單元在內部AHB總線(xiàn)上產(chǎn)生讀寫(xiě)時(shí)序,所以可以直接到訪(fǎng)問(wèn)處理器上的各種資源(如內存空間、片內寄存器、ROM地址等)。

  調試器運行在主機端,通過(guò)串口、以太網(wǎng)等方式與目標硬件系統相連,通過(guò)收送指令的方式與DSU調試單元進(jìn)行交互,從而完成對目標系統的調試??梢钥吹竭@種調試模式無(wú)需在硬件系統上燒寫(xiě)監控調試軟件,也不需要借助硬件仿真器,甚至不需要硬件處理單元的參與。V8MON除了與DSU通訊之外,還要完成對人機接口,以及文件解析、GDB協(xié)議分析等功能,其完整的模塊結構如圖1所示。

  圖1 V8MON連接結構圖

  V8MON不僅可以設置軟件斷點(diǎn)(指令級中斷),還可以設置硬件斷點(diǎn)。通過(guò)寫(xiě)DSU調試單元中斷點(diǎn)寄存器的值可以進(jìn)行硬件斷點(diǎn)設置,V8MON不僅對地址還可以對數據以及總線(xiàn)的信號進(jìn)行復雜的觸發(fā)控制設定,從而滿(mǎn)足對特定事件的中斷響應,增加了靈活性,同時(shí)可以在ROM中設置斷點(diǎn)和觀(guān)察點(diǎn),極大地方便調試。

  V8MON還提供追蹤功能,可以不停止CPU的運行而實(shí)時(shí)監視芯片總線(xiàn)的信息,這些信息存儲在處理器內部的trace buffer中, V8MON可以隨時(shí)讀取這些信息,從而根據這些數據信息重現處理器的歷史狀態(tài)、數據以及程序流程等。合理使用此功能,用戶(hù)可以得到細致、準確的運行分析數據,而又不必借助任何硬件設備,可以大大降低分析的成本。

  2.2 gdb連接

  V8MON有兩種操作模式:命令行模式和GDB模式。在命令行模式下,V8MON命令通過(guò)窗口終端控制臺手工輸入,V8MON通過(guò)DSU協(xié)議把指令傳輸給目標系統DSU調試單元;在GDB模式下,V8MON作為一個(gè)網(wǎng)關(guān),V8MON首先把客戶(hù)端通過(guò)遠程GDB協(xié)議發(fā)過(guò)來(lái)的GDB命令翻譯為調試指令,再通過(guò)DSU協(xié)議把調試指令傳輸給目標系統DSU調試單元。

  Gdb是GNU軟件序列中的調試工具,Gdb可以調試各種程序,包括C、C++、JAVA、PASCAL、FORAN和一些其它的語(yǔ)言,支持現有的大部分處理器平臺,即可用于上位機軟件調試,也可用于嵌入式軟件交叉調試。

  V8MON通過(guò)標準socket接口與gdb連接,V8MON為socket服務(wù)器端,gdb為客戶(hù)端。V8MON和gdb可以在同一個(gè)PC機上運行,也可以在兩臺不同的PC上運行,這兩臺機器之間通過(guò)以太網(wǎng)相連;連接后用戶(hù)可以在主機上用gdb對目標系統進(jìn)行調試,V8MON在目標系統與gdb之間進(jìn)行命令轉換,起到橋梁紐帶作用。

  圖2 V8MON GDB模式調試原理框圖

  采用gdb調試更關(guān)注于軟件本身,較適合對大型應用軟件的調試,用戶(hù)可以在高級語(yǔ)言層面調試應用程序,如查看變量,源代碼級單步執行等。同時(shí)可以進(jìn)一步將gdb調試內嵌到到集成開(kāi)發(fā)環(huán)境中,從而獲得更直觀(guān)、更友好的人機界面,此時(shí)用戶(hù)的操作全部是在圖形界面下完成,無(wú)需了解V8MON的任何操作細節。

  3 設計實(shí)現

  V8MON大部分由C語(yǔ)言編寫(xiě),使用gcc編譯器編譯生成,鏈接了readline、pthread等系統庫,并且對gdbserver、utils等開(kāi)源軟件包進(jìn)行了移植。以下是工程的主Makefile文件內容:

  V8MON內部可以分為3層,包括:命令層,調試驅動(dòng)層和調試接口層。

  (1) 命令層:由命令解析器組成,可以解析一般通用的用戶(hù)命令以及GDB命令,例如:下載、運行等。

  (2) 調試驅動(dòng)層:實(shí)現特殊的命令,這些命令與目標處理器的構造相關(guān)。V8MON在啟動(dòng)的時(shí)候會(huì )掃描目標硬件,檢測當前處理器類(lèi)型及其配置,如果是支持的處理器,調試驅動(dòng)層激活,可以執行特殊的調試命令。

  (3) 接口驅動(dòng)層:實(shí)現調試連接協(xié)議(DSU protocol),通過(guò)協(xié)議與目標系統的DSU單元通訊。

  可以看到V8MON的主要工作就是命令/協(xié)議的解析以及傳遞,完成數據流由用戶(hù)接口到目標系統之間的雙向傳輸。下圖指明V8MON內部的數據傳遞流程,方框中是各協(xié)議層數據的原始模型;示例條件為:gdb工作模式,通過(guò)串口連接目標系統,用戶(hù)輸入內存查看命令。

  圖3 V8MON內部數據流

  4 應用舉例

  通過(guò)V8MON的命令行操作,用戶(hù)可以開(kāi)速、簡(jiǎn)捷的完成調試操作,V8MON的主要操作項如下文。

  4.1 文件下載

  通過(guò)load命令可以將一個(gè)SPARC V8體系的應用程序下載到目標系統中:

 

 

  V8MON支持的文件格式為elf32-sparc。V8MON內建的ELF解析器,可以將程序的每個(gè)功能段正確的下載到對應的鏈接地址上,下載完成后程序運行時(shí)的%pc指針指向程序的入口地址。下載過(guò)程中,控制臺將輸出段地址、段字節大小、程序入口地址等信息。

  4.2 程序運行

  運行程序之前,必須先下載程序,而下載的程序必須確保是經(jīng)過(guò)sparc-rtems或sparc-elf工具鏈編譯得到。

 

  目標系統的UART1用來(lái)輸出應用程序的打印信息,這些信息并不能從V8MON的控制臺顯示,而如果使用-u參數啟動(dòng)V8MON,V8MON將初始化目標系統的UART1為回采模式,這樣DSU單元可以讀到從UART1輸出的信息,進(jìn)而可以在V8MON控制臺上把這些信息顯示出來(lái)。

  4.3 插入斷點(diǎn)和監測點(diǎn)

  程序下載完后,可以通過(guò)break或hbreak命令設置斷點(diǎn),其中break命令用來(lái)添加一個(gè)軟斷點(diǎn)(ta 1),而hbreak命令是通過(guò)IU單元的watchpoint寄存器添加插入一個(gè)硬斷點(diǎn),在調試只讀代碼(如程序在ROM中運行)時(shí)只能使用硬斷點(diǎn)。

  一個(gè)斷點(diǎn)只能作用于一個(gè)字的地址,當程序運行到此地址時(shí),系統切換到調試模式。軟斷點(diǎn)可以設置在基于RAM的代碼段的任何位置,包括禁止trap的區域(如trap處理函數中);S698處理器提供兩個(gè)硬斷點(diǎn),設置硬斷點(diǎn)將凍結系統的trace buffer。

  例如添加斷點(diǎn)命令:


 
  查看寄存器

  在命令行下可以隨時(shí)輸入reg命令查看所有窗口寄存器的當前值:

  

  也可以使用 reg wn命令查看指定窗口寄存器的值,其中n表示窗口號。使用float指令可以查看FPU寄存器的值(存在FPU運算單元的前提下)。

  4.4 查看內存

  可以通過(guò)mem命令查看任何內存地址上的內容,mem命令的參數包括目標地址和長(cháng)度,這兩個(gè)參數都可以缺省。如果符號表被加載,可以使用文本符號代替地址。

 

  用戶(hù)也可以通過(guò)disas命令將內存中的內容反匯編成SPARC V8機器指令進(jìn)行顯示。

  4.5 使用trace buffer

  處理器中的trace buffer用來(lái)保存最近的執行指令以及最近的AHB總線(xiàn)上的傳輸數據,V8MON啟動(dòng)時(shí)自動(dòng)使能trace buffer,啟動(dòng)后用戶(hù)也可以通過(guò)tmode命令使能或禁止trace buffer。ahb/inst/hist分別用來(lái)顯示trace buffer中的內容。trace buffer在調試時(shí)可以起到輔助作用。

  4.6 多處理器支持

  在多核處理器(例如S698P4)系統中,可以使用cpu命令來(lái)切換各處理器的調試狀態(tài)。在對稱(chēng)多核處理器中,處理器的編號為0~n-1,n表示處理器個(gè)數。每個(gè)處理器可以設置為使能、禁止兩種狀態(tài),處理器使能后,將響應run、cont、go等命令。當處理器禁止時(shí),將處于掛起狀態(tài),不響應V8MON的任何指令。使用cpu enable n 命令將使能對應處理器,cpu disable n 命令將禁止對應處理器。系統允許同時(shí)有多個(gè)處理器被使能,但同時(shí)只能有一個(gè)處理器被激活。所有的調試命令如查看寄存器、增加斷點(diǎn)等只對被激活的處理器有效。

 

  可以使用gdb來(lái)調試多處理器系統,gdb連接后,當前被激活的處理器負責接收gdb命令。

  5 結束語(yǔ)

  調試器不僅是軟件除錯的工具,也是硬件除錯必不可少的工具,選好調試器、用好調試器、理解調試器的原理對嵌入式開(kāi)發(fā)工作都大有裨益。調試技術(shù)的理論基礎并不復雜,但是調試本身卻是一門(mén)實(shí)踐性非常強的技術(shù),只有在不斷的實(shí)際操作中才能取得進(jìn)步,希望本文的講解能夠起到拋磚引玉的作用,引導讀者進(jìn)入S698調試開(kāi)發(fā)之門(mén)。

  參考文獻:

  [1] 珠海歐比特控制工程股份有限公司. V8MON用戶(hù)手冊. 2009.

  [2] 珠海歐比特控制工程股份有限公司. S698-MIL芯片用戶(hù)手冊. 2011.

  [3] 珠海歐比特控制工程股份有限公司. ORION4.0 用戶(hù)手冊. 2005

  [4] THE SPARC-V8 ARCHITECTURE MANUAL, Version 8. SPARC International.

  [5] 蔣曉華,李付海,祁波. SPARC體系的S698系列SoC及其應用[J]. 單片機與嵌入式系統應用, 2007, 8: 84-85.

  [6] 龔永紅,梅衛平,蔣曉華,唐芳福等. 32位嵌入式處理器S698的SPARC V8指令集[J]. 新特器件應用,2007,11:25-28.

  [7] 蔣曉華,梁寶玉,王祝金,顏軍. S698系列處理器中指令流水的設計與實(shí)現[J]. 半導體技術(shù),2009,1:24-26.

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


c++相關(guān)文章:c++教程




關(guān)鍵詞: 調試器 V8MON 處理器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>