android 内核调试
这篇文档给出使用android emulator 和 arm-linux-androideabi-gdb 调试 android kernel 的方法
1. checkout goldfish 源码: 模拟器使用的kernel 是 goldfish
git clone https://android.googlesource.com/kernel/goldfish.git git
checkout -t origin/android-goldfish-3.4 -b goldfish3.4
2. 设置环境变量,主要是为了指定交叉编译器到path路径: 下述几句可以保存为一脚本,需要的时候在shell里执行
export PATH=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make goldfish_armv7_defconfig
3. 增加内核config选项
默认的goldfish_armv7_defconfig配置没有打开调试,也没有使用HIGHMEM,这里我们手动打开 goldfish/.config 目录,将下面的几个配置打开:
CONFIG_HIGHMEM=y 打开这个选项后,启动模拟器时 emulator -memory 参数才能发挥作用,否则模拟器的内存总是700多M
CONFIG_DEBUG_KERNEL=y 打开这个选项后,vmlinux 才有符号
CONFIG_KGDB=y 开启kgdb
4. 开始编译
make ARCH=arm CROSS_COMPILE=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi- all
由于第3步开启了几个配置,所以编译一开始会有提示让选择配置选项,记得相关的配置全部选Y就可以了 编译之后在 goldfish/arch/arm/boot/zImage 出现,这个就是内核了
5. 启动模拟器
emulator -no-window -no-audio -verbose -show-kernel -kernel goldfish/arch/arm/boot/zImage -memory 2048 -qemu -s -S
我一般调试内核不需要图形界面,所以增加 -no-window, no-audio. 另外,希望看到内核的详细输出,增加了 -show-kernel, -verbose , 然后就是用 -kernel 参数指向刚刚编译好的 zImage , -memory 设置内存,内存越大,调试起来性能好些, 最后是 -qemu -s -S 启动调试监听,就是内核启动后会等待在 端口 1234 而不会一直启动完毕,这时候需要在另外一个界面启动gdb :
arm-linux-androideabi-gdb goldfish/vmlinux
然后在界面里执行远程调试:

参考:
https://gbrownmozilla.wordpress.com/2015/02/13/more-memory-for-the-android-emulator/
http://www.kgdb.info/kgdb/use_kgdb/using_kgdb_base_qemu/
http://yabinc.blogspot.com/2015/03/build-and-run-android-linux-kernel-in.html
http://www.joenchen.com/archives/1093
android 内核调试的更多相关文章
- Android内核的编译和调试
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70500488 一.Android内核源码的选择 Android手机设备内核源码的调 ...
- 编译Android内核 For nexus 5 以及绕过Android的反调试
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54880488 前面的博客中已经记录了Nexus 5手机的Android 4.4.4 ...
- 《深入理解Android内核设计思想》
<深入理解Android内核设计思想> 基本信息 作者: 林学森 出版社:人民邮电出版社 ISBN:9787115348418 上架时间:2014-4-25 出版日期:2014 年5月 开 ...
- Android内核和Linux内核的区别
1.Android系统层面的底层是Linux,并且在中间加上了一个叫做Dalvik的Java虚拟机,从表面层看是Android运行库.每个Android应用都运行在自己的进程上,享有Dalvik虚拟机 ...
- Android内核漏洞利用技术实战:环境搭建&栈溢出实战
前言 Android的内核采用的是 Linux 内核,所以在Android内核中进行漏洞利用其实和在 一般的 x86平台下的 linux 内核中进行利用差不多.主要区别在于 Android 下使用的是 ...
- Android内核剖析(1)
Linux的启动过程 开机上电执行bootloader,将内核的前n条指令加载到系统内存中------>系统内核的初始化----------->启动应用程序. bootloader的位置装 ...
- 浅谈android反调试之轮询TracePid(解决方案是特色)
参考文章: 1. http://bbs.pediy.com/thread-207538.htm 2. http://www.wjdiankong.cn/android 需求: 常见的Android ...
- Linux内核调试的方式以及工具集锦【转】
转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- Linux内核调试的方式以及工具集锦
原文:https://blog.csdn.net/gatieme/article/details/68948080 CSDN GitHubLinux内核调试的方式以及工具集锦 LDD-LinuxDev ...
随机推荐
- java 中使用Base64
byte[] cipherData = Base64.encodeBase64(plainText.getBytes()); //默认不换行 byte[] cipherData = Base64.en ...
- Go语言【第二篇】:Go语法和数据类型
Go语言基础语法 Go标记 Go程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号.如以下Go语句由6个标记组成: fmt.PrintIn("Hello, World!&quo ...
- Python对文件和文件夹的高级操作模块shutil
shutil模块提供了许多关于文件和文件夹的高级操作. 特别提供了支持文件复制和删除的功能. # 将文件对象fsrc的内容复制到文件类对象fdst.length(可选参数)是缓冲区大小 shutil. ...
- Andorid API Package --->android.animation
包名: android.animation Added in API level 11 URL:http://developer.andr ...
- [洛谷P4070][SDOI2016]生成魔咒
题目大意:有一个字符串,每次在末尾加入一个字符,问当前共有多少个本质不同的字串 题解:$SAM$,就是问插入这个字符后,多了多少个字串,就是当前这个点的$Right$数组大小. 卡点:无 C++ Co ...
- [AHOI2014/JSOI2014]支线剧情 有上下界费用流
---题面--- 题解: 第一眼费用流,,然后想了好久怎么建图,,,最后发现是最小费用可行流的板子题.... 其实还没有很懂这个算法,所以这里只是摆一下步骤,以后再补理解吧. 首先一个思路就是转换图, ...
- HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)
HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值) 点我挑战题目 题意分析 从题目中可以看出是大数据的输入,和大量询问.基本操作有: 1.Q(i,j)代表求区间max(a ...
- 运行Jar包程序Shell
启动: #!/bin/bash set -e JAVA_HOME=/usr/local/java# 检查是否有项目名 appName=$ if [ "$appName" == &q ...
- SpringMVC源码解析-HTTP请求处理和分发
1.HandlerMapping的配置和设计 在初始化完成时,所有的handlerMapping都已经被加载,handlerMapping存储着HTTP请求对应的映射数据,每一个handlerMapp ...
- Codeforces Round #326 (Div. 2) B Duff in Love 简单数论 姿势涨
B. Duff in Love time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...