cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:5872回复:12

[原创]如何在vmware上搭建环境调试内核

楼主#
更多 发布于:2007-04-26 18:36
如何在vmware上搭建环境调试内核
author: cyliu

一 安装linux虚拟机

1 在vmware上安装新的linux虚拟机.创建一个新的虚拟机,并一定要用IDE硬盘

2 从Internet下载源代码
   1、linux-2.6.18(www.kernel.org -ftp站点)
   2、kgdb-2.6.18 patch
   3、gdbmod-2.4(可选):调试module使用此gdb
  
3 编译内核
   a、将kgdb-2.6.18补丁打到Linux内核源码里。注意按照顺序打patch,因为此版本的patch是散的,需要手动一个一个添加,共12个文件。
  
   b、编译内核(make clean , make mrproper, make menuconfig, make, make modules , make modules_install, make install)
  
       在内核配置菜单的Kernel hacking选项中选择kgdb调试项,例如:
       [*] KGDB: kernel debugging with remote gdb                              
       [*]   KGDB: Console messages through gdb                                
            Method for KGDB communication (KGDB: On generic serial port (8250)) --->    
       < >   KGDB: On ethernet                                          
         [*] Simple selection of KGDB serial port                            
         (115200) Debug serial port baud rate                                  
         (0) Serial port number for KGDB  
        
       在device drivers选择项中选择kgdb相关项,例如
        Character devices-->
          KGDB: On generic serial port(8250)
          
    c、安装gdbmod-2.4
          
4 修改grub.conf
       例如:
title Fedora Core (2.6.16)
         root (hd0,0)
         kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00
         initrd /initrd-2.6.16.img
                      
       改为:
title Fedora Core (2.6.18)
         root (hd0,0)
         kernel /vmlinuz-2.6.18 ro root=/dev/VolGroup00/LogVol00 kgdb8250=0,115200 (kgdbwait)
         initrd /initrd-2.6.18.img
        
5 请检验新编译的内核是否可用。如果不能启动,可能是编译选项没有选好。如果没有问题,关闭这个linux虚拟机,进入下一步。

二 Clone linux虚拟机(请参考vmware手册)

1 Clone linux.在vmware上选择刚安装的linux虚拟机,然后vmware的clone方式。建议选择链接copy.
    
2 两台虚拟机:一台作target机,一台作develop机。

3 配置两台虚拟机串行通信
        a、在每个虚拟机中分别添加一个串口设备,并配置成命名管道 \\.\pipe\com_1
        
        b、指定target虚拟机的串口为server端,并选择"The other end is a virtual machine"属性,对于IO mode属性,选中"Yield CPU on poll"复选择框;
        
        c、指定develop虚拟机的串口为client端,并选择"The other end is a virtual machine"属性。
        
4 注意:这里的delelop的Linux虚拟机不要使用打了kgdb patch的linux系统,否则无法配置串行口。因为kgdb占用了ttyS0口,禁止使用。我这里使用的是2.6.16内核的系统。
  
三 调试内核(以调试网络功能为例)
1、启动target虚拟机

2、在develop虚拟机的linux-2.6.18源代码目录下,执行下面的命令:
       gdb ./vmlinux
       (gdb)    set remotebaud 115200
       (gdb)    target remote /dev/ttyS0
       (gdb)    break ip_rcv
       (gdb)    c
3、给target 虚拟机发数据包(如ping)
  
4、现在就像调试应用程序那样调试内核了。
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-05-29 16:51
作了一些修改,主要是调试内核变为2.6.18,同时给出一些注意事项.
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2007-06-27 17:02
kgdb-2.6.18网站上有,但不是打包的,分散的。需要一个个按照顺序Pack,顺序不能错,否则内核编译不过。
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地板#
发布于:2007-07-04 22:36
走走看看开源好 Solaris vs Linux
游客

返回顶部