现在的位置: 首页 > 综合 > 正文

ARM kernel 2.6.26 下的kgdb调试

2013年10月03日 ⁄ 综合 ⁄ 共 1389字 ⁄ 字号 评论关闭

http://www.unixresources.net/linux/clf/linuxK/archive/00/00/70/85/708507.html#article709039

本人水平有限,只是把使用过程记录下来,希望对有这方面需求的人有点参考. 

基本软硬件环境描述: 
基于ARM的demo板(Freescale I.MX系列),带有一个UART口和网口。 
kernel 2.6.26. 已经支持了kgdb。其实24内核版本也是可以的,我已经验证过了。本人已经根据自己的公司的kernel版本制作了一个patch,但目前估计还不适合大家,等整理完后,看看是不是可以上传上来。 
由于时间问题,我只能分段的逐步记录。 希望各位筒子们多支持,并给出建议。 

(一) 先看看打完patch后的一些配置及基本的使用。 ^_^ 采用倒序的方法可能好些吧,先看看kgdb到底可以做什么,然后再来考虑如何的修改代码。kgdb的基本原理,众所周知了,不知道的google一下吧。26好像只支持uart的调试。 patch完成后,make menuconfig吧, 如果你看到了以下这些并把它们选上这些就可以了: 
Kernel hacking --> 

  • Kernel debugging 
  • compile the kernel with debug info 
  • KGDG: kernel debugging with remote gdb --> 
  • KGDB: use kgdb over the serial console 
    然后就是编译内核了,编译完成后,加载启动,这里需要修改启动参数,具体的就看大家用的是什么bootloader了,不过基本都差不多吧,我用的是redboot, 增加以下几个参数设置: 
    "kgdboc=ttymxc0,115200 kgdbwait" 
    总共就是三个参数吧,kgdboc/kgdbwait/kgdbcon,这里没有用kgdbcon,如果用的话,就把这个加进去就可以了,加进去后,输出到控制台的msg就会在gdb的调试台看到了。 
    设置完成后,复位板子吧,如果你看到了如下的信息,kgdb就正常启动了: 
    "kgdb: Waiting for connection from remote gdb..." 
    到此,target上是启动完成了,接下来就是等待来自host的gdb client 连接请求了。 
  • 客户端的连接比较简单,最好找到目标编译工具链的gdb,比如arm-linux-gdb啥的,到kernel源代码目录下运行: xx-gdb vmlinux. 接着设置一下gdb的连接.通过串口来与target通信。 
    gdb> target remote /dev/ttyS0 
    连接成功后,你可以看到一些打印消息,同时target的console上也会打印一些RSP协议的码流。ok,到此gdb client和target的 gdb stub完成的连接协议的交互,也就可以接收debug命令了,设个断点试一试吧。需要注意的是,这是在kernel初始化时被中断的,具体中断在什么位置,这个估计系统不一样还是有区别的,大家看看启动信息就知道了,你设置的断点肯定是要在这之后初始化的代码才可以的。 
    (二) 
    上一节的调试,只能完成初始化代码的debug,比如module_init之类的。接下来再说一下系统正常启动后,如何再进入调试模式,并且如何调试手动加载的module。 
  • 抱歉!评论已关闭.