对于嵌入式GDB而已,分为两种,这两种方法的的区分是鉴于使用和编译后的工具而言。
1、第一种是开发板上使用的GDB,就像PC机上Linux系统使用GDB一样。
2、第二种是开发板上使用单板的GDB Client,PC机上使用PC版本GDB Server。两者通过网络来交互信息实现调试。
笔者调试是使用的第一种,这里也主要介绍第一种gdb的编译方法。
Ø 下载最新的gdb源代码,目前最新的版本为7.8:http://ftp.gnu.org/gnu/gdb/
Ø 添加交叉编译链到环境变量,即将交叉编译链所在的文件路径加到环境变量中:
如:
export PATH=/opt/freescale/usr/local/gcc-4.1.78-eglibc-2.5.78-dp-1/powerpc-linux-gnuspe/bin:/opt/freescale/usr/local/gcc-4.1.78-eglibc-2.5.78-dp-1/powerpc-linux-gnuspe/powerpc-linux-gnuspe/bin:$PATH
Ø 进入gdb目录,执行
./configure--host=powerpc-linux-gnuspe --enable-shared --prefix=/home/gdb CC=powerpc-linux-gnuspe-gcc
其中:
--enable-shared 动态编译
--host= 用powerpc-linux-gnuspe-gcc编译,注意该选项不是任意自己定,而是根据交叉编译链的名字取其前缀,如笔者MPC8548交叉编译链名称为powerpc-linux-gnuspe-gcc则host定义为powerpc-linux-gnuspe
--prefix= 安装目录
cc 表示gcc文件名
待Linux会自动配置文件生成Makefile文件后执行make,如果没有异常情况,经过漫长的等待之后就会正常生成单板可运行的gdb交叉编译文件,执行make install后在prefix定义的目录的/home/gdb/bin目录下就能看的生成的gdb,但往往在编译的时候都会报下面这个错:
make[1]: *** [configure-gdb] Error 1
configure: error: no termcap library foundmake[1]: ***[configure-gdb] Error 1
这是因为大多数交叉编译链工具都没有包含termcap这个lib库,而编译gdb需要用到这个库的接口。需要先交叉编译这个库后放入到交叉编译链的lib库中。
- 下载termcap源代码:ftp://ftp.gnu.org/gnu/termcap
- 解压termcap包,进入termcap包以后使用/configure命令配置生成Makefile:
./configure --target= powerpc-linux-gnuspe --prefix=/home/termcap
- 手动修改Makefile:CC=powerpc-linux-gnuspe-gcc
- 执行make,然后makeinstall,在/home/termcap目录就可以看到交叉编译生成的libtermcap.a
到交叉编译器文件夹下搜索包含libc.a的目录:find –name libc.a,搜索到之后将libtermcap.a拷贝到其中,如果搜索到多个不确定哪个目录那就都拷贝一份。
重新到gdb目录执行make,然后makeinstall,/home/gdb/bin下生成的gdb是包含了gcc编译调试信息的gdb,文件比较大,执行下面命令,压缩去除多余调试信息:
# powerpc-linux-gnuspe-stripgdb -o gdb-stripped
检查一下编出来的文件信息,可以看到:
# file gdb-stripped
gdb-stripped: ELF 32-bit MSB executable, PowerPC or cisco 4500,version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0,stripped
至此gdb交叉编译完毕,将gdb-stripped拷贝到单板即可运行。