这类教程网上很多了,我当时搭建的时候也花了很大功夫,到处谷歌百度的。。。我现在我自己总结一下。
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机穿件tongdao