14

我正在尝试为我的 Nexus One 进行内核调试,并且一直遵循http://bootloader.wikidot.com/android:kgdb的说明。我想知道是否有人真的让这个工作?有没有人为使用 KGDB 调试内核做了更新的解决方案?

4

2 回答 2

5

当我在 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 元素 Tip-Ring-Ring-Sleeve (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 (Qualcomm) 串行驱动程序 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'

创建 boot.img 后,我可以使用命令 fastboot boot boot.img 启动它,打开 adb shell,然后使用以下命令在 Android 内核中触发断点:

echo -n g > /proc/sysrq-trigger

值得一提的是,您需要超级用户权限才能访问 /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

一切顺利,这应该会立即进入 kgdb 断点(您对 /proc/sysrq-trigger 的写入产生),然后您就可以开始调试了。

于 2015-08-17T09:30:53.983 回答
2

我知道您已经在 Android Kernel Dev 列表中提出了一个问题并且没有得到任何答案,但是您是否在档案中搜索过有关 kgdb 和调试的帖子?:http ://groups.google.com/group/android- kernel/search?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 在 freenode 上)并向那里的一些人寻求指点(请在此处发布您找到的内容),或者在 xda-developers Android 论坛上询问.

于 2011-03-13T11:10:38.067 回答