kgdb的调试环境的建立(亲自操作)

原创 2012年03月31日 10:00:15

参考博文:

http://blog.chinaunix.net/space.php?uid=20937170&do=blog&id=3035576
http://hi.baidu.com/lijunzzu/blog/item/da92bb037b9c826c3912bb4b.html
http://blog.csdn.net/jie12310/article/details/4564853
linux下的模块开发,不可避免要用到kgdb来调试,kgdb的调试环境需要一台开发机,一台目标机,其中代码运行在目标机上,开发机通过串口来调试目标机上的模块代码。用vmware可以方便的使用管道来代替真正的串口,而且只用一台笔记本就可以玩起来,非常简单粗暴 得意

1. 开发机和目标机通过vmware的命名管道建立串口设备,其中开发机作为管道的client,目标机作为管道的server,如图所示

开发机串口设置



目标机串口设置


之后就可以安装虚机了,我选用的是centOS6的发行版本,自带redhat裁剪过的2.6.32的内核,之所以选这个版本的内核,因为2.6.28之后的内核版本已经合并了kgdb(之前的mainstream内核版本是没有kgdb模块的,需要自己下载一份patch,麻烦。。)安装完成后,建议你重新编译一次kernel,我选的是2.6.32.27的kernel.org版本,在make menuconfig时,记得把kernel hacking里面该选的都选上,特别是kgdb下面的选项都编进内核(具体的.config可以问我要),或者下面的步骤不用配置,直接下载2.6.37.71以后的src.rpm的内核源码包直接rpmbuild -bc  编译源码包,一直到最后编译结束有个vmlinux文件即可


All these options on are the “Kernel Hacking” menu.

In order to support KDB, “KGDB” support must be turned on first (even if you aren’t using kgdb/gdb)

  • CONFIG_DEBUG_KERNEL=Y – includes debug information in the kernel compilation – required for basic kernel debugging support
  • CONFIG_KGDB=Y – turn on basic kernel debug agent support
  • CONFIG_KGDB_SERIAL_CONSOLE=Y – to share a serial console with kgdb.
    • Sysrq-g must be used to break in initially.
    • Selecting this will automatically set:
      • CONFIG_CONSOLE_POLL=N
      • CONFIG_MAGIC_SYSRQ=Y – turn on MAGIC-SYSRQ key support
  • CONFIG_KGDB_KDB=Y – actually turn on the KDB debugger feature

Optional other configuration settings:

  • CONFIG_FRAME_POINTER=Y – this allows for better backtrace support in KDB
  • CONFIG_DEBUG_RODATA=N – disable this in order to support breakpoints on data accesses
  • CONFIG_KALLSYMS=Y – this adds symbolic information to the kernel, useful to see symbols instead of addresses
  • CONFIG_KDB_KEYBOARD – use KDB with an attached keyboard (not for use with serial console)
  • CONFIG_KGDB_TESTS – used to turn on kgdb internal self-tests – see the config help for this for more information


注意CONFIG_DEBUG_RODATA不要选上

开发机虚机安装完之后,最简单的就是copy一份成为目标机,OK现在万事俱备了

有两种方式开始调试,如果你不想kernel在load完之后就hold住,可以在进入shell之后开始搞事。首先在开发机和目标机都是设置下stty参数,这样串口才可以通信

开发机:stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

目标机:stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

完了之后可以测试下,目标机上cat /dev/ttyS0,然后开发机上echo "test" > /dev/ttyS0,这时候目标机上应该显示test出来

在目标机上敲  echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc 如果成功,可以在/var/log/message里看到 kernel: kgdb: Registered I/O driver kgdboc

好了,现在你可以load你的module了(具体如何调试module下一篇文章讲),如果想要开始设置断点,首先需要 echo g > /proc/sysrq-trigger,这时会显示:

SysRq: DEBUG

Entering KGDB

表示目标机已经开始等待开发机的kgdb连接了

在开发机上,首先用gdb装载内核,这里要装载带有debug symbol的内核,就是为什么要编译一份内核的原因了,我这里是

gdb /usr/src/kernels/linux-2.6.32.27/vmlinux

(gdb) set remotebaud 115200

(gdb) target remote /dev/ttyS0


如果能看到这个,说明基本成功了,恭喜你!


现在目标机的内核已经break在 wmb()上了,如果你要目标机继续工作,可以c 一下,做一些事情,然后在目标机上再次敲 echo g > /proc/sysrq-trigger,又会回来


如果想让kernel在启动时就hold住等待调试的话,可以修改grub参数,如下图所示


这样目标机内核启动时会打出一条:

kgdb: Waiting for connection from remote gdb

这时用开发机的gdb去连就OK了,按个c,内核正常启动,搞定大笑

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

kgdb+Qemu-kvm调试环境建立方法和所需的相关文件

下面描述kgdb调试环境的建立。主要是参考:http://hi.baidu.com/liu_bin0101/blog/item/133e2f1f23395803314e1561.html,其中所需要的...

在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36

在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36 (2011-12-06 20:41) 标签: 转载  分类:分享 原文地址:在VMware环境下,使用...

KGDB+VMware内核调试环境搭建

KGDB 是个一特殊的内核辅助工具,除了在内核代码中加入了一些调试代码外也提供一个 gdbstub 用于和远程 gdb 调试程序联机用。以前,这样一个使用远程 gdb 调试内核的开发需要在一般linu...

ubuntu kgdb kernel 调试环境搭建

调试环境(末尾还有ubuntu下vmware的环境搭建方法): 主机:WindowsXP Professional 5.1.2600, Service Pack 3 Vmware:VMware®W...

调试番外篇 - KGDB环境搭建与使用

From: 内核&调试调试 调试番外篇 - KGDB环境搭建与使用测试环境宿主机环境:ubuntu 12.04 + linux kernel 2.6.32 目标机环境:ubuntu 12.04...

使用kdb和kgdb调试Linux内核(2)

Linux内核崩溃时,如果保存core文件失败,或者发生在系统启动早期,kdb/kgdb可能是一个解决问题的利器。过去网上很多文章介绍利用串口kgdb调试内核,这要求运行gdb的机器和被调试的机器通过...
  • yayong
  • yayong
  • 2016-02-05 09:36
  • 1282

Kgdb虚拟机串口调试linux kernel

本文介绍了vmware虚拟机下搭建kgdb双机调试环境的具体步骤。是对自己具体实践的总结,本人成功实现了对内核的调试。预计很快就会掌握对module的调试方法。

使用kgdb进行Linux内核调试(未完成!)

Linux内核调试 本篇文章将介绍如何进行Linux的内核调试,我们的环境如下: 主机:Ubuntu 11.04 虚拟机:VirtualBox的Ubuntu11.04 首先做如...
  • htttw
  • htttw
  • 2012-02-15 17:58
  • 1536

通过KGDB进行双机内核调试

原理原理结构图原理过程Kgdb是双机在线调试,一端是Host端(linux),运行GDB,另一端是Target端,运行带Kgdb的linux内核。 两边通过串口(KGDBoc)或网络口(KGDBoE...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)