2011-02-08 52 views
13

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

+2

虽然有工具很好,如果你得到这个工作,它会很好,你可能有更快的运气来解决给定的门控问题,并通过仔细使用printk的 – 2011-02-08 19:31:54

+1

来恢复你的项目。相关问题:[Android Kernel Debugging](http ://stackoverflow.com/q/6697754/816008) – 2011-08-29 10:25:46

回答

2

我知道,你已经问了一个问题,在Android的内核开发列表,并没有得到回应,但你通过档案有关的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或#freenode上的#android-root),并向某些人询问指针(请将您在此找到的内容贴出),或者询问the xda-developers Android forums

2

我在Android上查找KGDB的信息时发现了这篇文章,尽管它已经有几年了,但我认为值得发布一些链接,以帮助我在Nexus 6上运行它。

http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss/

我希望这可以帮助别人寻找类似的答案。

编辑下面反馈(感谢所有):

为了得到这个工作,我不得不做出基于this Accuvant blog一个UART调试电缆。这是一个非常简单的电路,它包括一个FTDI 3.3v基本跳线(在撰写本文时可从SparkFun获得)以及4个电阻(2 x 1K欧姆,1 x 1.2K欧姆和1 x 100欧姆)以及一个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操作的能力)进行相对较小的更改。我只是移植these changes从Linux内核主线代码为一个名为斯蒂芬·博伊德曾章所做的辛勤工作,充分MSM(高通)串口驱动msm_serial.c。他的更改可以在这里找到,或者只是在Google上搜索“msm_serial:添加对poll_的支持”。该港口是不困难的,我的代码可以found on github

除此之外,你需要能够建立一个定制的内核为你的N6其中谷歌provides lots of information on。然后您需要创建一个启动映像,其中包含github repo中的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' 

创建好,我可以启动到使用命令FASTBOOT启动的boot.img,打开一个亚行外壳,然后使用命令在Android内核触发断点我的boot.img:

echo -n g > /proc/sysrq-trigger 

完整性值得一提的是,您需要超级用户权限才能访问/ proc/sysrq-trigger,因此您需要t o有根。

随着手机停止,你调试电缆连接,推出针对ARM主机PC上的GDB版本与您的未压缩的内核作为参数(例如手臂-EABI-GDB ./vmlinux)。注意:我正在运行Ubuntu 14.04,并在我的AOSP源代码库的'prebuilts'目录中使用arm-eabi-gdb。最后,输入以下命令:

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

一切顺利的话这应该立即打入的kgdb断点(你写的/ proc/SysRq的触发产生的),你就可以开始调试。