要调试内核代码是一件不容易的事情,一般是需要双机调试的方法,一台电脑作为目标机器来运行编译出来的操作系统,另一台电脑作为跟踪调试的机器,用来查看操作系统输出的调试信息、以及输入命令给操作系统。现在就来介绍基于虚拟机的方式来调试内核代码,最简单的方式就是使用串口通讯的方式,并且串口设置为零调制方式,也就是说只需要把数据线接收和发送交叉连接就可以了。假如在物理的电脑里有两个串口,分别命名为COM1和COM3,那么就可以在虚拟机里使用COM1作为输出串口,然后拿一条交叉的串口线把物理串口COM1和COM3连接起来,再打开串口程序并且连接串口COM3,那么就可以显示操作系统输出的信息,也可以输入命令给虚拟机操作系统了。交叉的串口线如下图所示:
DTE1_______________________________________________DTE 2
9pol 25pol (female)__________________________25pol 9pol (female)
5 7 ---GND---------------------GND------- 7 5
2 3 ---RxD--------. ,----------RxD------- 3 2
X
3 2 ---TxD--------' `----------TxD------- 2 3
7 4 ---RTS--------. ,----------RTS------- 4 7
X
8 5 ---CTS--------' `----------CTS------- 5 8
4 20 ---DTR--------. ,----------DTR------- 20 4
X
6 6 ---DSR--o-----' `-------o--DSR------- 6 6
| |
1 8 ---DCD--' `--DCD------- 8 1
其实使用虚拟机,就更加方便了,即使没有物理串口,也可以使用虚拟串口的方式来连接虚拟机和主机之间的通讯。在WinXP操作系统里,可以编写虚拟的驱动程序,这样就可以虚拟两个串口出来,并且这两个串口就是为了交换数据的。因此需要安装一个可以虚拟两个串口,并实现零调制方式的驱动程序,它就是com0com驱动程序。可以通过下面的网页下载:
http://sourceforge.net/projects/com0com/files/
我这里下载的是com0com-2.2.2.0-i386-fre.zip文件,解压并安装后,就可以通过开始菜单里找到Setup程序来配置两个串名称和参数等,如下图:
接着运行Setup程序,就可以出现下面界面:
上面不是安装后缺省的参数,我更改两个串口的名称为COM7和COM8。这样就准备好两个通讯的串口了,然后在VMware里就可以添加串口COM7作为输出输入串口,如下图所示:
设置好虚拟机的串口后,就可以去设置主机的串口程序了。这里使用PuTTY程序来作为串口程序,需要从下面的网站上下载,如下:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
下载完程序后,然后运行程序打开COM8的串口,这样可以设置串口完成。
最后选择KDBG方式编译,选择ReactOS(RosDbg)的方式启动,就会在PuTTY里看到下面的界面,并可以输入调试命令,如下:
通过这样的方式,就可以进入内核代码的调试和开发了。