2007年3月21日星期三

Build arm-linux-gdb

gdb-6.6

首先编译arm-linux-gdb
# cd /home/frank/temp/arm-debug
# tar xjvf gdb-6.6.tar.bz2
# mkdir build
# mkdir build-gdb
# cd build-gdb
# ../gdb-6.6/configuration --target=$TARGET --prefix=/home/frank/temp/arm-debug/build
# make
# make install

加入arm-linux环境变量, 将会出现错误

make[2]: Entering directory `/home/frank/temp/arm-debug/gdb-6.6/readline'
rm -f readline.o
gcc -c -DHAVE_CONFIG_H arm-linux- -I. -I.././readline -DRL_LIBRARY_VERSION='"5.1"' -g -O2 readline.c
gcc: arm-linux-: No such file or directory
make[2]: *** [readline.o] Error 1
make[2]: Leaving directory `/home/frank/temp/arm-debug/gdb-6.6/readline'
make[1]: *** [all-readline] Error 2
make[1]: Leaving directory `/home/frank/temp/arm-debug/gdb-6.6'
make: *** [all] Error 2
[frank@aladdin gdb-6.6]$


环境变量设置为
#!/bin/sh
export PREFIX=/usr/local/arm/3.2.3
export TARGET=arm-linux
#export HOST=arm
export PATH=$HOME/cross-arm/cross_LR3615/arm-linux/bin:$PATH
export KERNEL_DIR=$(pwd)/svn_ipcam/ipcam/trunk/LR3615_BII/kernel/linux-2.4.26
export CROSS_COMPILE=arm-linux-

不设置arm-linux环境变量, 编译可以通过. 两种方式生成的Makefile是一样的

使用gdb-6.3调试arm中的core dump, 无法看到符号信息, 而gdb-6.6版本是可以的

需要查看是哪个环境变量导致的问题
逐个加入环境变量, 运行make clean; make都可以编译通过, 由此推断出是在configuration时出的问题

检查readline/Makefile(设置环境变量时), 里面有
DEFS = -DHAVE_CONFIG_H arm-linux-

在设置环境变量之前做configuration, readline/Makefile内容为:
DEFS = @DEFS@ @CROSS_COMPILE@
LOCAL_DEFS = @LOCAL_DEFS@

由此可见是环境变量CROSS_COMPILE导致的问题
将export CROSS_COMPILE=arm-linux-注释掉, 重新设置环境变量, 再运行configuration
# ./configuration --target=$TARGET --prefix=/home/frank/test/arm-debug/build
# make

即可编译成功

总结:
编译arm版本gdb时, 不要加CROSS_COMPILE环境变量, 否则编译时会出现"gcc: arm-linux-: No such file or directory"错误.

接下来编译gdbserver
# cd /home/frank/temp/arm-debug
# cd build
# mkdir arm-linux
# cd ../../
# mkdir build_gdbserver
# cd build_gdbserver
# CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure --host=$TARGET --prefix=/home/frank/temp/arm-debug/build/arm-linux
# make
# make install

然后将build目录下的东东copy到tools chain即可
# cd build
# find ./ -mount -print | cpio -pdm $PREFIX

在使用gdb时, 最好使用LD选项最好使用-static选项, 用静态链接的方式生成可执行文件, 否则在gdb中无法看到符号信息.

没有评论: