这类教程网上很多了,我当时搭建的时候也花了很大功夫,到处谷歌百度的。。。我现在我自己总结一下。

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机不创建。这样,环境就搭成了。