使用GDB調(diào)試嵌入式系統(tǒng)
——
本文將介紹在你的主站點上需要哪些軟件和嵌入式設(shè)備,這樣有助于你能夠使用GDB調(diào)試嵌入式代碼。
主機(jī)調(diào)試器
在主機(jī)站點上,你將必須需要一個GDB版本以作為目標(biāo)處理器的調(diào)試器。賣方提供的GNU GCC工具應(yīng)該附帶一個編譯好的可執(zhí)行的GDB,否則,你必須從RedHat下載源代碼或者需要一個GNU FTP,然后自己建立調(diào)試器。如果你要運行一個Linux主機(jī)或者一個Windows的Cygwin,建立調(diào)試器是一個相對簡單的過程。
目標(biāo)“樹樁(stub)”
GDB調(diào)試器與一個運行于目標(biāo)處理器的小“樹樁(stub)”交流。主機(jī)調(diào)試器與一個使用簡單的支持讀寫注冊表和內(nèi)存的協(xié)議交流。你將會發(fā)現(xiàn)GDB源目錄中有許多處理器體系的寫好的“樹樁”,比如sh-stub.c, i386-stub.c, and m68k-stub.c。
如果你沒有找到一個適合的“樹樁”,在SourceForge上檢查gdbstubs工程。你需要編譯和連接合適的“樹樁”到目標(biāo)嵌入程序和提供兩個通訊函數(shù):getDebugChar()和putDebugChar()。你的系統(tǒng)初始化代碼也會調(diào)用set_debug_traps()函數(shù)來初始化“樹樁”和安裝必要的調(diào)試異常處理。
編寫自己的“樹樁(stub)”
如果你無法找到已經(jīng)寫好的“樹樁”,你不得不自己編寫自己的“樹樁”。如果你對目標(biāo)CPUx體系很熟悉的話,這樣的工程也不是很復(fù)雜。最簡單的方法就是對現(xiàn)成的“樹樁”進(jìn)行更改。“樹樁”中絕大多數(shù)的代碼都與通訊協(xié)議有關(guān),可以可以不變地使用于不同處理器之間。
你將需要更改內(nèi)嵌匯編程序部分,這主要處理安裝和處理處理器的異常問題,包括斷點,單步,以及通用的保護(hù)錯誤。
異常處理相對比較簡單:它們必須將CPU注冊存放在一個靜態(tài)緩沖器,然后輸入handle_exception()函數(shù),這一函數(shù)帶有一個顯示異常原因的整數(shù)參數(shù)。handle_exception()函數(shù)然后取得對CPU的控制并處理與主機(jī)調(diào)試部分的所有通訊。你將需要對handle_exception()函數(shù)作一些特別是更改,但絕大部分的代碼都是可以利用的。
GDB的GUI
GDB是內(nèi)嵌命令的工具。如果你適合于這一水平的工作,你將發(fā)覺用戶界面對基本的調(diào)試任務(wù)非常的快捷和方便。如果你覺得更適應(yīng)使用GUI調(diào)試器,你也必須安裝GDB的GUI中的一個,比如Insight。
如果你對這方面更多的知識感興趣,請查看extensiv online documentation on GDB(GDB中廣泛在線文檔)。
David Brenan是一個具有15年經(jīng)驗的嵌入式系統(tǒng)開發(fā)人員,他的工作包括授過獎?wù)碌膶S脭?shù)字音頻產(chǎn)品的設(shè)計。
評論