GDB移植_ARM_LINXU
环境:
硬件:s3c2440(友善micro2440)
开发板上内核:linux-2.6.32.2
交叉编译工具:arm-linux-gcc-4.3.2(开发板自带。可以考虑用4.3.3的)
PC机器Linux系统:RedHat9
PC机编译环境:gcc3.3.2
gdb版本:gdb-6.8
下载地址:http://ftp.gnu.org/gnu/gdb/
ncurse的支持:ncurse 5.6
下载地址:http://ftp.gnu.org/gnu/ncurses/
参考文章:
http://wenku.baidu.com/view/a34ee5c7aa00b52acfc7ca87.html
http://blog.csdn.net/luckyhzh/archive/2010/07/26/5766927.aspx
http://wenku.baidu.com/view/ac86ac7101f69e3143329484.html
1. gdb的移植
ARM本地版需要ncurse的支持。
1.1 ncurse库的移植
Ø 解压 tar zxvf ncurses-5.6.tar.gz -C / (这里我是解压到根目录下)
Ø cd /ncurses-5.6
Ø 生成makefile
n ./configure --host=arm-linux --prefix=/home/bin --without-ada --enable-termcap --with-shared
Ø 其中--enable-termcap比较关键gdb需要这个库
l 编译 make
l 安装 make install
l libncurses.so 库应该在/home/bin/lib
1.2 gdb的编译
Ø 解压 tar zxvf gdb-6.8.tar.gz –C /
Ø cd /gdb-6.8
Ø 生成Makefile
n ./configure --host=arm-linux --enable-shared --prefix=/home/bin --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS=/home/bin /lib CPPFLAGS=/home/bin/include
Ø --enable-shared 动态编译
Ø --host=arm-linux 用arm-linux-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库
l 编译 make
1) 如果gdb 6.7有一个警告会当成bug处理symtab.c: In function 'find_line_symtab':
symtab.c:2252: error: 'exact' may be used uninitialized in this function
2) 只要简单把int exact;变成int exact =0 ; 即可编译通过
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.h /gdb-6.8/bfd/“)
l 安装 make install
1) 最终的arm的程序gdb应该在home /bin下面,将其拷贝和libncurses.so拷贝到开发板上即可运行,象x86的GDB一样运行即可
2) 注意这个样编译能同时把ARM版gdbserver 也同时编译出来并在安装目录看到.而且一般eabi的gcc编译器都自带了arm-linux-gdb.所以交叉版本的gdb移植很多时候可以省略.
3) Make install后到/home/bin/找到gdbserver,拷贝到开发板子上,可以使用了。哦呵呵。
刚刚编译出来的gdb尺寸相当大,10M多,因此必须要用arm-linux-strip gdb 来把尺寸减少.strip后大约2M多(这步我没做,个人认为用不到,我主要用gdbserver,至于arm-linux-gdb我的交叉编译工具中有现成的)