因为打算进行一下Win7的驱动开发,于是不得不硬着头皮以一个新手的姿态重新学习驱动的东西,驱动开发只能用恶心来形容,也许是因为我根本还不算入门,单就搭建一个可以设断点的调试平台就让我耗尽心力——当然,我是菜鸟,这也很正常是吧。Windows的驱动开发已经进入到WDF的年代,据说会比以前开发效率更高,我是没法作比较,姑且将我作的开发笔记记录到博客上,主要是备忘——没办法,本人记性奇差无比。

    讲驱动开发的书市面上并不多的,我手上有四本:Ronald D.Reeves的《Window7 设备驱动程序开发》中文版,武安河老师的《Windows 设备驱动程序WDF开发》,经典的《Windows 驱动开发技术详解》,还有驱网著名的《竹林蹊径》,当然,我一本也没看懂,因为此文是综合借鉴大家之言,当然不能掩盖别人的功劳,为此略表结以上作者的崇拜之情。

    言归正传吧。

(1)设置VMWinDBG通讯用的虚拟串口

    虚拟机的使用是驱动开发必须的,理由我就不多说了。网上有很多这样的文章,其实都挺实用的,唯一的缺点是,没有深入到断点调试的那一步,而且有些地方不尽详细,那我不妨多作点无用功,将自己搭建的调试环境一步步展现给大家吧。

    我的VM8.0版本的,目标机装的xp(因为我的测试源码是基于xp的),win7下面的配置我暂时不说,网上攻略颇多,或以后我自己开始配置Win7时我补回去吧。

    怎么在VMXP我就不废话了。装好系统后,先别急着开启,打开目标系统的Virtual Machine Setting选项,在Hardware中添加新硬件:1)选择Serial Port2serial Port Type 选择“Output to named pipe”;3Specify Socket的选项如图1吧;4)最终的配置结果如图2所示。然后启动VM的目标系统吧。

菜鸟WDF驱动开发系列(1):VM+Windbg调试平台的搭建_第1张图片 

图1

菜鸟WDF驱动开发系列(1):VM+Windbg调试平台的搭建_第2张图片 图2 

2)设置目标机系统的启动项

    进入WinXP的虚拟机操作系统,打开系统盘(C:\),将文件夹查看选项全开了,那在C盘根目录下有一个叫boot.ini的启动项文件,先去掉只读属性,以文本文件的方式打开,拷贝原来的启动项,作如下修改:

Multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debug /debugport=com2 /baudrate=115200

    然后重新启动,则虚拟机设置完成。在此处需要注意的是,在第一步如果你添加的是Serial Port 1,则在boot.ini中修改/debugport=com1,似乎这是因为目标系统本身就带有一串口,所以新增一个用于命名管道的Serial Port时,系统内部增加的是COM2。还有就是将boot.ini的timeout值弄得大一点,方便选调试模式,以后VM启动时就会出现调试的启动项,如下图3所示:

菜鸟WDF驱动开发系列(1):VM+Windbg调试平台的搭建_第3张图片 

图3

 3)配置WinDBG的快捷方式

    如果你装了WDK的话,你可以在如下路径找到WinDBG的执行文件:D:\WinDDK\7600.16385.1\Debuggers,当然,你也可以在开始菜单中找出WinDBG的启动方式(似乎有x86\x64之分,对应本机系统,但没什么区别),我选择的是开始菜单中的WinDBG。然后添加桌面快捷方式,修改快捷方式的属性快捷方式,在“目标”中添加如下文字,注意pipe的名称与VM的串口设置一致:

-b -k com:pipe,port=\\.\pipe\com_xp,baud=115200,resets=0      

       至此,完成全部的调试环境配置,接下来就可以调试第一个驱动程序了,其实Win7下面的环境配置会比XP下面要烦挺多的,但一般照网上说的去做也没什么太大的问题。值得一提的是,可以用VirtualDDK的配置调试环境,那相当方便,由于我连接成功一次后就莫名其妙地不行,我就放弃了用它,若以后我找出什么连接不了的原因后再作补充吧。