<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S698系列處理器軟件調(diào)試工具V8MON的設(shè)計(jì)與應(yīng)用

          S698系列處理器軟件調(diào)試工具V8MON的設(shè)計(jì)與應(yīng)用

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

            1 引言

          本文引用地址:http://www.ex-cimer.com/article/139098.htm

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

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

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

            2 調(diào)試原理

            2.1 交叉調(diào)試

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

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

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

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

            圖1 V8MON連接結(jié)構(gòu)圖

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

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

            2.2 gdb連接

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

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

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

            圖2 V8MON GDB模式調(diào)試原理框圖

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

            3 設(shè)計(jì)實(shí)現(xiàn)

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

            V8MON內(nèi)部可以分為3層,包括:命令層,調(diào)試驅(qū)動(dòng)層和調(diào)試接口層。

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

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

            (3) 接口驅(qū)動(dòng)層:實(shí)現(xiàn)調(diào)試連接協(xié)議(DSU protocol),通過協(xié)議與目標(biāo)系統(tǒng)的DSU單元通訊。

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

            圖3 V8MON內(nèi)部數(shù)據(jù)流

            4 應(yīng)用舉例

            通過V8MON的命令行操作,用戶可以開速、簡(jiǎn)捷的完成調(diào)試操作,V8MON的主要操作項(xiàng)如下文。

            4.1 文件下載

            通過load命令可以將一個(gè)SPARC V8體系的應(yīng)用程序下載到目標(biāo)系統(tǒng)中:

           

           

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

            4.2 程序運(yùn)行

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

           

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

            4.3 插入斷點(diǎn)和監(jiān)測(cè)點(diǎn)

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

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

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


           
            查看寄存器

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

            

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

            4.4 查看內(nèi)存

            可以通過mem命令查看任何內(nèi)存地址上的內(nèi)容,mem命令的參數(shù)包括目標(biāo)地址和長度,這兩個(gè)參數(shù)都可以缺省。如果符號(hào)表被加載,可以使用文本符號(hào)代替地址。

           

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

            4.5 使用trace buffer

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

            4.6 多處理器支持

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

           

            可以使用gdb來調(diào)試多處理器系統(tǒng),gdb連接后,當(dāng)前被激活的處理器負(fù)責(zé)接收gdb命令。

            5 結(jié)束語

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

            參考文獻(xiàn):

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

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

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

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

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

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

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

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


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




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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();