建立ARM+Linux应用程序调试环境
Gdb+gdbserver+insight环境的搭建
1. 下载gdb源代码 http://ftp.gnu.org/gnu/gdb/
2. 配置安装gdb+gdbser
$ tar jxvf gdb-6.6.tar.bz2
$ cd x/gdb
$ ./configure --target=arm-linux --prefix=/usr/local/arm-gdb –v
--prefix用于指定安装路径
--target=arm-linux 用于制定目标环境的编译
编译, $ make
安装, $ sudo make install
之后在x/bin文件夹下生成arm-linx-gdb可执行文件.
$ cd gdbserver
配置文件:
$ ./configure --target=arm-linux --host=arm-linux
(--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb,不 需要配置—prefix,因为gdbserver不在主机端安装运行)
$ make CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
(这一步要指定你自己的arm-linux-gcc的绝对位置,相对的通常不行,提示make: arm-linux-gcc: Command not found,如果用的相对路径,即直接赋值arm-linux-gcc,可采取make时传递参数,也可以直接修改gdbserver目录下的Makefile文件中的环境变量CC)
之后在gdbserver目录下生成gdbserver可执行文件.
可将它通过nfs拷贝到目标板上运行.
如:mount –t nfs host:/friendly-arm/root /mnt –o ro,nolock
这里如果没有加上选项 –o ro,nolock 无法正常mount.
@在目标板上运行
(1)将要调试的文件和gdbserver放在同一个文件夹下
vivi> ./gdbserver host:port “待调试文件”
(2)在主机段执行 arm-linux-gdb “待调试文件”
(gdb)target remote client:port 连接客户机
注意:(1)在目标机上通过gdbserver调试的程序在gdbserver运行的时候已经运行了,并且其中不包含调试的符号信息,所以要想加入符号信息只能通过host运行的gdb加入含有调试信息的可执行文件。
(2)刚开始的时候将./gdbserver下载到目标机后不能运行,其主要原因就是所制作的网络根文件系统缺少libthread_db.so.1库文件。但是发现lib中并没有该文件,只有一个链接文件,通过file命令查看:
[root@localhost lib]# file libthread_db.so.1
Libthread_db.so.1: symbolic link to libthread_db-1.0.so
发现该链接文件链接到libthread_db-1.0.so该库文件,于是将文件libthread_db-1.0.so拷贝到根文件系统,然后改名为Libthread_db.so.1,之后gdbserver能正常运行了.
3. 安装gdb图形调试界面insight (gtk 软件包)
下载地址:http://sourceware.org/insight/ 版本为:insight-6.6.tar.bz2
$ tar –jxvf insight-6.6.tar.bz2
$ cd insight-6.6
配置文件:
$ ./configure --target=arm-linux --enable-sim --prefix=/usr/local/arm/insight
配置选项的解释同上.
编译, $ make
安装, $ sudo make install
注意:在第一次编译的时候老是出现问题,最后发现自己在装RedHat9.0的时候为了节省磁盘空间没有安装 gtk软件包,所以编译的时候会出错。但是在装了之后,再次编译insight-6.8.tar.bz2版本,出现了X参数未初始化的错误。然后重新换成insight-6.6.tar.bz2版本,编译成功,安装.
关于gdb远程调试参见:http://codex.wordpress.org.cn/GDB_Manual_17_1
剩下需要解决,就是busybox在minicom下如何终止程序的运行。