云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 嵌入式linux应用程序调试方法

嵌入式linux应用程序调试方法

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 4:09:07

[root->nfs]# cat exports # Version 1.1 # Path Client(Flags) # IPs /home/zpf/ftp 172.16.51.188(rw,no_root_squash,sync,wdelay) # 172.16.51.188 我理解的含义:

NFS服务器输出的目录 客户端(挂载时的flag)#当前挂载的设备IP地址组

需要说明的一点:在这四个文件中,只有/var/lib/nfs/rmtab 给出的目录是客户端实际挂载的目录(共享/home/zpf/ftp, 客户端可以挂载它的一个子目录/home/zpf/ftp/arm_linux_resource),其他给出的都是服务器共享的目录名称。

2 应用程序实例

编写一个简单的C程序test.c ------------------------------------------- /*This is a test program.*/ int main(void) { int i;

for(i=0;i<10;i++)

printf(\return 0; }

------------------------------------------- 编译该程序:

#arm-linux-gcc -o test test.c 2.1 FTP方式

首先将test下载到target board。启动target board的linux,在超级终端中执行: #cd /var

#ftp

ftp>bin //以binary mode传输文件 ftp>get test ftp>exit

然后修改文件属性: #chmod +x test #./test

这时可以查看结果了。

2.2 NFS方式

在target board端挂载linux server的共享输出目录,并且运行程序。 #mkdir /mnt/nfs

#mount -o nolock -t nfs :/home/lqm /mnt/nfs #ls /mnt/nfs

这时应该可以显示linux server的共享目录的内容。然后执行: #./test

3 总结

这两种方式在应用程序不是特别复杂时区别不是很大,但是当开发程序比较复杂时,采用NFS方式显然效率要高得多。完成应用程序得开发,调试好后就可以下载到嵌入式目标板的flash文件系统,或者直接编译到嵌入式linux内核并且烧写到flash,从而最终成为一个独立的嵌入式应用程序。

---------------------------------------

参考书目:《building embedded linux systems》

《嵌入式linux系统开发详解--基于EP93XX系列ARM》

这两本书在过程上都比较细致,很适合初学者学习。在实践熟悉的基础上,提升理论高度,这是我所认可的学习方法。

三 GDB调试应用程序

GNU工具链中的GDB可以读linux开发的应用程序进行调试,它能够控制程序的执行、查看和改变程序的变量、分析程序的内在结构、研究崩溃程序的核心文件等等;

在嵌入式系统中,同样可以利用专用的gdb调试应用程序,由于通常目标板上的资源都比较有限,所以利用gdb在嵌入式系统上调试应用程序时,通常和nfs配合使用。

在嵌入式目标系统应用程序的调试中,由于应用程序是在嵌入式目标系统上运行,而gdb调试器则运行在linux服务器上,因此需要采用远程调试的方法;

采用这种远程调试的原因和交叉编译的原因是一样的,均由于受到嵌入式目标板系统设备上有限的资源限制,因此需要利用linux服务器的部分资源,完成系统的调试任务。

远程调试环境由运行在linux服务器上特殊版本的gdb调试器和运行载嵌入式目标机上的调试服务器gdbserver共同构成,两者通过串口或TCP连接。使用 GDB标准串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。

就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于:目标机远程调试stub 的存在形式的不同,而其设计思路和实现方法则是大致相同的。

而我们最常用的是调试应用程序,就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限,一

般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。Gdbserver在目标系统中运行,gdb则在linux服务器上运行。

一般linux发行版中都有一个可以运行的gdb,但开发人员不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对 arm平台作一个简单配置,重新编译得到相应gdb。

gdb的源代码包可以从http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下载,最新版本为gdb-6.6。或者直接到GNU的网站上下载:http://www.gnu.org/software/gdb/download/

下载到某个目录,例如下载到目录:/home/vicky。

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

#tar jxvf gdb-6.6-tar-bz2

#cd gdb-6.6

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

#make

#make install

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

进入gdbserver目录(在gdb-6.6/gdb/gdbserver, 找这个找了半天….):

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

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

(这一步要指定arm-linux-gcc的位置,具体的问题根据自己系统中的设置修改这个命令行)

通过nfs或者下载将gdb放到目标板,根据资料,需要调试的程序也可以采用nfs,也可以直接下载到目标板上。

下面就可以用gdb+gdbserver调试我们开发板上的程序了。

做如下假设:目标机IP:172.16.51.143, linux服务器172.16.51.130;

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

#./gdbserver 172.16.51.130:15000 runapp

表示目标板上的gdbserver接收来自linux服务器172.16.51.130的调试指令,gdbserver监听15000 端

口,然后启动runapp程序;

(可能这个时候会提示找不到libthread_db.so.1这个动态库,到/usr/local/arm/3.4.1/arm-linux/lib 也就是你arm交叉编译环境中的库中找到这个文件,下载到设备上,并且保证这个库文件放置在LD_LIBRARY_PATH 指定的那些目录中,否则,你需要利用export LD_LIBRARY_PATH= … 重新指定你的lib目录);

出现提示:

Process runapp created: pid=80

Listening on port 15000

(然后转到linux服务器上)

进入arm-linux-gdb目录中执行该程序 #cd

#./arm-linux-gdb /home/zpf/rtvs4104d_zpf/release/runapp

这里需要特殊说明的是: 上面的命令行,必须给出你要调试的arm版本的应用程序在linux服务器上的路径;如果你当前工作目录就是应用程序所在目录的话,那么arm-linux-gdb这个命令你就需要加入PATH这个环境变量,以便在任何目录直接调用;如果arm-linux-gdb不知道arm版本的应用程序的路径,那么它就不能适应-g加入的调试信息;这样你在使用list, break命令时候,就会提示No symbol table is loaded. Use the \

命令行输入后,出现如下提示 GNU gdb 6.6

Copyright (C) 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type \

There is absolutely no warranty for GDB. Type \This GDB was configured as \mainapp: No such file or directory.

然后等待进一步输入命令

(gdb) target remote 172.16.51.143:15000

(172.16.51.143为开发板IP)

出现提示:

搜索更多关于: 嵌入式linux应用程序调试方法 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

[root->nfs]# cat exports # Version 1.1 # Path Client(Flags) # IPs /home/zpf/ftp 172.16.51.188(rw,no_root_squash,sync,wdelay) # 172.16.51.188 我理解的含义: NFS服务器输出的目录 客户端(挂载时的flag)#当前挂载的设备IP地址组 需要说明的一点:在这四个文件中,只有/var/lib/nfs/rmtab 给出的目录是客户端实际挂载的目录(共享/home/zpf/ftp, 客户端可以挂载它的一个子目录/home/zpf/ftp/arm_linux_resource),其他给出的都是服务器共享的目录名称。 2 应用程序实例 编写一个简单的C程序t

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com