|
遠程調(diào)試環(huán)境由宿主機GDB和目標機調(diào)試stub共同構(gòu)成,兩者通過串口或TCP連接。使用GDB標準程串行協(xié)議協(xié)同工作,實現(xiàn)對目標機上的系統(tǒng)內(nèi)核和上層應用的監(jiān)控和調(diào)試功能。調(diào)試stub是嵌入式系統(tǒng)中的一段代碼,作為宿主機GDB和目標機調(diào)試程序間的一個媒介而存在。 行GDB調(diào)試,目標系統(tǒng)必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發(fā)行版中都有一個可以運行的gdb,但開發(fā)人員不能直接使用該發(fā)行版中的gdb來做遠程調(diào)試,而要獲取gdb的源代碼包,針對arm平臺作一個簡單配置,重新編譯得到相應gdb。gdb的源代碼包可以從http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,最新版本為gdb-6.4。下載到某個目錄,筆者下載到自己的用戶目錄:/home/vicky。 下載完后,進入/home/vicky目錄,配置編譯步驟如下: #tar jxvf gdb-6.4-tar-bz2 #cd gdb-6.4 #./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v #make (這一步的時候可能會有問題,提示一個函數(shù)中(具體函數(shù)名不記得了)parse error,就是unsigned前邊多了一個”}”,你用vi進入那一行把它刪掉就行了。) #make install #export PATH=$PATH:/usr/local/arm-gdb 進入gdbserver目錄: #./configure --target=arm-linux –host=arm-linux #make CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc (這一步要指定arm-linux-gcc的位置,可能跟你的不一樣) 沒有錯誤的話就在gdbserver目錄下生成gdbserver可執(zhí)行文件,把它燒寫到flash的根文件系統(tǒng)分區(qū),或通過nfs mount的方式都可以。只要保證gdbserver能在開發(fā)板上運行就行。 下面就可以用gdb+gdbserver調(diào)試我們開發(fā)板上的程序了。在目標板上運行g(shù)dbserver,其實就是在宿主機的minicom下,我的red hat linux裝在vmware下的。我是在minicom下#mount 192.168.2.100:/ /tmp后做的(這里參數(shù)-o nolock可以不加,不加這一步執(zhí)行得反而更快些),hello和gdbserver都是位于linux根目錄下,把主機根目錄掛在到開發(fā)板的/tmp 目錄下。 要進行g(shù)db調(diào)試,首先要在目標系統(tǒng)上啟動gdbserver服務。在gdbserver所在目錄下輸入命令: (minicom下) #cd /tmp #./gdbserver 192.168.2.100:2345 hello 192.168.2.100為宿主機IP,在目標系統(tǒng)的2345端口開啟了一個調(diào)試進程,hello為要調(diào)試的程序。 出現(xiàn)提示: Process /tmp/hello created: pid=80 Listening on port 2345 (另一個終端下) (GDB) target remote 192.168.2.223:2345 (192.168.2.223為開發(fā)板IP) 出現(xiàn)提示: Remote debugging using 192.168.2.223:2345 [New thread 80] [Switching to thread 80] 0x40002a90 in ??() 同時在minicom下提示: Remote debugging from host 192.168.2.100 (gdb) 連接成功,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程序調(diào)試了。 以上針對通過nfs mount和tftp的方式,只能在主機上調(diào)試好后下載到開發(fā)板上運行,如果有錯誤要反復這個過程,繁瑣不說,有些程序只能在開發(fā)板上調(diào)試。所以筆者采用了gdbserver的遠程調(diào)試方式。希望對大家調(diào)試程序有用! |
|
|