天嵌 ARM开发社区

 找回密码
 注册
查看: 4948|回复: 7

SKY2440/TQ2440 开发板调试linux 程序-GDB使用

[复制链接]
monskyi 发表于 2009-3-6 18:08:42 | 显示全部楼层 |阅读模式
开发板如何调试Linux程序
本文是SKY244/TQ2440 系列教程中的其中一个,本系列教程将会包含SKY2440板载所有的硬件的初始化、读和写的操作的详细讲解,其中包含wince的应用程序,linux的应用程序和无OS的测试程序。
其他教程请访问天嵌科技的官方网站:www.embedsky.net,或者我们的论坛:http://www.embedsky.net/bbs/forumdisplay.php?fid=16
我们将会陆续推出更多更好的教程。

目录
目录        1
一、概述        2
二、编译GDB环境        3
1、主机(PC)端GDB的编译        3
2、目标板(SKY2440)端gdbserver的编译        4
三、GDB的使用        10
1、调试环境设定        10
2、调试步骤示例        10


一、概述
关于GDB的使用,首先下载GDB的源码包,这里我采用的是6.3版本的gdb,交叉编译器使用的是天嵌科技提供的市面上唯一支持softfloat的arm-linux-3.4.1的交叉编译器,经试验6.3版本的GDB完全支持3.4.1版本的交叉编译器。
6.3版本的GDB的编译器的下载站点:ftp://ftp.gnu.org/pub/gnu/gdb/gdb-6.3.tar.bz2
支持softfloat的arm-linux的3.4.1版的交叉编译器的下载站点:www.embedsky.net
编译GDB时,需要分别编译针对主机(PC)的GDB和针对目标板(SKY2440)的GDB服务器。


二、编译GDB环境
1、主机(PC)端GDB的编译
首先编译主机的GDB,步骤如下:
Step1、复制GDB的源码包到/opt/EmbedSky/目录下,然后解压GDB,命令如下;

Step2、进入到gdb目录中,命令如下:

配置GDB,配置命令如下:

Step3、编译GDB,命令如下:

Step4、安装GDB,命令如下:

至此主机使用的GDB就安装完毕了,下图红框中就是编译得到的GDB软件:

2、目标板(SKY2440)端gdbserver的编译
下面编译目标板SKY2440的GDB服务器,步骤如下:
Step1、进入到gdbserver目录下,命令如下:

配置gdbserver,配置命令如下:

Step2、编译gdbserver,命令如下:

下图红框中就是编译得到的gdbserver,用于SKY2440开发板端的。

Step3、安装gdbserver,方法如下:
在安装gdbserver之前时,需要把gdbserver内的调试信息去除掉,因为那些调试信息可能导致gdbserver在开发板中不能正常运行,方法如下:

因为gdbserver是用使用到SKY2440开发板里面的,所以,需要把gdbserver拷贝到SKY2440开发板的文件系统的/sbin目录下面:

Step4、获取可能需要的库文件,方法如下:
因为gdbserver运行时需要库文件“libthread_db.so.1”,所以在文件系统里面要添加该库文件,这个库文件在天嵌科技提供的3.4.1的编译器中有,如下图红框中所示:

然后把这个库文件复制到文件系统的/lib目录下,即可:


完成了以上的GDB的编译之后,就可以使用GDB进行调试了。

三、GDB的使用
1、调试环境设定
下面以SKY2440开发板提供的hello-c的测试代码作为例子,进行简单的调试步骤。
hello-c的代码是放到/opt/EmbedSky/examples/Hello-C/目录下的。
调试时主机(PC)端使用的是字符终端,目标板(SKY2440)端使用的是串口工具,在开发板的命令行下进行操作;硬件连接,需要使用网线连接SKY2440开发板上面的网卡到PC上面的网卡用于远程登录,连接PC的串口到SKY2440开发板上面的串口用于交互。
因为在使用GDB调试时,PC端要用GDB运行编译好的可执行文件,SKY2440端也要运行该可执行文件,所以,需要把要调试的源码所在的目录使用NFS挂载到开发板的文件系统下面。使用NFS的方法可以参考SKY2440的使用手册关于NFS配置部分。把目录examples/设置为NFS,然后挂载到开发板的/mnt目录下:

然后就可以开始进行调试试验了,这里设置主机(PC)端IP地址为:192.168.1.10,我们使用的端口是:12345,目标板(SKY2440)端IP地址为:192.168.1.6,端口也是12345。
2、调试步骤示例
Step1、编译hello-c的可执行文件,编译时需要添加一个选项“-g”,这个参数是使用gdb调试的专用参数,如下图:

Step2、在开发板端运行gdbserver,运行前必须进入到刚刚编译出来的hello-c所在的目录下,

然后输入运行gdbserver的命令,命令结构是:gdbserver 主机IP:端口号 调试的程序。
在这里我们设置的主机的IP地址是:192.168.1.10,主机端口为12345,要调试的应用程序是hello-c,如下图所示:

注意,上面仅仅是只在开发板端运行了gdbserver,正如提示信息所说,正在监听12345这个端口。
Step3、在主机(PC)端运行gdb,gdb的命令结构为:arm-linux-gdb 要调试的程序,运行如下图所示:

然后在出现的命令行中输入的命令结构为:target remote 目标板的IP:端口号,如下图所示:

执行上面所示的命令后,在开发板端会出现远程联系到主机(PC)端的提示信息,如下图所示:

Step4、在gdb的命令行下面使用gdb的命令已实现GDB的调试功能。
下面列出了GDB的基本命令:
        load:装入一个程序;
        symbol-file:装入符号库文件,可以是用-g参数编译的可执行文件;
        f(file):指定一个可执行文件进行调试,gdb将读取些文件的调试讯息,如hello-c;
        l(list):列程序出源文件;
        r(run) :装载完要调试的可执行文件后,可以用run命令运行可执行文件;
        b(break):设置断点(break point),如b 15,则在源程序的第15行设置一个断点,当程      序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,如b main,当程序调用些函数时,则产生中断;
        c(continue):c命令可以另中断的程序继续执行,直到下一个中断点或程序结束;
        p(print):输入某个变量的值,如程序定义了一个int i的就是,p i就会输出i的当前值;
        n(next):程序执行到断点时中断执行,可以用n指令进行单步执行;
        s(step):程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数;
        q(quit):退出GDB。
Step5、使用list命令,打印出源码:

Step6、设置断点,这里把15行设置为断点了:

Step7、使用continue命令,运行到设置了断点的15行,在PC端打印信息如下图:

SKY2440端的打印信息截图如下:

Step8、重新装载程序,使用load命令,然后再次打印源码出来:

Step9、设定断点在13行和15行:

Step10、运行程序到设置断点的13行,PC端截图如下:

SKY2440端的打印信息如下图蓝色框所示:

Step11、运行到断点15行,PC端截图如下:

SKY2440端在单步调试失败后,要求PC端重新连接,重新连接后,在PC端运行了continue命令后,从断点13行接着运行到了断点15行,显示如下图蓝框所示:

Step12、退出GDB调试模式,输入命令q,PC端截图如下:

SKY2440开发板端退出时的截图如下:

可以下载附件查看完整版本(带截图)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
xrf116 发表于 2009-3-6 18:56:09 | 显示全部楼层
顶!!! 看看看
wenqiic 发表于 2009-4-24 21:25:44 | 显示全部楼层
想看看,买了板子好久了,现在才想起来玩玩 ,呵呵
Rain_ning 发表于 2010-7-24 19:41:09 | 显示全部楼层
装上fedora试试gdb
tianqian 发表于 2010-12-11 10:44:31 | 显示全部楼层
顶一个,看看!!
龙客 发表于 2011-3-18 15:15:57 | 显示全部楼层
感谢楼房主,真是雪中送炭呀
月骅 发表于 2012-3-4 13:49:02 | 显示全部楼层
下下来看看吧。
6724243 发表于 2012-3-24 22:47:59 | 显示全部楼层
谢谢 楼主,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 09:22 , Processed in 1.034219 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表