首先说明一下,这篇文章是参考论坛里的一篇文章,但是它有一些错误,害的我找了半天才纠正过来。。。
1、说明:
开发板:mini2440
交叉编译工具:arm-linux 4.3.2
gdb版本:gdb-6.6
2、首先是以上的这些东西你都要准备好,然后才能往下进行。
简要说明一下gdb-6.6的安装
首先是下载GDB
GDB官方下载
我下载的是GDB6.7,不要下载最新的,因为最新的容易有bug。我已经事先安装好了arm-linu-交叉工具,版本是4.3.2,等会编译的时候要用到。linux平台是rhel5.5
解压到/opt目录下
|
3. 建立配置文件、编译
gdb允许把编译配置和编译结果放到任意的目录,因此可以在gdb目录之外建立一个专门存放编译结果的目录。
|
cd /opt/arm-gdb/bin
cp arm-linux-gdb /usr/bin
4. gdbserver的移植
gdbserver要用到gdb源码目录下的一些头文件,因此无法在gdb源码目录之外编译文件。
|
5. 使用gdbserver
5.1 首先要把上一步编译出来的gdbserver拷贝到开发板的根目录。
|
5.2 准备条使用示例程序,代码如下
|
然后对其编译,注意一定要加上调试选项 -g
|
将最后生成的可执行文件拷贝到开发板的根目录下
5.3 启动开发板,准备调试。
我的开发板是mini2440,官方给的资料很好,可以直接以NFS方式启动开发板,所以,mini的兄弟们,你们都懂的。。。*……*……*
好的。说一下我的启动选项,
开发板 IP:192.168.1.70(启动时的临时 IP )
主 机 IP:192.168.1.168
5.4开始真正的调试
如果你都按照我的操作来的话,即:
- 已经将编译好的gdbserver放到了开发板的根目录。对于我的mini2440开发板来说,放在了:/opt/friendlyARM/mini2440/root_qtopia
- 同时你的hello示例程序也要放在这个目录。
5.4.1 在开发板启动调试:
在开发板输入:
#./gdbserver 192.168.1.168:1234 hello
|
192.168.1.168是我的linux主机的IP地址,1234是端口号,随意设置,这个在下面会用到的。
的
然后在你的linux主机的NFS目录下,注意,必须是你开发板NFS挂载的目录下运行
arm-linux-gdb hello
|
然后主机会提示如下信息:
|
其中
--host=i686-pc-linux-gnu --target=arm-linux"...指明了 host主机是PC机器,而目标主机是ARM
然后,通过在输入如下指令才能够执行程序:
|
192.168.1.70是我的开发板的IP地址,1234必须和ARM终端上输入的一致才行。
到这个时候,linux主机提示
|
而ARM开发板则显示:
|
到这个时候,开发板和linux的GDB连接才真正建立起来。下面就是调试了。
6.具体的调试
等连接建立起来之后,你就可以在你的Linux下调试ARM程序了。
6.1 例如输入 list(或者 l ) ,则会显示你要调试的代码
|
|
6.3 输入 c 则是继续运行代码。因为你的程序已经事先在ARM开发板上运行起来了,只能conginue
|
6.4 输入q 则是退出gdb调试程序
|
至此就完成了GDB调试。
7.你也可以使用图形化的DDD来调试
7.1 首先在开发板上运行gdbserver,参照上面的命令。
7.2其次,在linux下相应的目录下输入一下命令。
|
然后在gdb窗口输入远程连接mini2440的命令。
|
就可以调试了
8.另外。在安装gdb 7.2的时候,编译安装gdbserver的时候,有个小错误提示:
/usr/bin/install: 无法 stat “libinproctrace.so”: 没有那个文件或目录
解决办法是:
修改gdb/gdbserver/Makefile.in文件,找到这句:
if [ x$IPA_DEPFILES != x ]; then \
原文是这样改的:
if [ x"$(IPA_DEPFILES)" != x ]; then \
但是我觉得不好看,我把这句改为:
if [ x${IPA_DEPFILES} != x ]; then \ 注意:把 IPA_DEPFILES两边换成{}
这下编译安装就没有问题了。