交叉编译arm gdb

交叉编译arm gdb

 By unanao <jianjiaosun@gmail.com>

arm-linuxgdb移植分为两种情况.

  • 交叉调试版。

    这种模式是需要编译一个arm-linux版本gdbserver (GDBstub模块).然后再编译一个X86版本交叉调试的gdb。为了与桌面版本身的gdb 区别开来,一般改名为 arm-linux-gdb。两者通过串口或者网络进行互联。

    这是比较正统的方法。它gdbserver可以通过arm-linux-gdb直接在host上单步调试target的应用程序。.并且可以与图形界面调试器配合进行图形界面调试。缺点就是target资源较少。因此单步调试的速度并不是太快。因此实用性不算太强。

  • 整个gdb移植成一个ARM的本地版

    在开发板上直接用gdb来调试。 arm-linux的本地版一般只能做字符界面的。界面没有支持GUI的交叉调试版友好。而且单步调试速度也不算快。但是有几大大优点:

  1. 1) 定位程序退出所在函数.

    2) 判断程序退出的原因

    3) 通过条件断点分析异常情况时运行环境.


用本地版gdb运行程序时,当程序因段错误或其它原因退出程序时。可以通过gdb bt( backtrace)来查看最后运行的堆栈。来判断出错时是在哪一个函数里退出。这样会大大加快定位 错误的速度,这样有时需要几天的定位的错误,可能只需要几分钟即可定位,这在嵌入式开发里 有很强实际效用。


这里我们只介绍一下本地gdb的移植。


1下载最新的ncursegdb

  • ncurse: http://www.gnu.org/software/ncurses/

  • gdb: http://www.gnu.org/software/gdb/download/


为了清晰建立目录如下:ncurse放入libs目录,gdb 解压在项目目录下:


gdb (项目目录)

| --output

| |_arm-linux

|-- gdb-x.y

|

|--libs

|-- ncurse-x.y


x.y是版本号

1.1ncurse库的移植

解压 tar xvzf ncurses-x.y.tar.gz

cd ncurses-x.y

生成makefile

./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --without-ada --enable-termcap --with-shared


其中--enable-termcap比较关键gdb需要这个库

  --host=arm-linux 根据交叉编译工具连的名字而定, 如果交叉编译器的名字叫arm-neon-linux-gnueabi-gcc, 那么就是--host= arm-neon-linux-gnueabi

编译 make

安装 make install

libncurses.so 库应该在output/arm-linux/lib


1.2gdb本身的移植。

解压 tar xvjf gdb-x.y.tar.bz2

cd gdb-x.y

生成Makefile

./configure --host=arm-linux --enable-shared --prefix=$PWD/output/arm --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS="-L$PWD/../output/arm-linux/lib" CPPFLAGS="-I$PWD/../output/arm-linux/include"


脚本含义下:

  • --enable-shared 动态编译

  • --host=arm-linux arm-linux-gcc编译(根据自己的编译器修改,去掉-gcc)

  • --prefix="$PWD/../output/arm-linux" 安装目录

  • --without-x 取消x windows 支持

  • --disable-gdbtk 取消gdbtk,应该也是图形界面相关的

  • --disable-tui 取消tui 界面

  • --without-included-regex 关闭正则表达式库

  • --without-included-gettext 去掉用于多语言处理的 gettext

正则表达式/gettext,暂时不需要,先去掉

CPPFLAGS/LDFLAGS是确保能找到ARM版的ncurses

编译 make

安装 make install

最终的arm的程序gdb应该在output/arm-linux/bin下面,将其和libncurses.so拷贝到开发板上即可运行,象x86GDB一样运行即可


注意这个样编译能同时把ARMgdbserver 也同时编译出来并在安装目录看到.而且一般eabigcc编译器都自带了arm-linux-gdb.所以交叉版本的gdb移植很多时候可以省略.

刚刚编译出来的gdb尺寸相当大,10M,因此必须要用arm-linux-strip gdb 来把尺寸减少.strip后大约2M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值