Linux下交叉编译GDB

1、下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/2、解压缩:

$ tar jxvf gdb-7.2.tar.bz2

小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的:

xf(v),前者再加上j选项,后者再加上z选项。

3、进入该目录

$ cd gdb-7.2/

4、配置

$./configure –target=arm-linux –program-prefix=arm-linux- –prefix=/usr/armGDB

小技巧:–target=arm-linux意思是说目标平台是运行于ARM体系结构的linux内核;–program-prefix=arm-linux-是指生成的可执行文件的前缀,比如arm-linux-gdb,–prefix是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建,当然,权限足够的话。

5、编译、安装

$ make

注:这里会出现make[3]: Entering directory `/root/gdb-7.2/gdb’等的信息,不影响后续操作。。。

$ make install

同上

到此时会在–prefix指定的目录下生成三个子目录:bin、lib、share,我们需要的arm-linux-gdb就在其中的bin目录下。大约14MB大,我们可以使用strip命令为它瘦身:

$ strip arm-linux-gdb -o arm-linux-gdb-stripped$ ls -lh 总计 33M-rwxr-xr-x 1 root root 14M 03-26 09:53 arm-linux-gdb-rwxr-xr-x 1 root root 14M 03-26 09:53 arm-linux-gdbtui-rwxr-xr-x 1 root root 2.8M 03-26 09:53 arm-linux-run-rwxr-xr-x 1 root root 3.0M 03-26 09:57 arm-liunx-gdb-stripped

可以看到,strip后的文件大小只有3.0MB,这个文件就是我们以后远程调试时在主机上运行的交叉调试器了:在主机上执行,调试的却是另一种体系结构的代码。但是,光有主机的调试器还不够。还需要在目标板上运行一个叫gdbserver的二进制文件。

1、在刚才那个gdb解压后的目录:gdb-7.2,进入./gdb/gdbserver子目录

cd gdb/gdbserver/pwd/root/gdb-7.2/gdb/gdbserver

2、配置

$ ./configure –target=arm-linux –host=arm-linux

这里的–host指定了生成可执行文件运行的平台和系统:运行于ARM平台的Linux系统3、编译

$ make

一切如果没有问题的话,会在当前目录下生成gdbserver这个只有在ARM下运行的文件。

注:网上绝大部分资料显示,这里的make会出错,linux-arm-low.c:26:21:sys/reg.h:没有那个文件或目录

make:***[linux-arm-low.o] Error 1。解决方法也简单,在配置后(执行./configure后),将生成的config.h文件中

#defineHAVE_SYS_REG_H1

语句注释掉即可。另外,也有资料说编译gdbserver需要指定交叉编译器(即执行make CC=arm-linux-gcc),但此处直接make,也没问题。当然,交叉编译器需要安装好并设置好环境变量。我们看一下这个是什么家伙:

$ file gdbservergdbserver:ELF32-bitLSBexecutable,ARM,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux 2.6.14, not stripped

32位,ARM平台,动态链接,未strip。同样,我们也减小它的体积:

$ arm-linux-strip gdbserver -o gdbserver-stripped$ ls -lh | grep gdbserver -rwxrwxr-x 1 root root 552K 03-26 10:03 gdbserver-rw-rw-rw- 1 9176 65490 4.5K 2005-12-24 gdbserver.1-rwxr-xr-x 1 root root 170K 03-26 10:05 gdbserver-stripped

注意,这里必须使用strip的交叉版本,也就是arm-linux-strip。

到此,我们生成了两个重量级别的文件:arm-linux-gdb和gdbserver,我们需要将gdbserver下载到开发板中——可以通过各种各样的手段,包括但不限于NFS。调试时需要在开发板中运行这个程序,同时在主机中执行arm-linux-gdb调试器。

4、调试过程

目标板IP:192.168.1.12

宿主机IP:192.168.1.17test为带调试信息的测试程序

目标板上运行:./gdbserver 192.168.1.17:80000 test

宿主机上运行:arm-linux-gdb //在/usr/armGDB/bin目录下target remote 192.168.1.12:80000

就可以使用gdb的命令调试了。

少一点预设的期待,那份对人的关怀会更自在

Linux下交叉编译GDB

相关文章:

你感兴趣的文章:

标签云: