信息产业培训网

实用技巧:Gdbserver远程调试的具体实现

http://www.miiceic.org.cn   2008-5-22 16:22:20   中程在线   浏览数:
关键字:


采用的是nfs目标板挂载本机目录的方法,当然首先,你得开通本机的nfs共享服务,具体步骤如下:


1、进入/etc目录,vim exports这个文件,在里面添加/home 192.168.0.*(rw,sync)保存后退出


注:/home 为要共享的文件夹的名称,192.168.0.*为本NFS服务器允许访问的客户端ip,若nfs不成功,后面参数rw ro 等标志对文件夹操作权限,sync:数据同步写入内存硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。可以将括号里面的sync去掉。


2、重新启动nfs服务,命令为:/sbin/service nfs restart


3、输入命令route del default来关闭网关(加快mount速度)


4、mount 192.168.0.47(为本机的ip):/home /mnt用以测试本机是否开通nfs服务。


cd /mnt目录下,看mnt下的内容是否与home的内容一致,若一致,表明已经开通nfs服务。


当本机的nfs服务开通后,你还需要配置开发板的ip地址,由于各个开发板ip地址配置方法不一样,所以,假设开发板的ip地址为192.168.2.100.


搭建交叉编译环境的步骤:


1、一般在安装linux时候,自动安装c编译环境,因此不需要再重新安装gcc编译器。


2、安装交叉编译器


从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载交叉编译器cross-3.2.tar.bz2, 存放在/usr/local目录下。


切换致该目录:

# cd /usr/local

# mkdir arm


然后解压cross-3.2.tar.bz2:

# tar jxvf cross-3.2.tar.bz2 –C /usr/local/arm


解压后把/usr/local/arm/usr/local/arm中最后一个arm拷贝到/usr/local,也就是用命令cd /usr/local/arm/usr/local中,用cp -a arm /usr/local把arm拷贝到/usr/local中去。


3、把交叉编译器的路径加入到PATH。(两种方法a,b)


a、# export PATH=$PATH:/usr/local/arm/bin


注:(这只能在当前的终端下才是有效的,)


b、修改/etc/profile 文件:

# vim /etc/profile


增加路径设置,在末尾添加如下:

export PATH=$PATH:/usr/local/arm/bin


4、使新的环境变量生效。

# source /etc/profile


5、检查是否将路径加入PATH的方法。

# echo $PATH


如果显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。自此,交叉编译环境安装完成。


6、测试。


下面我们就来测试一个简单的例子。


/*Hello.c*/

#include

int main()

{

printf(“hello word!\n”);

return 0;

}


程序输好以后确认无误,保存。进入程序文件所在目录

# arm-linux-gcc hello.c –o hello


(-o 可以理解为“目标为生成”)arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对arm的CPU的gcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc hello.c –o hello就可以生成PC机上程序了,在运行./hello 就可以发现终端显示hello!字样。用arm-linux-gcc编译的程序在PC机上是不能运行的,运行后给出错误报告:无法执行二进制文件。说明经过交叉编译环境编译出的文件是硬件可执行的二进制代码文件.


7、交叉编译环境搭建成功。


要经行gdbserver远程调试,还必须安装gdb远程调试工具:


gdb的源代码包可以从http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下载,最新版本为gdb-6.4。下载到某个目录,笔者下载到自己的用户目录:/home/vicky。


下载完后,进入/home/vicky目录,配置编译步骤如下:

#tar jxvf gdb-6.4-tar-bz2

#cd gdb-6.4

#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v

#make

(这一步的时候可能会有问题,提示一个函数中(具体函数名不记得了)parse error,就是unsigned前边多了一个”}”,你用vi进入那一行把它删掉就行了。一般都不会出错的。)

#make install

#export PATH=$PATH:/usr/local/arm-gdb


进入gdbserver目录:

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

#make CC=/usr/local/arm/bin/arm-linux-gcc

(这一步要指定arm-linux-gcc的位置,可能跟你的不一样)


没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。


下面就可以用gdb+gdbserver调试我们开发板上的程序了。在目标板上运行gdbserver,其实就是在宿主机的minicom下,我的red hat linux装在vmware下的。我是在minicom下#mount 192.168.2.100:/ /tmp后做的(这里参数-o nolock可以不加,不加这一步执行得反而更快些),hello和gdbserver都是位于linux根目录下,把主机根目录挂在到开发板的/tmp 目录下。


要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:


(minicom下)

#cd /tmp

#./gdbserver 192.168.2.100:2345 hello

192.168.2.100为宿主机IP,在目标系统的2345端口开启了一个调试进程,hello为要调试的程序。


出现提示:

Process /tmp/hello created: pid="80"

Listening on port 2345

(另一个终端下)

#cd /

#export PATH=$PATH:/usr/local/arm-gdb/bin

#arm-linux-gdb hello

(gdb) target remote 192.168.2.223:2345

(192.168.2.223为开发板IP)

出现提示:

Remote debugging using 192.168.2.223:2345

[New thread 80]

[Switching to thread 80]

0x40002a90 in ??()


同时在minicom下提示:

Remote debugging from host 192.168.2.100

(gdb)


连接成功,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。


注:在远程调试的这些步骤中nfs配置和安装交叉编译工具,以及安装gdb工具的没有什么顺序,只是主意再gdbserver远程连接前要配置好开发板的ip地址。

来源:
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网希赛网软件测试网中电华信太平洋电脑网天空网
    电脑爱好者泡泡网华军软件霏凡软件站软件开发网腾讯网
    eNet下载汉化新世纪小熊在线BIOS之家数动连线....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved