您的位置:首页 > 移动开发 > Android开发

自己动手编译android gdbserver 最新版 推荐

2014-03-22 18:03 459 查看
前面转载了一篇 如何编译android gdbserver的博文
原文地址如下:

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的目录,否则脚本执行的时候会报错





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 <linux/elf.h> 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 <elf.h>
#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或者其他版本的时候可能也会报错,需要找到相应的错误修改即可

六 编译成功








七 手机测试
将编译好的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android gdbserver