搭建virtualbox + kgdb内核调试环境

转载 2016年08月29日 16:05:59


http://blog.chinaunix.net/uid-27033491-id-3260904.html

http://blog.chinaunix.net/uid-27033491-id-3274496.html


      学习linux内核,调试内核是比不可少的环节,下面就介绍如何搭建调试环境。本文是傻瓜式地说明过程,
主要是为了供一些初学者参考。本人也是初学者,知道傻瓜式的东西就是好。

-----------------------------------------------------------
一,先总体说下,必备的环节有哪些?
     1,安装virtualbox虚拟机。我用的主机环境是ubuntu11.04,虚拟机时ubuntu10.04.
     2,开启virtualbox虚拟机的增强功能。(主要是为了设置共享文件夹)
     3,设置虚拟机与主机之间共享文件夹。(因为后面需要在虚拟机中编译内核)
     4,设置虚拟机和主机之间的串口通信。(两个OS之间需要通信)
-----------------------------------------------------------
二,安装virtualbox。
   2.1,首先在virtualbox官网下载一个软件包
              下载网址: https://www.virtualbox.org/wiki/Linux_Downloads
               我下载的是:virtualbox-4.1_4.1.16-78094~Ubuntu~natty_i386.deb------------------------------------------------------------------------------------------------
     2.2,使用sudo dpkg -i virtualbox-4.1_4.1.16-78094~Ubuntu~natty_i386.deb安装。
              安装过程出现需要一些依赖,见下图,这是我安装时出现的。
               
        解决方法:sudo apt-get install -f 
-------------------------------------------------------------------------------------------------------------------
三,设置virtualbox的增强功能及其共享文件夹。
         参考:http://blog.chinaunix.net/uid-27033491-id-3267228.html
四,设置virtualbox和主机的串口通信。
        参考:http://blog.chinaunix.net/uid-27033491-id-3267248.html
--------------------------------------------------------------------------------------------------------------------


在搭建好virtualbox之后开始如下工作。

1.在虚拟机virtualbox中编译新的内核。
   新的内核要支持kgdb,必须要配置内核选项。执行make menuconfig后的配置选项参考如下:
   <1>KGDB必须使能的内核选项:

  1. CONFIG_EXPERIMENTAL = y
  2.  Location:
  3.     -> General setup
  4.      -> Promptfor development and/or incomplete  code/drivers
  1. CONFIG_KGDB = y
  2.  Location:
  3.     -> Kernel hacking
  4.      -> KGDB: kernel debugger
  1. CONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信)
  2.  Location:
  3.     -> Kernel hacking
  4.      -> KGDB: kernel debugger
  5.               -> KGDB: use kgdb over the serial console
  <2>建议关闭的选项
  1. CONFIG_DEBUG_RODATA = n
  2. 该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的
  3. 设置软断点功能失效。所以推荐将该选项关闭。
  4.  
  5. Location:
  6.      -> Kernel hacking
   <3> 建议打开的选项
  1. CONFIG_KGDB_LOW_LEVEL_TRAP = y
  2. 使能该选项可以kgdb不依赖notifier_call_chain()机制来获取断点异常,
  3. 这样就可以对notifier_call_chain()机制实现相关的函数进行单步调试。
  4. Depends on: KGDB[=y]&& (X86 [=y]|| MIPS [=MIPS])
  5. Location:
  6.      -> Kernel hacking
  7.        -> KGDB: kernel debugger(KGDB [=y])
  1. CONFIG_DEBUG_INFO = y
  2. 该选项可以使得编译的内核包含一些调试信息,使得调试更容易。
  3. Location:
  4.      -> Kernel hacking
  1. CONFIG_FRAME_POINTER = y
  2. 该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
  3. Location:
  4.      -> Kernel hacking
  1. CONFIG_MAGIC_SYSRQ = y(如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
  2. 激活"魔术 SysRq". 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。
  3.  
  4. Location:
  5.      -> Kernel hacking
---------------------------------------------------------------------------------------------------------------------------
2,编译内核。参考:http://blog.chinaunix.net/uid-27033491-id-3233389.html
  编译内核完成后,将vmlinux文件通过共享文件夹copy到主机上,供gdb调试用.
---------------------------------------------------------------------------------------------------------------------------
3,编译好内核后,需要修改grub。(我编译使用的内核是2.6.39.4)
  ...
 linux    /boot/vmlinuz-2.6.39.4 root=UUID=3f02ad87-4327-4bc2-96bd-617d56bf8a68 ro  kgdb=ttyS0,115200 kgdboc=ttyS0,115200  kgdbwait
 ...

内核启动时将会等待主机使用target remote...进行远程链接。见下图。

---------------------------------------------------------------------------------------------------------------------------
4.然后在主机上进行远程链接,这就需要使用串口了。
   首先在主机执行如下命令。
   $socat -d -d /tmp/vbox  pty:
    注意:/tmp/vbox是创建串口通信时的主机有名管道。

执行该命令后,进入死循环,记住远程链接的参数 /dev/pts/3 然后另开一终端,使用gdb进行远程
链接。

如上kgdb_breakpoint函数就是内核的第一个断点。接下来就可以调试了。

-----------------------------------------------------------------------------------------------------------------------

参考:http://www.kgdb.info/kgdb/use_kgdb/enable_kgdb_option/
           http://fotis.loukos.me/blog/?cat=8§

         





相关文章推荐

KGDB+VMware内核调试环境搭建

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

使用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...

使用KGDB 进行内核调试(平台搭建和调试)

最近做的research涉及到在调试一个loadable linux kernelmodule, 查了下相关资料,发现在kernel下debug 需要的工具是KGDB(其实KGDB主要是做一个连接桥梁...

linux内核调试(kgdb)

1. 几种内核调试工具比较   kdb:只能在汇编代码级进行调试;   优点是不需要两台机器进行调试。   gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核...

通过KGDB进行双机Linux内核调试

Kgdb是双机在线调试,一端是Host端(linux),运行GDB,另一端是Target端,运行带Kgdb的linux内核。 两边通过串口(KGDBoc)或网络口(KGDBoE)相连接,kgdb实现了...

linux内核调试环境搭建-1 Ubuntu10 .10下编译安装qemu

内核调试一般比应用层程序调试困难很多,主要因为内核是系统开机后执行的第一个程序,这使得用于一般应用程序的调试方法无法使用在内核上。自由软件社群开发了一些特殊方法解决这问题。 这些方法中最方便的方法莫过...

linux内核调试环境搭建-

kvm系统的前端是qemu-kvm,工作在用户空间,给用户提供一套方便的kvm虚拟化工具集合。下面来介绍一下qemu-kvm-0.11.0的编译过程。   1、下载 wget htt...

linux内核调试环境的搭建(使用qemu)

这里说明下,本人调试的内核版本是2.6.11.12,为什么去调试这么“古老”的版本?原因不多说了,你手头也许正拿着ULK3,而它针对的内核版本正是2.6.11,有比这更好的理由吗?而且这个版本不算旧,...

UML进行Linux内核调试 --1 环境搭建

1、下载内核版本: linux-3.4.9.tar.bz2   2、解压编译,注意在配置的时候menuconfig或者xconfig等的时候不要去修改UML的关于cpu设置的配置 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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