调试应用程序的时候最好有调试工具类似于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
编译结束,等待上板子调试。