二哈 2009-05-24
一、实验目的
1.学习在Linux环境下,目标应用程序仿真调试环境的安装方法;
2.学会在Linux环境下,单步调试运行arm板上的目标程序。
二、实验内容
1.下载源码包gdb-6.6.tar.gz,解压后编译链接,安装
2.通过一个简单的应用程序hello,学会利用gdbserver在主机上通过网络在对arm板上运行的程序进行调试。
三、实验设备
1.一台装有Linux系统的PC机
2.优龙ARM9实验箱
四、实验原理
嵌入式Linux的GDB调试环境由Host端(PC机)和Target端(ARM实验板)两部分组成,Host端使用arm-Linux-gdb调试工具,而Target端需要运行gdbserver,两者之间可通过串口或网口连接,把ARM应用程序在Target端的执行情况返回Host。调试跟踪命令从Host端中的arm-Linux-gdb中发出。
五、实验步骤
1.Host端(PC机)的arm-gdb调试器安装
(1)下载arm-gdb源码包。启动浏览器输入ftp://202.193.9.3,进incoming/embeded_system_upload/experiment文件夹,找到arm-g
源码包gdb-6.6.tar.gz,将其下载到PC机的/usr/local/arm目录下。
(2)在Host端(PC机)建立两个安装目录,启动Linx终端,输如下命令:
#mkdir/usr/local/arm/gdb/arm-gdb
#mkdir/usr/local/arm/gdb/gdbserver
(3)启动Linux终端,输入如下命令
#cd/usr/local/arm进入源码包所在的目录
#tar zxvf gdb-6.6.tar.gz解压源码包到当前目录下
#cd gdb-6.6进入解压后的目录
#ls查看源码包的内容
为了检查系统环境是否满足编译要求,设置编译参数,生成Makefile文件。这需要执行configure命令,并指定如下参数:
#./configure--host=i386-Linux--target=arm-Linux
--prefix=/usr/local/arm/gdb/arm-gdb
?--host,指定gdb/gdbserver本身的运行平台,
?--target,指定gdb/gdbserver调试的代码所运行的平台,
#make编译链接
#make install安装
至此,Host端的arm-Linux-gdb调试器安装结束,
/usr/local/arm/gdb/armgdb目录下能够看到如下子目录:bininfo,lib,man,share等。
2.Target端的远程调试器gdbserver的安装
(1)在Host端的Linux终端中输入以下命令
#cd/usr/local/gdb-6.6/gdb/gdbserver进入gdbserver的目录
#./configure--host=arm-Linux--target=arm-Linux
--prefix=/usr/local/arm/gdb/gdbserver
(由于gdbserver是运行在arm目标板上,所以--host和--arget参数均选为arm-Linux)
4
#make
#make install
(2)检查Host端的/usr/local/arm/gdb/gdbserver目录,在该目录的bin子目录下应能找到可执行文件arm-Linux-gdbserver。在Host端的Linux终端中输入如下命令:
#cd/usr/local/arm/gdb/gdbserver/bin
#ls
#./arm-Linux-strip arm-Linux-gdbserve(去除文件中的调试信息)
至此Host端和Target端的gdb调试器已安装完成。3.远程调试步聚(1)编写被调试的应用程序hello.c,并使用交叉编译器进行编译,选择参数-g,在目标文件中加入调试信息。启动Linux终端,进行hello.c程序所在的目录,输入如下命令进行编译:
#./arm-Linux-gcc-g hello.c–o hello
(2)为了能够在ARM实验箱上运行arm-Linux-gdbserver,可以采用如下两种方法:①可以将该调试器加入目标板上的文件系统中,然后启动目标板上的Linux操作系统,再执行arm-Linux-gdbserver。②在Host端开启nfs服务器,将Host端建立一个共享目录,将arm-Linux-gdbserver拷贝到该共享目录中。启动目标板上的Linux操作系统,然后将Host端的上共享目录挂载到目标板上的/tmp目录下。
这里将Host端的根目录下的/s3c2410子目录挂载到目标板上的/tmp目录,在Host端的Linux终端中输入如下命令:
#cp/usr/local/arm/gdb/gdbserver/bin/arm-Linux-gdbserver/s3c2410/
#vi/etc/exports
在vi中输入如下内容:/s3c2410 192.168.*.*(rw),并保存退出。
#exportfs-rv//通知系统共享目录改变了,每次修改目录后均需执行此命令。
#/etc/rc.d/init.d/nfs start//在Host端启动NFS报务
(3)在pc机启动minicom输入以下命令进行挂载
#mount 192.168.3.x:/s3c2410/tmp//挂载
#cd/tmp
#ls
(4)在Host端,将被调试的程序源文件与编译好的目标文件拷贝到共享目录/s3c2410g下。即将hello.c文件及其目标文件hello拷贝到目录/s3c2410下。则在minicom中的/tmp目录下面输入以下命令:
#./arm-Linux-gdbserver 192.168.2.*:2345 hello
提示:其中192.168.2.*是Host端(PC机)的IP,2345是gdbserve开启的端口号并监听该端口,可以是比1024大的任意端口(注意端口冲突,可能造成无法通讯,尽量选择大一点的端口号,有利于避免冲突)
(5)在Host端,启动另一个Linux终端,进入/usr/local/arm/gdb/arm-gdb/bin目录,并将被调试程序hello复制到该目录中,输入如下命令:
#cd/usr/local/arm/gdb/arm-gdb/bin
#./arm-Linux-gdb hello
(gdb)target remote 192.168.2.*:2345(其中192.168.2.*为ARM板的IP地址,2345是gdbserver在ARM板上开启的端口)下面在gdb下输入命令开始调试
a.输入list打印出要调试的程序
b.输入b 5,在第5行设置一个断点
c.输入c命令,程序开始执行(不能用r命令)
d.输入next,程序开始单步运行
e.再输入next,可以运行下一句代码
因为这里是输出函数,所以在minimcom的终端可以看见有输出信息到这里,基本的单步调试过程已经结束。如果需要用到别的命令,例如察看变量,在gdb里面打入help all,即可得到所有命令的帮助。