linux gdb遠程調試 mips

1、從http://www.gnu.org/software/gdb/ 下載 gdb-6.8.tar.gz


2、tar -zxvf gdb-6.8.tar.gz 進行解壓後(這句是不是有點羅嗦了。。。嘿)


3、cd gdb-6.8/



4、./configure


注意!,這個腳本命令後面是帶參數的。如果不帶參數,則默認以源碼所在系統環境爲編譯環境。比如,我的虛擬機上的 REDHAT LINUX 是 i686-pc-linux-gnu ,如果需要一個 x86 平臺的 GDB ,那直接運行這個命令,然後再 make 就可以了。我試過,很輕易就編譯過了。



5、不過我需要的是兩個類型,一個是 mips 的 GDB ,一個是 mips 的 GDBSERVER ,還有一個是交叉編譯出來的配置爲 --host=i686-pc-linux-gnu --target=mipsel-linux 的 GDB 。這三個東西,mips 的 GDB 是用在非 GDBSERVER 模式下的。而以 --host=i686-pc-linux-gnu --target=mipsel-linux 配置編譯出來的 GDB 則作爲 GDBSERVER 模式的服務器端(因爲我虛擬機上的系統是x86的),而 mips 的GDBSERVER 在目標板上作爲客戶端。



6、首先


 ./configure --host=mipsel-linux --target=mipsel-linux  CC=mipsel-linux-gcc


make


編譯中會提示 no termcap library found


google 一下,發現很多說法,搞的我頭大。其實很簡單,去下載一個 termcap-1.3.1 的包,因爲我們這裏是需要mips的靜態庫。所以也是一樣用上述的參數,編譯生成一個 libtermcap.a。具體編譯生成的方法就不細說了。要驗證是否生成了mips的庫,只要用 ar -x libtermcap.a 解開,然後用 file 命令查看 termcap.o 的類型是否爲 mips 即可。


然後,就是要把庫放到合適的位置,使make能夠找到這個庫。不過我是直接拷到 /usr/lib/ 下的。但是這樣還不行,make 一下,還是提示找不到。所以就搜了一下,是哪裏連接這個庫的。在 gdb/configure 腳本里有這樣一段:


case $host_os in
 cygwin*)
   if test -d $srcdir/libtermcap; then
     LIBS="../libtermcap/libtermcap.a $LIBS"
     ac_cv_search_tgetent="../libtermcap/libtermcap.a"
   fi ;;
 go32* | *djgpp*)
   ac_cv_search_tgetent="none required"
   ;;
 *mingw32*)
   ac_cv_search_tgetent="none required"
   CONFIG_OBS="$CONFIG_OBS win32-termcap.o"
   ;;
esac



我把這段都註釋掉。然後加上



ac_cv_search_tgetent="/usr/lib/libtermcap.a"
這邊就編譯過了。接着呢,


/usr/tools/mipsel-linux/include/sys/ptrace.h 又報語法錯。。。



這時候可以把 make 打印出的信息中的報錯部分的mipsel-linux-gcc ....的這部分拷貝下來。然後把 -c 參數改爲 -E 參數,進行預編譯。重定向到比如 1.txt 中。發現 ptrace.h 裏面的聯合 enum{ 1=1,...}那肯定會報錯了。可是怎麼會 "1=1" 呢。說明是有地方重複 define 了。



在 /usr/tools/ 下和 gdb 編譯目錄下,查找 PTRACE_TRACEME 字段。結果發現在 /usr/tools/mipsel-linux/include/linux 下也有個 ptrace.h 裏面 define 了 PTRACE_TRACEME 。用 -M 參數,打印出當前這個文件所引用的頭文件,確認這個 ptrace.h 也被包含了。解決辦法就是不要讓程序包含這個重複的頭文件。



搞定之後,繼續make。發現有warning被treat成erro,則所編譯文件下的makefile,將


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章