调试驱动使用此文方法已过时,可以参考使用visualddk+vmware+windbg

    近来一直在学习驱动相关内容,所以自然牵涉到调试驱动的问题。查阅资料甚多,但还未发现有能把整个调试框架串起来的资料,现做一个总结,请各位指正,谢谢!

   一、安装windbg+vmware,配置主机与虚拟机

1、windbg是微软提供的免费的内核级的调试工具,到处可以下载

2、vmware不是免费的,不过在网上可以找到破解版。我用的是6.5的。

3、完成了上面二个软件的安装后。进入下一步工作。即配置主机和虚拟机。

4、在vmware里安装操作系统(我装的是winxp,sp2)。这个不会,请查阅相关资料。

5、编辑vmware中winxp这个操作系统的C盘下的boot.ini文件,在[operating systems]节里,添加下面一句话:

multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1

6、打开vmware中winxp的设备管理器,选择端口(com1),如图一

kvm 显卡驱动_x86

图一

7、双击这个"com1",在弹出的对话框中,设置如图二

kvm 显卡驱动_虚拟机_02

图二

8、关闭vmware下的操作系统。配置虚拟机的硬件,VM->Settings->Add->加一个Serial Port,选择"Output to named pipe",然后下一步,第一框里保持默认的//./pipe/com_1

注:如果想同时调试二个或多个虚拟机的话,可将com_1改为com_2,com_3等(11-02-2009添加)

第二框里选"This end is the server."
第三框里选"The other end is an application."
选中 "Connect at power on"
然后点击 "Advanced>>"然后在新窗口中选中 "Yield CPU on poll"。保存退出。
好了,以上就是虚拟机系统要做的全部事情。

到此,虚拟机的设置基本完毕。

9、打开我们真实的操作系统。(我的还是winxp,sp2)

重得6,7步,不过此时是在真实的操作系统中。

10、设置windbg的快捷方式,即它运行时的参数。如下

"D:/Program Files/Debugging Tools for Windows/windbg.exe" -k com:port=//./pipe/com_1,baud=115200,pipe

"D:/Program Files/Debugging Tools for Windows/windbg.exe",这个串是你的windbg.exe文件所在路径,后面的是参数。分号是有的。

注意:"D:/Program Files/Debugging Tools for Windows (x64)/windbg.exe" -k com:pipe,port=//./pipe/com_1   这个是X64主机的设置,上面为x86主机的设置

所以说x64下vc6,vs200x系列编写的程序同样可以通过Windbg来调试。

注:如果想同时调试二个或多个虚拟机的话,可以把上面的com_1改为com_2,com_3,依此类推,选择哪个就看你在第8步的选择(11-2-2009 添加)

 

11、OK.所有的工作都完成了。现在打开虚拟机。并选择如图三所示 (注意,此时在真实主机里打开windbg,然后进行第12步,这一步很关键,如果你先选择做第12步,然后再启动windbg,则windbg永远无法 connect 虚拟机)

kvm 显卡驱动_vmware_03

图三

12、选择图三“启用调试程序”选项,并按回车,此时vmware的操作系统处于停顿状态。这是关键的一步,很多文章里没有说清楚,导致不能调试。

13、在做完12步后,在真实操作系统中,运行windbg,看,是不是可以看到调试信息了,虽然看不懂。此时vmware下的操作系统,开始进入我们熟悉的欢迎界面了。

14、在vmware的操作里打开monitor这个软件,相信大家都用过了,然后File->Open Driver.这样就算是装载了我的们的驱动了。

15、切换到真实主机,我们在windbg中,选择File->Open source file(或者Ctrl+O),这样我们就可以调试了,调试方法和调试应用程序如出一辙,我就废话了。

注意:我们的驱动程序(即.sys)文件可以在真实系统下编写,也可以在vmware下的操作系统下编写,但最好还是在真实主机下编写,这样调试起来稍微方便一些。

写了这么多,不知是否解开了你的疑惑。有问题,我们随时沟通,谢谢!

最后说一下,并不是只有通过这种方式才可以进行内核调试的,还有很多工具可以这样处理,

如KDVMWARE,http://www.zezula.net/en/fstools/kdvmware.html

双如,virtualKD,http://virtualkd.sysprogs.org/tutorials/install/

上述两个工具也是非常的好。