自己动手编译androidgdbserver最新版

前面转载了一篇 如何编译android gdbserver的博文

创新互联专注于企业成都营销网站建设、网站重做改版、丹江口网站定制设计、自适应品牌网站建设、H5页面制作成都做商城网站、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为丹江口等各大城市提供网站开发制作服务。

原文地址如下:

http://sunzeduo.blog.51cto.com/2758509/1381519

本身这篇文章没有什么问题,按部就班的操作可以生成 gdbserver,但是存在的问题如下:

1  本文编写时间比较早,实用的arm交叉编译版本以及gdb版本都比较老了,arm交叉编译版本是arm-eabi-4.4.3  gdb使用的版本是 7.1.x 。

2 从文章来看是使用下载后android源码中的ndk来编译的,这个可以通过其修改了 $MYDROID/ndk/build/tools/prebuilt-common.sh 这个脚本可以看出来,对于没有下载android源码的童鞋造成障碍。

3  文中的

git clone git://android.git.kernel.org/toolchain/gdb.git
git clone git://android.git.kernel.org/toolchain/build.git

这两个地址早已经无法下载了,又对想自己动手编译android gdbserver的童鞋造成障碍。

4 在中文搜索引擎里面搜索  android gdb调试等,绝大多数均出自      

Android - How-to Rebuild gdbserver  这篇文章的翻译,同样会存在上面的三个问题。

基于以上的问题,笔者自己动手重新简化思路,编译了android gdbserver,降低编译门槛,供更多的童鞋来了解这方面的知识。

一  需要的前置条件

1 下载 Android NDK
直接从 http://developer.android.com/tools/sdk/ndk/index.html
这个地址下载即可,下载下来就是一个压缩包,方便使用。
2 下载 gdb源码
https://github.com/crystax/android-toolchain-gdb
这个下载地址即可

二 添加了两个脚本 (脚本可以从附件下载)

   添加目录 你下载解压缩的目录下的 build/tools  这个目录下

build-gdbserver_7.3.x.sh
prebuilt-common_7.3.x.sh

三 对应规则

root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb
GNU gdb (GDB) 7.3.1-gg2
root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb
GNU gdb (GDB) 7.3.1-gg2
arm-linux-androideabi-4.6  GNU gdb (GDB) 7.3.1-gg2
arm-linux-androideabi-4.8  GNU gdb (GDB) 7.3.1-gg2

网上流传的大部分博文,都是gdb 7.1.x的 对应的是 arm交叉编译的 4.4.3

四 编译命令

/root/android/android-ndk-r9c/build/tools/build-gdbserver_7.3.x.sh
/Disk/CyanogenMod/androidgdb/gdb_build/
/root/android/android-ndk-r9c/
arm-linux-androideabi-4.6
--verbose
--build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install
--gdb-version=7.3.x
--sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm

命令解释

 1 /root/android/android-ndk-r9c/build/tools/build-gdbserver_7.3.x.sh

  复制过去的脚本

2 /Disk/CyanogenMod/androidgdb/gdb_build/ 下载的gdb的路径

要以下图的形式组织gdb的目录,否则脚本执行的时候会报错

自己动手编译android gdbserver 最新版

3 /root/android/android-ndk-r9c/  

 下载的ndk解压缩的路径


4 arm-linux-androideabi-4.6 使用ndk中带的arm-linux交叉编译工具,详见ndk根目录下的toolchains目录


5 --verbose  


6 --build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install

 gdbserver生成的目录,如果编译成功了,则在这个目录下生成gdbserver

7 --gdb-version=7.3.x

   要编译的gdb版本,对应你下载的gdb源码包,参考上面的图

8 --sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm

   在编译gdbserver的时候需要用的头文件和库文件

五 编译错误修改

笔者在编译 gdb 7.3.x的时候出现了编译错误,主要是关于elf头文件的问题。

在linux_low.c 中

#ifndef ELFMAG0
/* Don't include  here.  If it got included by gdb_proc_service.h
   then ELFMAG0 will have been defined.  If it didn't get included by
   gdb_proc_service.h then including it will likely introduce a duplicate
   definition of elf_fpregset_t.  */
#include 
#endif

的后面添加下面的代码

typedef struct {
  uint32_t a_type;
  union {
    uint32_t a_val;
  } a_un;
} Elf32_auxv_t;
typedef struct {
  uint64_t a_type;
  union {
    uint64_t a_val;
  } a_un;
} Elf64_auxv_t;

注意,这个仅仅是7.3.x编译的时候出错的修改方法,当7.1.x或者其他版本的时候可能也会报错,需要找到相应的错误修改即可

六 编译成功

自己动手编译android gdbserver 最新版

自己动手编译android gdbserver 最新版

七  手机测试

将编译好的gdbserver 上传到手机中,赋予可执行的权限,然后运行测试,效果如下图

自己动手编译android gdbserver 最新版

八 附件说明

1 build-gdbserver_7.3.x.sh   和 prebuilt-common_7.3.x.sh需要拷贝到 /root/android/android-ndk-r9c/build/tools/ 这个目录下

2 linux_low.c 需要拷贝到  /Disk/CyanogenMod/androidgdb/gdb_build/gdb/gdb-7.3.x/gdb/gdbserver 这个目录下

附件:http://down.51cto.com/data/2364200

网站题目:自己动手编译androidgdbserver最新版
网站路径:http://myzitong.com/article/jpeopp.html