1、本文概述及前期准备工作:开发板和宿主机需要使用网线联机调试,宿主机运行GDB,目标板运行GDBServer。 宿主机内核版本:Linux 2.6 目标板平台:arm-linux 交叉编译链:arm-linux-gcc Gdb版本:Gdb 7.4
2、Gdb,GdbServer介绍:gdb介绍:参见维基百科:http://zh./wiki/GDB gdbserver:http://en./wiki/Gdbserver 3、宿主机如何配置GDB:3.1、下载: http://ftp./gnu/gdb/ 选择相应的GDB版本 4、目标板安装配置GDBserver:目标板使用的GDBSServer需要交叉编译,我所使用的目标板平台为 arm-linux; 4.1 首先进入 gdb目录下的gdbserver目录中,即:cd gdb/gdbserver/ 4.2 在此目录下,配置 ./configure --target=arm-linux --host=arm-linux --target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb #make CC=arm-linux-gcc 由于我这里已经将交叉编译链目录添加到环境变量中,如果出现arm-linux-gcc not found 请使用绝对路径指明交叉编译工具链的位置; 但是这里可能会遇到一个错误,错误的信息如下:
linux-arm-low.c: In function `arm_stopped_by_watchpoint':
linux-arm-low.c:642: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)
linux-arm-low.c:642: error: (Each undeclared identifier is reported only once
linux-arm-low.c:642: error: for each function it appears in.)
错误的信息为:linux-arm-low.c中的一个PTRACE_GETSIGINFO未声明
解决方法如下:
既然这个C文件中没有声明,就去查找一下这个变量位置:
grep
"PTRACE_GETSIGINFO" * -nR
找到如下信息:
......
arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202
.......
说明PTRACE_GETSIGINFO是在交叉编译工具链:linux/ptrace.h文件里定义的
于是在linux-arm-low.c加上:#include <linux/ptrace.h>;
再次编译:#make CC=arm-linux-gcc
完成后,将生成的gdbserver复制到开发板;
5、宿主机+目标板连调:到目前为止我们需要的工具均已准备完成,可以进行最后的连接工作了; 当然之前我们还需要做一下热身工作: 1、需要使用GDB+GDBServer连调的程序,编译的时候请使用-g 选项; 2、将应用程序copy至宿主机arm-linux-gdb相同目录下: 热身工作完成,现在开始联机调试: 首先在目标板上运行gdbserver <主机IP:端口号> 需要连调的程序名 ,举个小例子:gdbserver 192.192.192.105:1234 test (test是我的示例联调程序) 如果权限不够,请自行chmod 这时打印信息 : Process test created;
pid = 751 切换到宿主机系统:使用./arm-linux-gdb test进入到gdb调试环境中: GNU
gdb (GDB) 7.4 这时,我们需要使用远程调试的命令: (gdb) target remote 192.192.192.200:1234 (IP为目标板IP,端口为刚才我们打开的目标板监听端口) 此时 目标终端打印命令:Remote debugging using 192.192.192.105:1234 连接成功! 6、Gdb使用常用命令说明:GDB的一些常用命令均支持,在此不一一详述。 不过在联调的环境下,运行程序需要使用 “c”而不是“r” 如果运行带参数的程序,请使用 set args 进行参数传递,比如 运行的程序为 ./test -a -b -c 我们需要进行参数传递的格式为set args -a -b-c 再次 “c”;即可 7、参考资料:维基百科:http://zh./wiki/GDB
|
|