Han*_*ank 14 debugging android kernel android-source kgdb
我正在尝试为我的Nexus One进行内核调试,并且已经按照http://bootloader.wikidot.com/android:kgdb的说明进行操作.我想知道是否有人真的让这个工作?有没有人为使用KGDB调试内核做了更新的解决方案?
当我在 Android 上查找 KGDB 的信息时,我发现了这篇文章,因此,尽管它已有几年历史,但我认为值得发布一个链接,指向我为在 Nexus 6 上启动并运行它所做的一些工作。
http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss/
我希望这可以帮助其他寻找类似答案的人。
编辑了以下反馈(谢谢大家):
为了实现此功能,我必须根据Accuvant 博客制作一条 UART 调试电缆。这是一个相当简单的电路,由一个 FTDI 3.3v 基本分线器(在撰写本文时可从 SparkFun 获得)、4 个电阻器(2 x 1K Ohm、1 x 1.2K Ohm 和 1 x 100Ohm)以及一个4 元件头-环-环-套 (TRRS) 耳机插孔。这些电阻本质上是提供一个分压器,将 3.3V 电压降低到对您的手机来说更安全的电压。通过插入音频插孔并将另一端连接到电路板,音频子系统会识别其中一个引脚上的电压 (~2.8V),并知道通过该电缆提供 UART 接口。FTDI 分线器通过 USB 插入您的 PC,从这里您可以通过 minicom 等终端仿真器访问控制台消息。但是,您现在通过相同的机制拥有一个串行接口,这就是我们可以用于 KGDB 连接的接口。
因此,此时需要对 Nexus 6 的串行驱动程序 (msm_serial_hs_lite.c) 进行一些相对较小的更改,以支持 KGDB(具体来说,执行原子字符 I/O 操作的能力)。我刚刚从 Linux 内核主线代码中移植了这些更改,因为一个名叫 Stephen Boyd 的小伙子已经为完整的 MSM(高通)串行驱动程序 msm_serial.c 做了艰苦的工作。他的更改可以在这里找到,或者只需在 Google 上搜索“msm_serial:添加对 poll_ 的支持”即可。移植并不困难,我的代码可以在 github 上找到。
除此之外,您需要能够为您的 N6 构建自定义内核,谷歌提供了大量有关. 然后,您需要创建一个启动映像,其中包含 github 存储库中的 KGDB 修改。我从https://developers.google.com/android/nexus/images获取了库存内核,将其提取(使用 abootimg -x),然后使用以下命令使用我的自定义内核(zImage-dtb)和其他内容重新打包它命令行参数以确保 KGDB 被加载并指向我的串行端口,如下所示:
abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4'
Run Code Online (Sandbox Code Playgroud)
创建 boot.img 后,我可以使用命令 fastboot boot boot.img 启动它,打开 adb shell,然后使用以下命令在 Android 内核中触发断点:
echo -n g > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)
为了完整起见,值得一提的是,您需要超级用户权限才能访问 /proc/sysrq-trigger,因此您需要拥有 root 权限。
电话停止并连接调试电缆后,在主机 PC 上启动 GDB for ARM 版本,并将未压缩的内核作为参数(例如,arm-eabi-gdb ./vmlinux)。注意:我正在运行 Ubuntu 14.04 并使用 AOSP 源存储库中“prebuilts”目录中的 arm-eabi-gdb。最后,输入以下命令:
set remoteflow off
set remotebaud 115200
target remote /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,这应该立即进入 kgdb 断点(您对 /proc/sysrq-trigger 的写入产生的断点)并且您可以开始调试。
我知道您已经在 Android 内核开发列表中提出了一个问题,但没有得到答案,但是您是否在档案中搜索过有关 kgdb 和调试的帖子?:http://groups.google.com/group/android-内核/搜索?group=android-kernel&q=kgdb&qt_g=Search+this+group
特别是,您可能想看看这篇文章:http://groups.google.com/group/android-kernel/browse_thread/thread/5233e03391867c98/320beef11e737a62
以下是一些其他可能有用的随机链接:
无论如何,这是一个有趣的问题,我真的很难找到任何相关内容。您可能想尝试有时跳上 IRC(#android-dev 或 #android-root on freenode)并向那里的一些人寻求指导(请发布您在这里找到的内容),或者也许在xda-developers Android 论坛上询问。