Linux下的嵌入式目标程序的仿真调试方法


一、实验目的

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,即可得到所有命令的帮助。

相关内容