Android build gdbserver

本文提供了解决Android 2.2及2.3版本中gdbserver出现segment fault问题的方法。通过从源码重新编译gdbserver,并应用特定补丁来确保其能在不同版本的Android系统上稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前android2.2 和android2.3上的prebuilt gdbserver一执行就会报错segmentfault,prebuilt的gdbserver是静态编译的,这样做是为了让gdb能跨android的各个版本使用,但这个做法并没有考虑到kernel和libc的多样性。所以就出现了segment fault。 
从android issue上看到这样的解决办法,具体做法就从git上下载gdb的代码然后重新编译 
注:凡是路径最好是使用绝对路径 避免configure的时候会出问题
#[ENVIRONMENT]
export NDK=~/android/android-ndk-r5b &&
export SDK=~/android/android-sdk-linux_x86 &&
export PATH=~/bin:${PATH}:$NDK:$SDK/tools:$SDK/platform-tools &&
export ANDROID_SRC=~/myandroid 
 
#[I ASSUME YOU HAVE THE SDK & NDK ALREADY] 
如果已经有 gingerbread的代码就不需下载了,直接下载gdb 代码
#[OBTAIN GINGERBREAD AOSP IF YOU HAVEN'T ALREADY]
mkdir -p ~/bin &&
mkdir -p $ ANDROID_SRC &&
cd $ ANDROID_SRC &&
curl http://android.git.kernel.org/repo > ~/bin/repo &&
chmod a+x ~/bin/repo &&
repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread &&
repo sync  
#[CONFIGURE ENV FOR ANDROID_SRC (REQUIRED)]
cd $ ANDROID_SRC &&
. build/envsetup.sh &&
lunch full-eng  
#[BUILD AOSP IF YOU HAVEN'T ALREADY]
time make -j4   
# substitute appropriate '-j#' for your CPU.  
#[OBTAIN AND PATCH GDB SOURCES]
mkdir -p ~/src/gdb_build &&
pushd ~/src/gdb_build &&
在我下载的时候android.git.kernel.org听说被黑了或者关闭了,所以用了一个第三方的git git://android.git.linaro.org/ 
git clone git://android.git.kernel.org/toolchain/gdb.git &&
git clone git://android.git.kernel.org/toolchain/build.git &&
cd gdb &&
patch -p1 <$ANDROID_SRC/ndk/build/tools/toolchain-patches/gdb/0001-Proper-libthread_db-support-in-gdbserver.patch && patch -p1 <$ANDROID_SRC/ndk/build/tools/toolchain-patches/gdb/0002-Fix-signal-handling-in-gdbserver-6.6.patch &&
popd  
#[INITIALIZE SYSROOT]
pushd ~/src/gdb_build && ./build/build-sysroot.sh $ANDROID_SRC/out/target/product/generic ~/src/gdb_build/sysroot && popd  
#[USE ANDROID_SRC PREBUILT TOOLCHAIN, NOT NDK'S TOOLCHAIN]
cd $ ANDROID_SRC &&
rm -Rf $ANDROID_SRC/toolchains/arm-eabi-4.4.3/prebuilt &&
mkdir -p $ANDROID_SRC/toolchains/arm-eabi-4.4.3/prebuilt &&
pushd $ANDROID_SRC/toolchains/arm-eabi-4.4.3/prebuilt &&
ln -s $ANDROID_SRC/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3 linux-x86 &&
popd  
#[BUILD GDBSERVER 6.6]
$ANDROID_SRC/ndk/build/tools/build-gdbserver.sh \        
~/src/gdb_build $ ANDROID_SRC \        
arm-eabi-4.4.3 --verbose \        
--build-out=$ANDROID_SRC/src/gdb_build/install \        
--gdb-version=6.6 --sysroot=$ANDROID_SRC/src/gdb_build/sysroot  
#[COPY NEW GDBSERVER OVER NDK'S BROKEN GDBSERVER]
mv $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver.orig && cp ~/src/gdb_build/install/gdbserver $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver

转自:http://blog.163.com/data05_198/blog/static/1306428062011822563885/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值