首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:使用KGDB进行内核调试

Android:使用KGDB进行内核调试
EN

Stack Overflow用户
提问于 2011-02-09 03:22:10
回答 2查看 9.4K关注 0票数 14

我正在尝试对我的Nexus One进行内核调试,并且一直在遵循http://bootloader.wikidot.com/android:kgdb的指导。我想知道是不是有人真的让它起作用了?有没有人为使用KGDB调试内核提供了更新的解决方案?

EN

回答 2

Stack Overflow用户

发布于 2015-08-17 17:30:54

当我在Android上寻找KGDB的信息时,我发现了这篇文章,所以,尽管它已经有几年的历史了,但我认为值得发布一个链接,指向我为在Nexus 6上启动和运行它所做的一些工作。

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

我希望这对其他寻找类似答案的人有所帮助。

编辑了以下反馈(感谢所有人):

为了让它正常工作,我必须制作一条基于this Accuvant blog的UART调试电缆。这是一个相当简单的电路,由一个FTDI3.3V基本分路器(在撰写本文时可从SparkFun获得)、4个电阻器(2 x 1K欧姆、1 x 1.2K欧姆和1 x 100欧姆)和一个4元件针尖环套(TRRS)耳机插孔组成。电阻本质上提供了一个电压分压器,将3.3v的电压降低到对你的手机更安全的地方。通过插入音频插孔,另一端连接到您的电路板,音频子系统识别其中一个引脚上的电压(~2.8V),并知道通过该电缆提供UART接口。FTDI breakout通过USB插入您的PC,从这里您可以通过minicom等终端仿真器访问控制台消息。但是,您现在有了一个通过相同机制的串行接口,这就是我们可以用于KGDB连接的接口。

因此,在这一点上,需要对Nexus6的串行驱动程序(msm_serial_hs_lite.c)进行一些相对较小的更改,以支持KGDB (特别是执行原子字符I/O操作的能力)。我刚刚从Linux内核主线代码移植了these changes,因为一个叫Stephen Boyd的家伙已经完成了完整的MSM (高通)串行驱动程序msm_serial.c的艰苦工作。他的更改可以在这里找到,或者在谷歌上搜索"msm_serial: add support for poll_“。移植并不困难,我的代码可以是found on github

除此之外,您还需要能够为您的N6构建一个自定义内核,其中谷歌provides lots of information on。然后,您需要创建一个引导映像,其中包含github存储库中的KGDB修改。我从https://developers.google.com/android/nexus/images获取了常用内核,将其解压缩(使用-x),然后使用以下命令将其与我的自定义内核(zImage-dtb)和其他命令行参数一起重新打包,以确保KGDB将被加载并指向我的串行端口,如下所示:

代码语言:javascript
复制
abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4'

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

代码语言:javascript
复制
echo -n g > /proc/sysrq-trigger

为了完整起见,值得一提的是,您需要超级用户权限才能访问/proc/sysrq-trigger,因此您需要root权限。

在手机挂起并连接调试电缆的情况下,在主机PC上启动用于ARM的GDB版本,并将未压缩的内核作为参数(例如arm-eabi-gdb./vmlinux)。注意:我正在运行Ubuntu 14.04,并使用AOSP源代码库中'prebuilts‘目录中的arm-eabi-gdb。最后,输入以下命令:

代码语言:javascript
复制
set remoteflow off
set remotebaud 115200
target remote /dev/ttyUSB0

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

票数 5
EN

Stack Overflow用户

发布于 2011-03-13 19:10:38

我知道你已经在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

下面是其他一些可能会有帮助的随机链接:

  • http://www.cs.gmu.edu/~astavrou/courses/ISA_673/Android_Debugging/Android_GDB.pdf
  • http://www.cs.columbia.edu/~nieh/teaching/w4118/ubb/Forum6/HTML/000122.html
  • http://wiki.ncl.cs.columbia.edu/wiki/AndroidVirt:Guides:Kernel_Debugging
  • http://source.android.com/porting/debugging_gdb.html

无论如何,这是一个有趣的问题,我真的很难找到任何关于它的东西。你可能想尝试一下IRC (#android-dev或#android-root on freenode),向那里的一些人请教(请在这里发布你找到的),或者在the xda-developers Android forums上询问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4937322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档