Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:使用KGDB进行内核调试_Android_Debugging_Kernel_Android Source_Kgdb - Fatal编程技术网

Android:使用KGDB进行内核调试

Android:使用KGDB进行内核调试,android,debugging,kernel,android-source,kgdb,Android,Debugging,Kernel,Android Source,Kgdb,我正在尝试为我的NexusOne进行内核调试,并且一直遵循来自的说明。我想知道是否有人真的让它起作用了?有人用KGDB调试内核的最新解决方案吗?我知道你已经在Android内核开发人员列表上问了一个问题,但没有得到答案,但是你有没有在档案中搜索有关KGDB和调试的帖子 特别是,你可能想看看这篇文章: 以下是一些可能有用的其他随机链接: 无论如何,这是一个有趣的问题,我真的很难在上面找到任何东西。你可能想尝试一下在IRC上跳转(#android dev或#freenode上的andro

我正在尝试为我的NexusOne进行内核调试,并且一直遵循来自的说明。我想知道是否有人真的让它起作用了?有人用KGDB调试内核的最新解决方案吗?

我知道你已经在Android内核开发人员列表上问了一个问题,但没有得到答案,但是你有没有在档案中搜索有关KGDB和调试的帖子

特别是,你可能想看看这篇文章:

以下是一些可能有用的其他随机链接:


无论如何,这是一个有趣的问题,我真的很难在上面找到任何东西。你可能想尝试一下在IRC上跳转(#android dev或#freenode上的android root)并向那里的一些人寻求指导(请在这里发布你找到的东西),或者继续提问。

我在寻找android上的KGDB信息时发现了这篇文章,尽管它已经有几年了,我认为值得发布一个链接,链接到我为在Nexus6上安装和运行该软件所做的一些工作

我希望这能帮助其他寻找类似答案的人

编辑以下反馈(谢谢大家):

为了让这项工作,我必须做一个UART调试电缆的基础上。这是一个相当简单的电路,由一个FTDI 3.3v基本分接头(在撰写本文时可从SparkFun获得)以及4个电阻器(2 x 1K欧姆、1 x 1.2K欧姆和1 x 100欧姆)和一个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做了艰苦的工作。他的变化可以在这里找到,也可以在谷歌上搜索“msm_序列号:添加对民意测验的支持”。端口并不难,我的代码也可以

除此之外,你还需要能够为你的N6构建一个定制的内核。然后需要创建一个引导映像,其中包含github repo中的KGDB修改。我从中获取股票内核,提取它(使用abootimg-x),然后使用以下命令将其与我的自定义内核(zImage dtb)和其他命令行参数重新打包,以确保加载KGDB并指向我的串行端口,如下所示:

abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4'
创建my boot.img后,我可以使用命令fastboot.img引导到它,打开adb外壳,然后使用以下命令在Android内核中触发断点:

echo -n g > /proc/sysrq-trigger
为了完整性,值得一提的是,您需要超级用户权限才能访问/proc/sysrq触发器,因此您需要具有root权限

手机停止,调试电缆连接,在主机PC上启动一个版本的GDB for ARM,并将未压缩内核作为参数(例如ARM eabi GDB./vmlinux)。注意:我运行的是Ubuntu14.04,使用的是AOSP源代码库中“prebuilts”目录中的arm eabi gdb。最后,输入以下命令:

set remoteflow off
set remotebaud 115200
target remote /dev/ttyUSB0

一切正常,这应该立即进入kgdb断点(您写入/proc/sysrq触发器时产生的断点),然后您可以开始调试。

有工具很好,如果您能让它工作,那就太好了,通过仔细使用printk的相关问题,您可能会更快地解决给定的选通问题并恢复项目:这并不能提供问题的答案。要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论了。嗨,苏菲。谢谢你的反馈。OP问了两个问题:“有人能用它吗?”和“有人能用KGDB调试内核的最新解决方案吗?”我无法通过USB(OP的链接中提到的)实现这一点,但我在当前的Android设备上用调试电缆实现了,所以我认为这满足了第二个问题。有兴趣知道你是否不同意吗?这是一个公平的观点。我编辑了这篇文章以提供更多信息。这是我的第一篇合适的帖子,因此我对信息的缺乏表示歉意(我今天实际上回答了一个类似的问题,现在已经解决了这两个问题)。既然信息包含在答案中,第二个问题得到了回答,那么否决票是否仍然适用?