gdb移植到arm开发板

  1. 原文地址:http://blog.chinaunix.net/uid-11857489-id-2814504.html
  2. 一、源程序下载
  3. 环境: 
  4. 硬件:TI davinci 
  5. 开发板上内核:linux-2.6.32.
  6. 交叉编译工具:arm-none-linux-gnueabi-gcc-4.3.3
  7. PC 机器 Linux 系统:Ubuntu 
  8. PC 机编译环境:gcc 4.4.

  9. gdb 版本:gdb-7.
  10.  下载地址:http://ftp.gnu.org/gnu/gdb/ 
  11. ncurse 的支持:ncurse 5.
  12.  下载地址:http://ftp.gnu.org/gnu/ncurses/ 
  13.   
  14. 二、gdb的移植 
  15. 1.ARM本地版需要 ncurse 的支持。 
  16. 1.1 ncurse 库的移植 
  17. (1)tar -zxvf ncurses-5.6.tar.gz //解压到当前目录下
  18. (2)cd ncurses-5.//进入解压后目录
  19. (3)./configure --host=arm-none-linux-gnueabi --prefix=/usr/local/ncurse --without-ada --enable-termcap --with-shared 
  20. //生成 makefile 
  21. //其中--enable-termcap 比较关键 gdb 需要这个库 
  22. //安装在/usr/local/ncurse目录下,我的编译环境是:arm-none-linux-gnueabi
  23. (4)make //进行make编译 
  24. (5)make install //安装,libncurses.so库应该在/usr/local/ncurse目录下 
  25.   
  26. 1.2 gdb 的编译 
  27. (1)tar -zxvf gdb-7.6.tar.gz //解压到当前目录下
  28. (2)cd gdb-7.//进入解压后目录
  29. (3)./configure --host= arm-none-linux-gnueabi --enable-shared --prefix=/usr/local/gdb --without---disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS=/usr/local/ncurse/lib CPPFLAGS=/usr/local/ncurse/include 
  30. //生成 Makefile 
  31. //--enable-shared:动态编译 
  32. //--host=arm-linux:用 arm-linux-gcc 编译 
  33. //--prefix=/usr/local/gdb 安装目录 
  34. //--without-x 取消 x windows 支持 
  35. //--disable-gdbtk 取消 gdbtk,应该也是图形界面相关的 
  36. //--disable-tui 取消 tui 界面 
  37. //--without-included-regex 关闭正则表达式库 
  38. //--without-included-gettext 去掉用于多语言处理的 gettext库,正则表达式/gettext,暂时不需要,先去掉 
  39. //CPPFLAGS/LDFLAGS 是确保能找到 ARM 版的 ncurses 库 
  40. 1)Error:但是在这里一直会出现错误,生成不了makefile,出现的错误是:“checking for C compiler default output... configure: error: C compiler cannot create executables”
  41. 按照网上的很多做法:sudo apt-get install libc6-dev,还是不行。后来我修改了“./configure --host= arm-none-linux-gnueabi --enable-shared --prefix=/usr/local/gdb --without---disable-gdbtk --disable-tui --without-included-regex --without-included-gettext”,去掉了后边的ncurses库路径,就编译通过了生成了makefile。只是后边make的时候要手动添加ncurses 库。
  42. (4)make 
  43. 1) 如果 gdb 7.6有一个警告会当成bug 处理 symtab.c: In function'find_line_symtab': 
  44. symtab.c:2252: error: 'exact' may be used uninitialized in this function 
  45. 2) 只要简单把 int exact;变成 int exact =0 ; 即可编译通过 
  46. 3) Make 过程中提示 error ,少 “/gdb-6.8/dfb/bfd.h”,我用 find命令查找了下,发现系统中(“/usr/include/bfd.h”)和另一个交叉编译工具中(“/usr/local/arm/2.95.3/include/bfd.h”)都有这个文件,我拷贝了另一个交叉编译工具中的”bfd.h”。(“cp /usr/local/arm/2.95.3/include/bfd./gdb-6.8/bfd/) 
  47. 4)由于前边没有设置ncurses 库路径,下边出现的错误:"no termcap library found"
  48. 解决方法:首先安装以下软件:sudo apt-get install texinfo; sudo apt-get install libncurses5-dev; sudo apt-get install m4; sudo apt-get install flex; sudo apt-get install bison. 如果问题还存在的话,就手动将刚才生成的libncurses.a库添加到交叉编译环境的路径查找目录下,对于我的机器我将libncurses.a库拷贝到/root/tools/arm-2009q1/lib/gcc/arm-none-linux-gnueabi/4.3.3/include下就能make通过了。如果我们不交叉编译gdb,而是编译在本机上试用的gdb时nake不会碰到这个错误,那是因为本机gcc默认库搜索目录/usr/lib下有这个库libtermcap.a,但是这是一个链接文件,链接到了libncurses.a上,那是因为termcap库是一个比较老的终端数据库,现在都试用ncurses库代替,但是有些程序还是试用termcap库,所以系统中安装ncurses库时默认做一个链接文件,防止gdb的这种编译错误。
  49. (5)make install 
  50. 1)最终的arm的程序gdb和gdbserver应该在/usr/local/gdb下面,将其拷贝和libncurses.so 拷贝到开发板上即可运行,象x86的GDB一样运行即可 
  51. 2)注意这个样编译能同时把 ARM版 gdbserver 也同时编译出来并在安装目录看到.而且一般eabi的 gcc编译器都自带了arm-none-linux-gnueabi-gdb.所以交叉版本的 gdb 移植很多时候可以省略. 
  52. 3)刚刚编译出来的 gdb 尺寸相当大,10M 多,因此必须要用 arm-none-linux-gnueabi-strip gdb 来把尺寸减少.strip 后大约 2M 多(个人认为用不到,我主要用 gdbserver,至于arm-none-linux-gnueabi-gdb 我的交叉编译工具中有现成的) 

  53. 三、gdb调试
  54. 1.环境搭建
  55. (1)主机IP:192.168.1.197
  56. (2)arm板IP:192.168.1.220
  57. (3)将应用程序编译成可以gdb的可执行文件,注意makefile中是在生成.o文件的依赖关系中添加-g选项,例如:arm-none-linux-gnueabi-gcc -o hello -g hello.c
  58. main.o: main.cpp Main.h Global.h
  59.     $(CXX) --rdynamic -c $<
  60. (4)要确保arm板与主机能ping通
  61. 2.arm板设置
  62. (1)将刚才编译生成的gdbserver和可执行文件拷贝到arm板目录下。
  63. (2)命令行下输入:gdbserver 192.168.1.197:2345 main //gdbserver将在2345端口等待远端连接
  64. 3.主机设置
  65. (1)通过刚才编译出来的gdb或者是交叉编译环境自带的arm-none-linux-gnueabi-gdb启动命令行调试器,即输入:gdb main 或者arm-none-linux-gnueabi-gdb main,会进入gdb命令行调试器。
  66. (2)在gdb提示符下输入:target remote 192.168.1.220:2345连接到开发板的gdbserver,就可以进行gdb调试了。
  67. (3) (gdb)target remote 192.168.1.220:1234 // 连接到开发板 成功后就可以进行调试 
  68.         (gdb)list or l
  69.         (gdb)break func
  70.         (gdb)break 22
  71.         (gdb)info br 
  72.         (gdb)continue or c // 这里不能用 run
  73.         (gdb)next or n
  74.         (gdb)print or p result 
  75.         (gdb) finish // 跳出func函数
  76.         (gdb) next
  77.         (gdb) quit
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值