许多驱动程序开发都将环境架设在VC上,可是偶的本本上好不容易安了个vs2008,舍不得删啊,因此毅然选择vs2008,抛弃vc。要开发驱动,DDK是少不了的,但是现在操作系统日新月异,老DDK是不能适应国家下一个“五十年计划”滴~~于是,我又一次毅然决然选择WDK代替DDK,呵呵,还是跟着微软大虾们的足迹,往前看吧......
先弄明白windows驱动的前因后果吧,这是选择开发环境和开发过程的基础~
1.首先,开发WINDOWS下的驱动程序,需要一个专门的开发包,就像开发JAVA程序,需要一个JDK,开发WINDOWS应用程序,需要SDK,现在开发WINDOWS下的驱动程序,我们们需要一个DDK/WDK。
2.开发驱动的工具包DDK(Driver Developer Kit)和WDK(Windows Driver Kit)的区别:
1).95/98/ME下,驱动模型为:Vxd,相关资料可以看《编程高手箴言》的前几个章节,里面有很详细的介绍,虽然这个东西已经过时,但大概看看还是会增长见识的。
2).2000/XP/2003下,Windows采用WDM驱动模型(Windows Driver Model),开发2000/XP/2003的驱动开发包为:DDK。
3).Vista及以后版本,采用了WDF驱动模型(Windows Driver Foudation),对应的开发包:WDK。
其实WDK可以看做是DDK的升级版本,现在一般的WDK是包含以前DDK相关的功能,现在XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。
3.Vxd驱动文件扩展名为:.vxd。
WDM和WDF驱动文件扩展名为:.sys。
下面将整个环境搭建过程描述如下:
*******************************************************************************************
一、安装阶段
1. (虚拟机也可以不安装) 安装WinXP虚拟机,VMware,系统安装的是WinXP_Pro_SP2.iso。
安装虚拟机可以用于调试,避免在真机上调试的时候,频繁出现蓝屏,重启等现象。自己的环境,安全第一啊~~安装好虚拟机后,还需要在虚拟机上安装上XP系统。
2. 安装Visual Studio 2008,安装前请留出足够大的空间,至少7G。
3. 安装WDK。注意安装时会选择要安装的内容,此时不要安装DSF。当然啦,安全前得下载啊~~ 这个现在可以再微软的官网上申请下载,给大家个网址吧https://connect.microsoft.com/default.aspx,这是connect的网址,你需要注册一个liveID,然后在左侧栏里找到“开发人员工具”,然后就能找到WDK了,申请,下载,OK~
传说WDK支持Windows 7, Windows Vista, Windows XP, Windows Server 2008 R2, Windows Server 2008, and Windows Server 2003.等等版本系统,不仅包含了原有DDK,还貌似包含了IFS的头文件,哎哟,貌似很有用呢,能适应长期发展.....(关于WDK的介绍与安装,请参考偶的后续博文~~)
4. 安装srvinstw.exe,用于安装生成的服务。
5、 安装DDKWIZARD,安装它主要是为了使你的vs支持驱动程序开发。并将其中的ddkbuild.cmd,和ddkbuild.bat两个文件放置到WDK的安装目录下,也就是C:\WinDDK下
*********************************************************************************************
二、配置阶段
0、 我的电脑-》属性-》高级-》环境变量》用户变量中 Path 后添加 C:\WinDDK\DDKBUILD.bat;C:\WinDDK\DDKBUILD.cmd;C:\WinDDK
然后再在系统变量中新建变量,根据不同的系统,选择下列中一个:
2000 DDK: W2KBASE
XP DDK: WXPBASE
2003 sp1 DDK: WNETBASE
【注】变量名应与你要使用的DDK版本相符,比如我要开发XP驱动,使用XPDDK,所以变量名为WXPBASE,其值为:C:\WinDDK\7600.16385.0
1、打开VS2008,在菜单上选择"工具"->"选项"弹出"选项"窗口,选择"项目和解决方案"->"VC++目录","显示以下内容的目录"
"可执行文件"中添加
"C:\WinDDK"
"C:\WinDDK\7600.16385.0\bin\x86\x86"
"C:\WinDDK\7600.16385.0\bin\x86"
"C:\WinDDK\7600.16385.0\tools\pfd\bin\bin\x86"
"包含文件"中添加
"C:\WinDDK\7600.16385.0\inc"
"C:\WinDDK\7600.16385.0\inc\api"
"C:\WinDDK\7600.16385.0\inc\crt"
"C:\WinDDK\7600.16385.0\inc\ddk"
"引用文件"中添加
"C:\WinDDK\7600.16385.0\lib\wxp\i386"
"库文件"中添加
"C:\WinDDK\7600.16385.0\lib"
"C:\WinDDK\7600.16385.0\lib\wxp\i386"
"源文件"中添加
"C:\WinDDK\7600.16385.0\src"
以上添加完毕直接按"确定"关闭"选项"对话框
如果编译出现C2144错误的时候,请把以上添加的文件向前移动(就是点击"选项"对话框中的向上的箭头按钮)
2、设置虚拟机的可调模式:
1)打开boot文件的方式可以选用以下两种:
1.我的电脑→属性→高级→“启动和故障恢复-->编辑。
2.运行→“msconfig”→boot.ini
boot.ini的修改如下:
在虚拟机中,编辑boot.ini文件,在末尾添加一行:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
2)保存后power off虚拟系统。在左边栏中选择Edit virtual machine settings-->add-->Serial Port-->Output to named pipe,此时出现三个文本框,依次填入:\\.\pipe\com_1”和“This end is the server.”,第3个修改为“The other end is an application.”
3)保存。配置真实机。创建windbg.exe在桌面的快捷方式,属性-->目标-->"C:\WINDDK\...\windbg.exe“ -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
4)可以选择配置真实机串口:我的电脑-->管理-->设备管理器-->端口com-->com1-->属性-->端口设置-->每位秒数-->115200
5) 启动windbg.exe, 在file-->symbol file path ,添加微软官方符号表srv*c:\symbols*http://msdl.microsoft.com/download/symbols 以及你自己工程中生成sys文件的目录(就是你要编译的驱动服务文件的目录,需要事先生成要调试的驱动服务.sys文件,并将.sys文件拷贝到虚拟机中),我的是E:\projects\Tests\first\objchk_wxp_x86\i386 ,两路径用分号分隔。勾选reload
6)启动虚拟机,将sys文件提供的服务用srvinstw.exe安装到虚拟机中。安装中,选手动,NT驱动不用填
7)重启虚拟机,选择调试模式,启动真实机桌面设置过参数的windbg快捷方式,此时如果出现
--------------------------
WinDbg:6.10.0003.233 X86
---------------------------
Could not start kernel debugging using com:pipe,port=\\.\pipe\vpcdebug,resets=10 parameters, Win32 error 0n2
Could not start kernel debugging using com:pipe,port=\\.\pipe\com1,resets=10 parameters, Win32 error 0n2
系统找不到指定的文件。
说明虚拟机还没有启动起来,只需要重启windbg。在系统出现中断时,在windbg中输入g。
8)进入到系统后,运行-->cmd-->net start 服务名 就可以启动你的驱动服务了。
****************************************************************************************************************************
新建项目:
1) VS2008-->新建项目-->DDK project-->Driver
2)F7,运行,如果没有生成sys,或者出现任何对话框,说明你配置出错啦~~ 有可能是在TOOL--->选项-->项目与解决方案-->VC++目录-->可执行文件 下,缺少了你放置DDKwizard的ddkbuild.cmd文件的目录,请填上。或者是你的环境变量没设对....