您的位置:首页 > 编程语言 > VB

用vbox+kgdb进行内核调试的环境搭建

2010-10-28 08:51 351 查看
这类教程网上很多了,我当时搭建的时候也花了很大功夫,到处谷歌百度的。。。我现在我自己总结一下。

1,首先在vbox下安装一个linux,版本自己定义。然后再将这个linux克隆一个。这样就有了两台linux的虚拟机,当然如果是主机本来就是linux的话就不用克隆,我这里是xp,所以我搞了两个。vbox的克隆系统跟vmware不一样。不能直接复制。具体方法如下:

有两种方法:

一、在CMD窗口中进入VirtualBox 安装目录,然后用VBox自带的克隆命令复制,注意目标的路径和文件名必须写完整,缺点是速度慢了点

C:/Program Files/Sun/VirtualBox>VBoxManage clonehd
"E:/VirtualBox/Arch.vdi" "E:/VirtualBox/Arch2.vdi"

二、直接复制vdi,但复制完之后需要改uuid,否则挂不上

C:/Program Files/Sun/VirtualBox>VBoxManage internalcommands setvdiuuid
"E:/VirtualBox/Arch2.vdi"

 

这样就可以得到两个系统一样的虚拟机了。

将其中一个作为开发机(host),一个作为调试机(target),在host机编译内核,现在的内核编译选项都默认是选中debug和kgdb的。当然也可以自己选中。

首先执行

make menuconfig,在这之前可能还要安装.ncurses 包   ---带颜色的终端支持。

然后会打开编译选项窗口

Kernel Hacking -->
      选中Compile the kernel with frame
pointers
      选中KGDB:kernel debugging with remote gdb
     
并确认以下两项也是选中的(他们应该默认是选中的)
      > kernel debugging
      > Compile
the kernel with debug info 

这样就可以了,其他选项按自己要求吧。

搞完这个就可以编译内核了。

make -j10 bzImage  //10为十个线程编译内核,可以改成其他。

编译好之后就编译模块

make modules

模块编译后之后。就可以将这个文件夹所有的内用全部复制到target机上,任意目录。然后进入target机,找到刚才复制过来的目录。

进入目录,执行命令:

make modules_install   //安装模块

完成后执行命令:

make install

这样就安装好内核了。有的发行版不会生成initrd.img文件,可用mkinitramfs(ubuntu)和mkinitrd(redhat)来生成,具体可以百度谷歌。

 

这样就差不多,还要设置启动项,在target机的/boot/grub/menu.lst这个文件内设置新内核启动选项。设置两个,一个是开机过程中debug,一个是开机后debug。在kernel 那行最后加上 kgdboc=ttyS1,115200 kgdbwait,ttyS1为串口,115200为速度,kgdbwait就是开机的时候设置个断点,开机的过程中调试。将其去掉就可以开机的过程中不停止等待远程debug。

 

下面再说说串口的设置。

在vbox的串口设置里面选择com2,因为内核默认是使用ttyS1的,所以上面的是ttyS1,而不是S0。端口模式是host pipe。host选择创建通道,target机不用选择,端口/文件位置写 //./pipe/tmp,host机和target机的设置都是一样,区别就是host机穿件通道,target机不创建。这样,环境就搭成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息