一、安装GDB及GDB server
1.1 GDB简介
GDB调试环境由宿主机GDB和目标开发板的GDB server共同构成,两者通过串口或TCP连接。使用GDB标准串行协议协同工作,实现对目标机的系统内核和上层应用的监控和调试功能。
GdbServer是GDB的一个组件,但通常不随发行版本的GDB一同发布,需要用户自行编译GDB的源代码包得到相应的GDB和GDBServer,可以从下载地址:http://ftp.gnu.org/gnu/gdb/,或者百度获取下载地址。
1.2 安装GDB
本例中目标板为Hi3520D,使用的GDB是GDB 7.2,宿主机为ubuntu10.4(vmware),本机开发环境为win7 x64。在获取源码gdb-7.2a.tar.gz(24MB)后,将其解压:
1.tar zxvf gdb-7.2.tar.gz
2.配置GDB,./configure –target=arm-linux –enable-sim –prefix=/opt/arm-gdb(其中prefix为设置您所需要的安装目录)
3.编译及安装,执行make,然后执行make install
4.执行结束后,在/opt/arm-gdb/bin目录下可看到生成的应用程序。
5.将三个应用程序拷贝到/usr/local/bin。
1.3 安装GDB server
在编译安装GDB后,进入到目录gdbserver下,我的目录为/home/arm/gdb/gdb-7.2/gdb/gdbserver,在该目录下进行配置。在命令行里输入:./configure –target=arm-linux –host=arm-linux。接着,配置所采用的交叉编译器。我用的是Hi3520D,所用的交叉编译器为arm-hisiv100nptl-linux-gcc,因此我在命令行里输入 :
make CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-gcc
注意,一定要写交叉编译器的绝对路径!编译完成后,在gdbserver目录下就会生成gdbserver和gdbreplay。,这两个文件就可以放在目标板上和开发编译的程序一起进行调试。而主机上可以采用编译出来的arm-linux-gdb作为主机端运行的调试。
二、测试代码及应用程序生成
为简单起见,我们就用一个十余行的C程序进行GDB调试演示。以下是C代码:
#include<stdio.h>
int add(int a,int b)
{
return a+b;
}
int main(int argc ,char* argv[])
{
int num1=1,num2=2,time;
const int plusCount=3;
for(time=0;time!=plusCount;++time)
printf("%dplus%d=%d.\r\n",num1,num2,num1+num2);
printf("%dplus%d=%d byfunc.\r\n",num1,num2,add(num1,num2));
return 0;
}
在命令行里输入:arm-hisiv100nptl-linux-gcc test.c -g -o test 即可生成应用程序test。注意,编译时一定要加入-g参数,表示应用程序调试。
三、GDB+GDB server nfs调试方法
进行调试前首先需要保证目标开发板与宿主机支持nfs。在宿主机上安装samba教程可自行百度获取,或者参考文章附录。本例中宿主机IP为218.192.171.55,目标板IP为218.192.171.72,开发环境(win7 x64)IP为218.192.171.78,宿主机的共享目录为/mnt/nfs。
1.将gdbserver和test拷贝到/mnt/nfs,更改应用程序权限:chmod 777 gdbserver test。
2.通过telnet或者minicom远程到目标板,挂载nfs:
mount -t nfs -o nolock -o tcp 218.192.171.55:/mnt/nfs /nfsroot
3.进入/nfsroot目录,输入指令:
./gdbserver 218.192.171.55:5000 test
其中,218.192.171.55为宿主机IP,5000表示目标开发板的调试端口(一般任意大于1024的端口号均可)。
4.在宿主机命令行输入:arm-linux-gdb test,接着输入:
target remote 218.192.171.72:5000
连接成功后,出现如下提示:
5.在宿主机命令行输入’c’,程序执行。效果如下:
目标板端输出提示如下:
注,本例仅进行简单测试,其它调试命令可参考附录。
四、串口调试
未完待续。