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

时间: 2024-11-05 12:09:00

android 内核调试的相关文章

Android内核开发:如何统计系统的启动时间

本文是<Android内核开发>系列的第七篇文章,通过上一篇文章<Android内核开发:图解Android系统的启动过程>我们大致了解了Android系统的启动过程,那么本文就从实践的角度,简单介绍一下如何统计Android系统的启动时间. 这里所说的统计系统的启动时间,并不是简单地用秒表和肉眼来统计,而是通过分析系统输出的log信息来统计,这样才显得更加专业. 首先了解2个概念: (1) Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第

Linux内核调试的方式以及工具集锦

CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦 "调试难度本来就是写代码的两倍. 因此, 如果你写代码的时候聪明用尽, 根据定义, 你就没有能耐去调试它了.&qu

Android内核开发:开发板选购

工欲善其事,必先利其器,作为我的<Android内核开发>系列的第一篇文章,我们先来解决一个非技术问题:学习Android内核开发,是否需要购买一块Android开发板呢?如果需要,那么应该选购什么样的开发板呢? 1.  是否需要购买Android开发板? 这个问题取决于你的学习目标是什么,简单来说,学习Android源码的人分为两种: 一种是做Android应用层开发的,想通过学习Android源码来深入了解Android底层是怎么工作的: 另一种则是做Android底层开发的,比如做And

Android内核开发:在源码树中添加新的app应用

本文是<Android内核开发>系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用. 网上也有介绍怎么在源码中添加新的app应用的博文,但大都数只介绍了不含有jni本地代码的app的添加方法,本文会更加全面地介绍三种不同类型的app应用如何添加到Android内核源码树中编译. 假设新的应用名字叫:HelloWorld,并且已经在Eclipse或者Android Studio中编译和调试通过

《深入理解Android内核设计思想》

<深入理解Android内核设计思想> 基本信息 作者: 林学森 出版社:人民邮电出版社 ISBN:9787115348418 上架时间:2014-4-25 出版日期:2014 年5月 开本:16开 页码:687 版次:1-1 所属分类:计算机 > 软件与程序设计 > 移动开发 > Android 更多关于>>><深入理解Android内核设计思想> 编辑推荐 基于Android SDK最新版本 全面细致地剖析了进程/线程模型.内存管理.Bind

android 零星调试笔记

adb使用: 连接不上手机 C:\Users\Administrator\.android\adb_usb.ini   增加一行内容:  0x1782 安装第三方应用 $ adb install apk文件名 2.安装系统应用 $ adb remount $ adb push apk文件名 /system/app // apk文件名形如testme.apk 卸载应用程序 1.$ adb uninstall 包名 例如:adb uninstall lee.study 2. 在终端上找到:Home-

《深入理解Android内核设计思想》书本目录,及部分章节内容分享

第1篇 android编译篇 第1章 android系统简介 2  1.1 android系统发展历程 2  1.2 android系统特点 4  1.3 android系统框架 8 第2章 android源码下载及编译 10  2.1 android源码下载指南 10  2.1.1 基于repo和git的版本管理 10  2.1.2 android源码下载流程 11  2.2 原生态系统编译指南 12    2.2.1 建立编译环境 13    2.2.2 编译流程 15  2.3 定制产品的

Android内核漏洞利用技术实战:环境搭建&amp;栈溢出实战

前言 Android的内核采用的是 Linux 内核,所以在Android内核中进行漏洞利用其实和在 一般的 x86平台下的 linux 内核中进行利用差不多.主要区别在于 Android 下使用的是arm汇编以及环境的搭建方面.本文对我最近的实践做一个分享,其实很简单. 内核调试环境搭建 搭建平台: ubuntu 16.04 这里使用 android 模拟器来进行内核调试.首先下载内核代码 git clone https://aosp.tuna.tsinghua.edu.cn/kernel/g

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Android APP 调试过程中遇到的问题. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007192169/AndroidAPP调试过程中遇到的问题.html