調試應用程序的時候最好有調試工具類似於PC機上的GDB和DDD。寫這篇文章的原因也是想要調試應用程序,所以決心自己作一次開發板上GDB的移植。
網上相關的文檔很多。也很精闢,在這裏做一個彙總,以備後用。
GDB移植:
GDB移植其實分爲兩種,兩種方法的的區分是鑑於使用和編譯後的工具而言。
1,第一種是 開發板上使用ARM版的GDB,就像PC機上使用GDB。
2,第二種是 開發板上使用ARM版的GDB Client,PC機上使用PC版本GDB Server。兩者通過網絡來交互信息實現調試。
不管哪種方式來調試,首先要做的總是要實現編譯工具。網上很多的資料其實都介紹瞭如何編譯GDB,以及在編譯過程中遇到的問題。
本文主要介紹第一種GDB的編譯以及調試的方法。
OS :UBUNTU 10.04
CrossTools :arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar
編譯:
1,下載termcap-1.3.1.tar.gz
網上可以搜索到這個壓縮包的位置,在ftp://ftp.gnu.org/gnu/termcap/
可以使用IE登錄一下發現這個文件還真是很久以前的。
03/13/2002 12:00ÉÏÎç 439,416 termcap-1.3.1.tar.gz
08/17/1995 12:00ÉÏÎç 288,760 termcap-1.3.tar.gz
這裏使用wget命令:
wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
2,下載gdb-7.5.tar.bz2
下載地址:http://ftp.gnu.org/gnu/gdb/
gdb-7.5.tar.bz2 17-Aug-2012 13:58 20M
3,編譯
(1)編譯termcap如果沒有這個lib,如果沒有這個libtermcap.a則在編譯gdb時候會報錯:
make[1]: *** [configure-gdb] Error 1
configure: error: no termcap library foundmake[1]: *** [configure-gdb] Error 1
解壓termcap包,進入termcap包以後使用/configure命令:
./configure --target=arm-none-linux-gnueabi --prefix=/opt/termcap
make & make install
第一次編譯的時候沒有注意Makefile中的內容,在config之後發現了gcc還是gcc沒有變爲
arm-none-linux-gnueabi-gcc
arm-none-linux-gnueabi-ar
arm-none-linux-gnueabi-ranlib
之後第二次編譯時候,手動修改Makefile後,再編譯。prefix路徑中有了lib include info等文件夾。在lib文件夾中得到了編譯的libtermcap.a文件。
有了這個a文件後copy這個文件到交叉編譯的工具使用的lib中。網上介紹了一些XXXXXXX-linux-gcc -print-file-name libc.a。在2009的交叉編譯工具上使用後發現失敗。
應該arm-none-linux-gnueabi-gcc -print-file-name=libc.a。在=後面直接加上絕對路徑。這個路徑可以使用find –name libc.a
發現在三個文件路勁下都有這個文件:
arm-none-linux-gnueabi/libc/armv4t/usr/lib/
arm-none-linux-gnueabi/libc/usr/lib/
arm-none-linux-gnueabi/libc/thumb2/usr/lib/
把編譯好的libtermcap.a分別拷貝到以上三個路徑中。不知道交叉的編譯器到底是使用的那個lib,顧全部拷貝一次。
(2)編譯gdb,在編譯gdb時候關鍵是configure的配置腳本。
網上可以查到很多資料
--enable-shared 動態編譯
--host= 用arm-none-linux-gnueabi-gcc編譯
--prefix= 安裝目錄
--without-x 取消x windows 支持
--disable-gdbtk 取消gdbtk,應該也是圖形界面相關的
--disable-tui 取消tui 界面
--without-included-regex 關閉正則表達式庫
--without-included-gettext 去掉用於多語言處理的 gettext庫正則表達式/gettext,暫時不需要,先去掉
./configure --host=arm-none-linux-gnueabi --enable-shared --prefix=/output/arm --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS="=L /opt/ termcap/lib"
CPPFLAGS="-I /opt/ termcap/include"
LDFLAGS 和 CPPFLAGS可以不要,應爲在交叉編譯使用的lib中已經包含了libtermcap庫。
隨後make & make install,在prefix制定的目錄下可以找到想要的文件以及文件夾:
Bin include lib share
編譯結束,等待上板子調試。