




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Translated By LinFangquan and KongLiGDB遠程串行協(xié)議RSP是一系列的基于GNU的嵌入式開發(fā)系統(tǒng)的一部分,作者提出了他自己使用GDB遠程地調(diào)試嵌入式應(yīng)用的一些論述。在9月份,我介紹了GDB。我論述了它的遠程調(diào)試是如何能夠調(diào)試執(zhí)行在一個通過串口或者以太網(wǎng)或者其他方式連接到PC上的嵌入式系統(tǒng)上的代碼的。盡管也存在著具有這種能力的商業(yè)的產(chǎn)品,但是在我的心目中,免費的GDB是一個很不錯的解決方案,因為它提供了一個輕型的、功能強大的調(diào)試器,它可以工作在嵌入式系統(tǒng)的廣大的范圍上,包括驅(qū)動通訊接口或者資源受限無法得到一般商業(yè)化的產(chǎn)品的支持。在那篇文章我還提到了,為了實現(xiàn)遠
2、程調(diào)試,gdb需要一個服務(wù)調(diào)試代理一個很小的代碼庫,它在被調(diào)試的目標機器上管理寄存器和主存,通過通信鏈接響應(yīng)斷點,向gdb報告應(yīng)用的狀態(tài)。那篇文章包括了SH-2微控制器的調(diào)試樁的一個摘要,但是我實際上在那里并沒有打算詳細地說明一個完整的調(diào)試樁是如何工作的。我將在本月的GDB RSPgdb的標準遠程通信協(xié)議一文(本文)中詳細說明。如果你對于你的處理器處理斷點和其它事件很滿意,那么你需要掌握的全部知識是一些基本的RSP消息格式,它可以讓你的嵌入式系統(tǒng)和gdb對話。協(xié)議定義RSP是一種簡單的基于ASCII編碼的協(xié)議,它使用串口,局域網(wǎng)或者其它任何支持半雙工數(shù)據(jù)交換的通訊方式。RSP報文以一個美元符(
3、$)開頭,接著是若干個ASCII字節(jié)流,它們是消息的主體,最后以一個井號符(#)結(jié)束,兩個ASCII十六進制的字符作為消息的校驗和附在消息的后面。例如,下面是一個完整的RSP消息包:$m4015bc,2#5a接收者接到消息之后,立刻回復一條消息內(nèi)容為”+”或者“-”,以表示他正確無誤地收到消息(校驗通過),或者接收失敗。一個典型的事件是,gdb給調(diào)試目標發(fā)出調(diào)試命令,調(diào)試目標接收消息,并返回一個簡單的確認或者錯誤碼。如果是后者被返回了,gdb將報告給使用者(程序員),并且暫停一切正在活動的進程??刂婆_輸出消息,調(diào)試目標會輸出文本到gdb的控制臺,輸出內(nèi)容是典型的命令-確認信息的順序。除非當另一
4、個命令已經(jīng)在執(zhí)行,否則這個消息可以在任何時候從調(diào)試樁發(fā)送到gdb。接下來的段落,描述了RSP若干常用命令。為了說明的需要,我將RSP消息分為三類:寄存器和主存相關(guān)的命令,程序控制命令和其它命令。寄存器和主存相關(guān)命令以下是讀寫寄存器的命令Read registers (“g”)Example: $g#67當它想要知道調(diào)試目標當前寄存器的所有信息時,gdb會發(fā)送這條命令。以下是一個目標應(yīng)答消息的例子:+ $123456789abcdef0.#xx(0號寄存器(譯者按:32位寄存器)內(nèi)容為: 0 x12345678,1號寄存器內(nèi)容為: 0 x9abcdef0, 以此類推)這個應(yīng)答是一個有序的字節(jié)流,
5、它順序地指出了寄存器的數(shù)據(jù),按照目標宏文件(gdb/config/tm-.h (例如, Hitachi SH的目標宏文件gdb/config/sh/tm-sh.h))中定義的順序。Write registers (“G”)Example: $G123456789abcdef0.#xx(Set register 0 to x12345678, register1 to 0 x9abcdef0, 以此類推)這個消息是和讀寄存器命令互補的。通過這條命令,gdb提供了一個順序的字節(jié)流,它將要存儲到目標處理機的寄存器中的數(shù)據(jù)在程序執(zhí)行中斷前立即寫入。一個應(yīng)答消息的例子:+ $OK#9aWrite reg
6、ister N (“P”)Example: $P10=0040149c#b3(Set register 10(注意是16進制0 x10) to the value 0 x0040149c.)一個返回應(yīng)答:+ $OK#9a以下是讀寫主存的幾條命令。Read memory (“m”)Example: $m4015bc,2#5a (從地址0 x4015bc開始,讀兩個字節(jié)的內(nèi)容。)一個應(yīng)答消息示例:+ $2f86#06Write memory (“M”)Example: M4015cc,2:c320#6d(將長度為2個字節(jié)的0 xc320寫入主存0 x4015cc中)一個應(yīng)答消息示例:+ $OK#9
7、a程序控制命令程序控制命令是gdb用來控制目標機被調(diào)試的應(yīng)用的行為的消息。這些命令要比上面講述的寄存器-主存控制命令要稍微復雜一些。Get last signal (“?”)Example: $?#3f這條命令用來找出目標機是如何到達當前狀態(tài)的。Step (“s”)Example: $s#73當用戶發(fā)出單步調(diào)試Step命令時,gdb向目標機發(fā)送。Continue (“c”)Example: $c#63當用戶發(fā)出Continue命令時,gdb向目標機發(fā)送?!癓ast signal” response (“S”)Example: $S05#b8Expedited response (“T”)Exa
8、mple: $T0510:1238;F:FFE0.#xx其它命令Console output (“O”)optionalExample:$O48656c6c6f2c20776f726c64210a#55(Prints “Hello, world!n” on the gdb console)其它命令控制臺輸出(”O(jiān)”)非強制的例:$048656c6c6f2c20776f726c64210a#55(在控制臺顯示“Hello World!n”) 這條命令讓gdb調(diào)試樁向gdb控制臺發(fā)送一個文本信息,這些顯示在控制臺上的符號對應(yīng)它們16進制的ASCII碼(H=0 x48)。Gdb會連續(xù)接收信息直到遇見
9、換行符(n,0 x0a)。 這類信息一般是來源于目標機;gdb從不會向目標機上發(fā)送控制臺輸出信息??枕憫?yīng)(” ”) 如果調(diào)試樁遇到不支持或無法識別的命令,它會返回一個空響應(yīng)。Gdb在接收到空響應(yīng)后,如果有相似的命令則會選擇相似命令。例:目標機響應(yīng):+ $#00錯誤響應(yīng)(”E”) 當調(diào)試樁在命令執(zhí)行過程中遇到一個錯誤時,它必須向gdb返回一個錯誤報告。在內(nèi)存操作中,總線錯誤和/或非法地址就是典型的例子。此時,調(diào)試樁會向gdb發(fā)送一個錯誤報告。例:目標機響應(yīng):+$E01#xx 并非所有錯誤gdb都進行過預(yù)定義;當gdb接收到錯誤報告時,它將會把信息顯示在控制臺上并中斷正在執(zhí)行的操作。總結(jié) 現(xiàn)在,我
10、已經(jīng)將所有在嵌入式系統(tǒng)與gdb通信過程中所需要的基本知識分別介紹過了。在上一篇文章中,我介紹了陷阱報文,單步執(zhí)行和一些gdb特性;在上面的章節(jié)中,我還介紹了gdb與調(diào)試樁之間的通信協(xié)議?,F(xiàn)在我們要做的就是把和諧分立的信息總結(jié)在一起。 實際上,在真正開始調(diào)試前,我們還要解決一個次要問題:雞和蛋的問題,即在第一次通信時將調(diào)試樁下載進嵌入式系統(tǒng)從而為以后建立通信打下基礎(chǔ)。 為了解決這個問題,可以有多種方法。對于我,最簡單的方法就是將最簡化的調(diào)試樁固化到目標機上的非易失性存儲器中,用這些代碼啟動嵌入式系統(tǒng)并協(xié)助下載余下的信息到RAM中。當gdb啟動應(yīng)用程序時,gdb的控制命令傳輸?shù)降诙€與應(yīng)用程序本身
11、相連的調(diào)試樁。 這個方法的最大優(yōu)點在于,可以使用戶繼續(xù)改進開發(fā)與應(yīng)用程序綁定的調(diào)試樁代碼,而不需要重新編輯在目標機非易失性存儲器中的代碼,尤其是對于那些非易失性存儲器是一次性ROM的目標機。另外,由于固化在目標機上的調(diào)試樁代碼只包含最簡單的命令讀/寫內(nèi)存,寫寄存器和單步執(zhí)行等,在這一塊出現(xiàn)嚴重錯誤的概率也會很低。 另一種方法是將整個調(diào)試樁固化到目標機中并使用它執(zhí)行所有調(diào)試指令。這種方法不需要將目標機應(yīng)用程序綁定一個調(diào)試樁。然而在固化程序出錯或者要添加新的功能時就會顯示出起的缺點。 如果你使用的是商用的微處理器插板,你可能根部不需要自己編寫調(diào)試樁,因為gdb本身已經(jīng)支持供應(yīng)商的標準,或者你只要通
12、過串口分析工具為開發(fā)板提供支持gdb的環(huán)境。測試調(diào)試樁 如果你已經(jīng)有一個調(diào)試樁就緒,你必須在投入使用之前對其進行測試。 下面是我推薦的一種測試流程。無論你什么時候?qū)φ{(diào)試樁進行修改,記住要使它們實現(xiàn)所需的功能。 第一步,為了方便起見,將下面的內(nèi)容加入到你的gdbint文件中:set remotedebug 1set remotelogfile gdb_logfile這些命令讓gdb顯示宿主機和目標機之間所有的RSP信息,并把它們記錄到文件gdb_logfile中。 第二步,將gdb與遠程目標相聯(lián),輸入命令“target remote port”。因為gdb進行連接,觀察兩者之間的交互信息以保證你
13、的調(diào)試樁能夠?qū)db的命令做出正確回應(yīng)。 在啟動的過程中,你的調(diào)試樁需要將所有數(shù)據(jù)載入到每個處理器的寄存器中。使用gdb的” info registers”命令來保證gdb能夠正確的接收和顯示這些數(shù)據(jù)。 第三步,使用gdb的set命令來改變一些寄存器的值,保證調(diào)試樁既能準確響應(yīng)write register命令,同時能在以后的read register命令中返回正確結(jié)果。 第四步,對內(nèi)存做相似的工作。舉個例子:print *(long*)0 x1234set *(long*)0 x1234=5678print *(long*)0 x1234 如果所有工作都能正常工作,你就可以試驗gdb的load命令。這時控制臺上的顯示會非常雜亂無章,你需要借助log文件。一旦這一步完成,檢查一些內(nèi)存位置的值以保證有期望的數(shù)值。 如果你的調(diào)試樁支持控制臺輸出功能,那么你的測試要包含一些gdb控制臺輸出。在控制臺輸入continue,看輸出結(jié)果是否是你所期望的。 復位目標平臺,再裝入測試程序。在控制臺輸出命令前的一行設(shè)置斷點。再輸入continue,核實斷點是否在正確位置以及程序恢復后其輸出是否正確。 接著,重新載入測試程序,在次設(shè)置斷點,設(shè)在有變量的行,檢查程序的變量變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國地理讀后感
- 《數(shù)學競賽題庫設(shè)計與復習教學教案》
- 大宗商品貿(mào)易管理流程手冊
- 委托貸款借款合同
- 農(nóng)產(chǎn)品質(zhì)量安全追溯手冊
- 互聯(lián)網(wǎng)軟件開發(fā)合同協(xié)議
- 綠化工程承包合同協(xié)議
- 提高農(nóng)產(chǎn)品品質(zhì)的智能種植管理技術(shù)應(yīng)用研究
- 醫(yī)療健康數(shù)據(jù)分析協(xié)議
- 智慧城市物聯(lián)網(wǎng)建設(shè)合作協(xié)議
- 2024年江蘇食品藥品職業(yè)技術(shù)學院單招職業(yè)技能測試題庫有完整答案
- 區(qū)塊鏈與人工智能的融合
- 員工服務(wù)意識提升提高服務(wù)意識培訓課件
- 2024年黑龍江農(nóng)業(yè)工程職業(yè)學院單招職業(yè)適應(yīng)性測試題庫1套
- 學前兒童游戲智慧樹知到期末考試答案章節(jié)答案2024年麗水學院
- 2023-2024學年高中政治統(tǒng)編版必修三第四課 人民民主專政的社會主義國家 同步練習
- ERP原理及應(yīng)用教程(第四版)全套教學課件
- 湖州市第七屆“期望杯”小學數(shù)學競賽試題(六年級)附參考答案
- 壓力容器作業(yè)人員培訓課件下
- 【初中數(shù)學】你有多少種畫平行線的方法課件 2023-2024學年人教版數(shù)學七年級下冊
- 第三單元簡易方程(二)(知識精講+典題精練)-2023-2024學年五年級下冊數(shù)學高頻考點重難點講義(滬教版)
評論
0/150
提交評論