精华内容
下载资源
问答
  • android内核调试

    2019-09-26 17:44:42
    0x1:内核编译 下载源码: $git clone https://android.googlesource.com/kernel/goldfish.git $git branch -a $git checkout remotes/origin/archive/android-gldfish-3.4 环境变量准备: export PATH=$NDK_...

    0x1:内核编译

    下载源码:

    $git clone https://android.googlesource.com/kernel/goldfish.git

    $git branch -a

    $git checkout remotes/origin/archive/android-gldfish-3.4

    环境变量准备:

    export PATH=$NDK_PATH/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin:$PATH

    export ARCH=arm

    export SUBARCH=arm

    export CROSS_COMPILE=arm-eabi-

    make goldfish_armv7_defconfig

    内核config选项:

    CONFIG_DEBUG_KERNEL=y 打开这个选项后,vmlinux 才有符号
    CONFIG_KGDB=y 开启kgdb

    编译内核:

    make ARCH=arm CROSS_COMPILE=$NDK_PATH/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- all

     

    0x2:内核调试

    emulator -no-window -no-audio -verbose -show-kernel -kernel goldfish/arch/arm/boot/zImage -memory 2048 -qemu -s -S

    默认的调试端口为1234.

    arm-linux-androideabi-gdb goldfish/vmlinux

    连接方法:

    target remote:1234

    c

    自动连接进入调试。

    转载于:https://www.cnblogs.com/Lamboy/p/6562424.html

    展开全文
  • Redhat enterprise linux 6上android内核调试平台搭建步骤 前提是java SDK已经装好,系统有可能自带。java -version命令检查 1. 下载交叉编译工具,地址http://www.codesourcery.com/gn
    Redhat enterprise linux 6上android内核调试平台搭建步骤
    


    前提是java SDK已经装好,系统有可能自带。java -version命令检查


    1. 下载交叉编译工具,地址http://www.codesourcery.com/gnu_toolchains/arm/download.html 选择Linux版本的,
       我的是 arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2


    2. 下载Android内核源代码,地址http://code.google.com/p/android/downloads/list进去之后点击一下all download,
        我下了个 linux-2.6.25-android-1.0_r1.tar.gz


    3. 下载Android linux版本SDK,主要是用到里面的一个配置文件,地址http://developer.android.com/sdk/index.html。
        我下载的是android-sdk_r12-linux_x86.tgz


    4. 解压所下载的3个包
       mkdir /opt/Android
       tar xvf arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 -C /opt/Android/
       tar xvf linux-2.6.25-android-1.0_r1.tar.gz -C /opt/Android/
       tar xvf android-sdk_r12-linux_x86.tgz -C /opt/Android/


    5. 设置环境变量
       vim /etc/profile在该文件末尾加上
       mypath_1=/opt/Android/android-sdk-linux_x86/tools
       mypath_2=/opt/Android/arm-2011.03/bin
       mypath_3=/opt/Android/android-sdk-linux_x86/platform-tools   (这个文件刚开始是没有的,等第六步结束之后就有了)
       export PATH=$mypath_1:$mypath_2:$mypath_3:$PATH
       保存退出 执行source /etc/profile使当前环境变量在当前终端有效


    6. 执行android命令,弹出一个窗口(Android SDK and AVD Manager),然后点击窗口中左边的Available packages,之后在
       右边的窗口中点击Android Repository,下一步选择一个版本的SDK Platform Android ...(我选择2.2版本的),下一步点击
       窗口右下角的Install Selected,之后是同意。此时需要等待下载完成。


    7. 完成下载后,关闭窗口。然后重新执行android命令,选择Virtual devices,点击New创建AVD
       在弹出的窗口中填写一些信息(我的是Name: Cyrnic  Target: Android 2.2 - API Level 8  Skin: Resolution 600 * 800
       Hardware:可以自己添加),完成点击Create AVD按钮


    8. 执行模拟器
       emulator -avd Cyrnic &
       如果之前的一切正常,模拟器就可以开启,等待完全开启之后在终端执行
       adb pull /proc/config.gz /opt/Android/  将模拟器中的config.gz文件拷贝到主机的/opt/Android目录中
       cd /opt/Android
       gzip -d config.gz
       cp config kernel.git/


    9. 修改内核Makefile
       cd /opt/Android/kernel.git

       vim Makefile 

           将SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
                     -e s/arm.*/arm/ -e s/sa110/arm/ \
                     -e s/s390x/s390/ -e s/parisc64/parisc/ \
                     -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
                     -e s/sh.*/sh/ ) 这些注释掉 然后改为 SUBARCH := arm

           将CROSS_COMPILE   ?= arm-eabi-  这行改为  CROSS_COMPILE   ?= arm-none-eabi-
           
       保存退出


       执行make  (make过程中可能会出现要重新配置内核的选项,此时一直回车就可以了)
       编译成功后会在/opt/Android/kernel.git/arch/arm/boot中生成zImage文件


    10. 关闭之前打开的模拟器,用新的内核执行模拟器
       emulator -avd Cynric -kernel /opt/Android/kernel.git/arch/arm/boot/zImage &
       不出问题会执行成功,已验证通过
    展开全文
  • 一、前言 在调试Android的Linux内核时,我们往往会通过打开对应模块的调试Log来查看一些关键信息。通常我们可以使用一些简单的查看方法,比如: 在pc端装有adb工具时,使用adb shell dmesg >D:/Kernel.log ...

    一、前言    

    在调试Android的Linux内核时,我们往往会通过打开对应模块的调试Log来查看一些关键信息。通常我们可以使用一些简单的查看方法,比如:

        在pc端装有adb工具时,使用adb shell dmesg >D:/Kernel.log

        但是dmesg通常只能打印部分Log信息,如果连续输入命令,在保存的日志文件中可能会出现很多重复内容,这是因为dmesg会打印启动后到目前的Log信息。

        或者使用:adb shell cat /proc/kmsg

        proc/kmsg,不会再打印已经打印的信息,只打印上一次执行之后打印出来的新的信息,但是同样因为缓冲区的原因,kmsg会出现中断。如果在主机端编写脚本定制调用kmesg,由于每次Kmesg结束的时间可能不固定,所以很难设置时间间隔,从而导致Log日志文件出现先后顺序不一样的打印,对于我们分析Log非常不利。

        如何让一台android调试手机,能够像Android开发板一样在串口实时打印信息呢?通过各种尝试终于找到了一种解决方案。

    二、开发环境

        软件环境:android 8.0.0 原生代码,msm内核源码,win7系统+CH341驱动。(要使用对应的源码分支和内核分支)

        硬件环境:Pixel 手机一部,CH341 USB转串口板2(淘宝上大把卖,大概十几块钱一个)

        首先请保证你的开发环境可以正常使用,pixel手机可以正常运行你编译的android系统和内核。

    三、配置过程

        1.在内核编译时,使用make menuconfig或者是直接修改.config文件(如果你有按照android官方内核编译步骤进行过一次config配置,就会生成这个隐藏的.config文件),需要打开这几个配置:CONFIG_USB_SERIAL; CONFIG_USB_SERIAL_CH341;

            编译好新内核后,烧入手机。

         2.添加CH341的串口设备到内核打印终端列表。这里涉及到了Linux的内核启动和printk的打印机制,推荐大家可以了解下关于这方面的相关知识。

        推荐个地址:https://blog.csdn.net/Luoshengyang/article/details/6595744 老罗写的,虽然内核版本有点老了,但是基本原理都是一样的。

            https://blog.csdn.net/code__L/article/details/68061455。关于printk的。

        这一步的总体思路是这样的,当Linux启动时,boot会传入一些启动参数,其中就包括内核打印使用的串口终端。通过解析console_cmdline参数。例如console=ttyS0,115200 console=tty0,115200

     通过一个type CUSB的数据线将手机和CH341接起来然后用adb shell查看串口设备名称,比如插拔后新增了ttyUSB0。把这个名称记下来。

    如果你能找到boot的启动参数,在console_cmdline中增加console=ttyUSB0,115200即可。

    如果找不到,就需要修改printk的代码了。

    static int __init console_setup(char *str)代码中解析了console_cmdline的参数,然后通过__add_preferred_console加入控制台列表中,可以添加参数实现,具体的分析就不累述了。

    或者__add_preferred_console(buf, idx, options, brl_options);在这后面重新调用__add_preferred_console(ttyUSB, 0, 115200, brl_options);也可实现。

    修改后重新编译内核,烧入手机。

    三、连接调试

     

     

     


    按上图连接好后,在PC上就可以打开串口软件查看内核的打印信息了。

     

    本文仅供参考学习,如要转载请注明出处,谢谢!


    展开全文
  • Author: GeneBlue禁止任何形式转载0X01 前言研究Android底层或漏洞方面的知识,编译调试内核源码是必不可少的。这篇文章介绍内核编译调试的基本步骤。0X02 环境Android开发环境:SDK,NDKPC OS:Ubuntu 14.04 LTS 64...

    66b52468c121889b900d4956032f1009.png

    8种机械键盘轴体对比

    本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

    Author: GeneBlue

    禁止任何形式转载

    0X01 前言

    研究Android底层或漏洞方面的知识,编译调试内核源码是必不可少的。这篇文章介绍内核编译调试的基本步骤。

    0X02 环境Android开发环境:SDK,NDK

    PC OS:Ubuntu 14.04 LTS 64bit

    Kernel Source:goldfish3.4

    Android Source: android-4.4.4_r1

    0X03 配置

    设置环境变量,指定交叉编译器到path路径,指定编译时使用的配置文件,保存为脚本方便执行:export PATH=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/:$PATH

    export ARCH=arm

    export SUBARCH=arm

    export CROSS_COMPILE=arm-eabi-

    make goldfish_armv7_defconfig

    通过git将内核源码回溯到补丁之前的版本。增加内核config选项,默认的goldfish_armv7_defconfig配置没有打开调试,也没有使用HIGHMEM,手动打开 goldfish/.config 文件,设置以下配置:CONFIG_HIGHMEM=y

    CONFIG_DEBUG_KERNEL=y

    CONFIG_KGDB=y

    CONFIG_DEBUG_INFO=y

    CONFIG_KGDB_SERIAL_CONSOLE=y

    关闭CONFIG_DEBUG_RODATA选项

    0X04 编译

    编译一开始会有提示让选择配置选项,相关的配置全部选Y, 编译完成后内核在goldfish/arch/arm/boot/zImage 处make ARCH=arm CROSS_COMPILE=/home/geneblue/Android/Source/android-4.4.4_r1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi- all

    0X05 内核调试

    内核镜像编译成功后,可以在Android emulator中创建AVD并加载内核镜像。

    首先,需要建立一个用于调试内核的AVD:

    注意勾选“Use Host GPU”,该选项可以显著加快模拟器的启动速度。

    启动模拟器,检查新建的模拟器是否能正常启动:emulator -list-avds

    emulator -avd Debug_Kernel -gpu mesa

    启动完毕后,可以在模拟器中查看Android Kernel version:

    在此基础上指定编译好的内核镜像来启动模拟器:emulator -kernel ./goldfish/arch/arm/boot/zImage -avd Debug_Kernel -gpu mesa

    调试内核,需要在其启动的一开始就暂停下来,等待调试器的连接,使用如下命令:emulator -verbose -netfast -show-kernel -kernel ./arch/arm/boot/zImage -avd Debug_Kernel -gpu mesa -qemu -s -S

    -verbose -show-kernel选项可以看到内核的详细输出,-no-window -no-audio选项可以不启动界面,-qumu -s -S选项可以启动调试监听让内核启动时在端口1234等待。

    模拟器停止,等待gdb连接:arm-linux-androideabi-gdb vmlinux

    target remote :1234

    前述配置config选项时设置CONFIG_DEBUG_INFO=y,所以vmlinux中包含了内核符号信息,在gdb中可以做到源码级调试:

    至此,已经能够调试内核源码

    0X06 内核漏洞调试

    在能够调试内核源码的基础上,内核漏洞的调试则要求更多的调试技巧。拿到一个内核漏洞时,首先定位该漏洞发生的源码位置,熟悉该部分代码的功能和简单使用;如果有POC就验证一下,看看效果……

    展开全文
  • Android内核的编译和调试

    万次阅读 2017-04-28 11:02:27
    一、Android内核源码的选择 Android手机设备内核源码的调试需要外部硬件设备的支持,调试步骤比较麻烦。相对来说,Android模拟器内核源码的调试就比较简单了,这里以Android模拟器内核源码的调试为例。首先创建一个...
  • 本文描述了搭建Android内核调试的过程,最终达到源码级调试的目的。由于真机调试内核的步骤比较复杂,这里先用模拟器为例。1 环境&工具 硬件环境 软件环境 工具 模拟器 Android 4.4.2,内核:goldfish3.4 AOSP ...
  • Android内核开发 adb远程调试内核模块

    千次阅读 2016-10-04 21:55:27
    PS:关于内核模块如何编写编译,有空再补上 1、连接远程Android设备 D:\test>adb.exe connect 192.168.1.3
  • 对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android内核调试,网上资料也相对较少,不过通过一段时间的倒腾,我终于找到了还...
  • 使用Android模拟器调试linux内核

    千次阅读 2018-11-27 16:52:57
    使用Android模拟器调试linux内核为什么需要调试linux内核如何在Android上调试内核开发环境创建模拟器下载goldfish内核源码编译goldfish内核编译内核遇到的问题使用自己编译的linux内核启动模拟器使用gdb调试内核 ...
  • 前面的博客中已经记录了Nexus 5手机的Android 4.4.4 r1源码的编译基于ubuntu14.04.5,后面来学习一下Android内核源码的编译基于Nexus 5手机。 一、Android内核源码的下载 有关Android内核源码的下载信息可以参考...
  • gdb调试android内核

    千次阅读 2013-07-29 12:27:15
    版本:android 4.1 , ubuntu 12.04 64 gdb GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04 1,编译4.1,得到system.img,替换对应system.img 2,修改 build/envsetup.sh ,找到arm-linux-androideabi-...
  • 一、确定Android 内核版本 用虚拟机打开上一节产生的Android系统镜像,与上一节不一样的是我们使用后台打开$ /home/stone/Android/Sdk/emulator/emulator -avd MyPhone -system out/target/product/generic/system....
  • 基于adb工具与printk函数调试Android内核 前言 近期公司有个项目,需要编写Android平台下的传感器i2c驱动,因此调试Android内核是必不可少的手段,本文主要记录利用adb工具与printk函数打印内核消息的方法,以下...
  • 六、启动arm-eabi-gdb调试内核 启动一个带监听端口的模拟器 emulator -show-kernel -kernel ~/Android/AndroidKernel/goldfish/arch/arm/boot/zImage @Android2.3 -no-skin -logcat *:v -qemu -gdb tcp::...
  • 已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每一个...
  • Android 让adb logcat打印内核调试信息

    千次阅读 2011-08-30 21:52:01
    Android让adb logcat打印内核调试信息 在默认情况下,adb logcat只能显示应用程序的调试信息,我把logcat.cpp修改了一下,让它同时可以打印内核调试信息: 修改的文件:system/core/logcat/logcat.cpp 1、...
  • Android内核和驱动篇-Android内核介绍

    千次阅读 2011-01-08 01:00:00
    已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,402
精华内容 10,560
关键字:

android内核调试