刘品
学以致用---博主简介:专注语音、视频数字信号处理方面的研究以及算法在手机平台上面的移植和优化。涉及语音/音频编解码,语音增强,语音识别,语音音质客观评估,VOIP语音引擎 Qos算法模块和声音变速不变调和变调不变速等功能实现。熟悉ARM 各个系列的CPU,用ARMv4,ARMv5,ARMv6 and Cortex Neon 汇编优化相关算法代码,争取perforamance 最优。目前主要Windows mobile and Android platform上做相关speech/audio算法以及应用开发, HEVC 编解码器PC 和手机上的开发与应用。(交流Email:liupin.2008@gmail.com)

某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于嵌入式系统资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdb+gdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上运行。

构建gdb+gdbserver调试环境的在于,要将gdb和gdbserver都编译成适用于目标板的版本。比如我们用x86的主机和ARM目标板,平时在主机上直接调试的时候都使用用于x86调试的gdb,但这个gdb不能用于远程调试中,需要针对ARM平台进行配置之后重新编译才行;而gdbserver要运行在目标板上,则需要用arm-linux-gcc编译才行。

我们可以从http://ftp.gnu.org/gnu/gdb/ 或其他站点下载GDB的源代码来进行编译。得到源代码包gdb-6.6.tar.gz之后,将target配置成arm-linux,然后进行编译:

$ tar xzvf gdb-6.6.tar.gz

$ cd gdb-6.6

$ ./configure --target=arm-linux

$ make

$ make install

注意这时我们编译的是用于主机上的gdb程序,因此仍然用x86版本的gcc编译,而不是用arm-gcc。而接下来我们要编译的gdbserver程序则是运行在目标板上的,需要用arm-gcc来编译了,用CC=<your_arm-linux-gcc_path>来指定arm-linux-gcc编译器:

$ cd gdb/gdbserver/

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

$ make CC=/opt/toolchain/bin/arm-linux-gcc

$ make install

得到gdb和gdbserver之后,将gdbserver下载到目标板上就可以进行远程调试了。我们还是以前面用过的overflow程序为例来说明,注意overflow程序也需要重新用arm-linux-gcc编译得到ARM版本的overflow程序,并下载到目标板上。

完成这些之后可以用file命令来检查所准备gdb和gdbserver及overflow程序的格式是否正确:

$ file arm-linux-gdb

arm-linux-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file overflow

overflow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

注意确保在目标板上运行的gdbserver及overflow程序被编译成ARM ELF格式,而gdb由于是运行在主机上,还是x86格式的。

gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp: host:port)或者串口(比如/dev/ttyb)来通信,我们以TCP方式为例来说明。

假设目标板的IP为192.168.2.1,主机为192.168.2.100,使用端口5678来调试,首先在目标板上运行gdbserver:

# gdbserver 192.168.16.1:5678 ./overflow

Process ./overflow created; pid = 618

Listening on port 5678

然后在主机上运行gdb,并运行gdb命令“target remote 192.168.2.1:5678”:

$ arm-linux-gdb ./overflow

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 "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...

(gdb) target remote 192.168.2.1:5678

Remote debugging using 192.168.2.1:5678

0x28556080 in ??()

(gdb)

接下来你就可以象前面所介绍的那样使用gdb命令了,比如设置断点及查看变量单步执行等。

 

http://hi.baidu.com/zesu/blog/item/9b709c2b41802ef2e6cd4093.html

 

posted on 2009-06-19 16:24  liupin  阅读(10773)  评论(0)    收藏  举报

-->