http://blog.csdn.net/zzqccc/article/details/4151142
搭建好windows设备驱动程序的开发环境,终于能在VS2005中编译出第一个测试驱动程序了,现在把安装和编译的过程中遇到的一些细节问题总结一下。
1. WINDD下载的是2600版本,不知道跟xp sp1 DDK和xp sp2 DDK有什么区别,找后面两个版本的DDK下载地址找了好久都没找到,驱运之家有下载,但是要高级会员才能下,要Money。电驴里搜到一个xp sp1DDK的下载链接,但是下不了,在此把我找到的2600版本的下载地址贴出来
ftp://202.113.29.4/ISO/M$/WinDDK/winxp_ddk.rar
2. 注意安装DDK时,建议将例子等全部安装,否则Driver Studio编译时会提示缺少头文件
3. 在VS2005环境下,安装Driver Studio时会有对话框弹出,单击Ignore按钮,解决办法会在后面详细说明;
安装DriverStudio3.2 过程中出现DSDDKEnv8.dll failed to register错误的解决方法
原因:与VS2005集成时会发生此错误。
解决方法,下载补丁:http://download.csdn.net/down/660936/amazingzyx
>Extract it into a temp directory.
>Copy the file DSDDKEnv8.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin directory.
>Select "yes" if prompted to copy over an existing one.
>Copy the file DSDDKEnv8UI.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin/1033 directory. Select "yes" if prompted to copy over an existing one.
>Then unregister the older version
Go to start->run and type "regsvr32 -u " <INSTALL_DIR> /DriverStudio/Common/ Bin/ dsddkenv8.dll"
注意〈INSTALL_DIR〉不能含有空格,否则命令无法执行,笔者曾将DriverStudio安装在C:/Program Files下,总是运行不了,为此郁闷了好久,后经别人提点才解决此问题,但不知其原因,请问有人知道吗?
>Then register the new copy
Go to start->run and type "regsvr32 <INSTALL_DIR>/ DriverStudio/ Common/ Bin/ dsddkenv8.dll"
>DriverStudio menu should now be part of the VisualStudio 2005 menu
如果在vs2005+补丁后生成的解决方案文件.sln无法双击打开工程时可以使用文本编辑器打开.sln文件在第二行加入“# Visual Studio 2005”保存即可,例如:
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aa", "driver/aa.vcproj", "{6A0A9D07-FD4C-4D7C-805D-48D25FB4BE6C}" EndProject
根治方法:
打开/DriverStudio/DriverWizard/Templates目录的WdmDriver.sln.net文件
找到“Microsoft Visual Studio Solution File, Format Version 9.00”这一行,在其后下一行加入“# Visual Studio 2005”保存即可,以后用DriverWizard生成的工程就可以正常双击打开了。
4. 编译中可能遇到的问题(VS2005环境下)
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。
error LNK2019: unresolved external symbol
error LNK2001: unresolved external symbol
解决:在链接选项中加入 /verbose:lib,就可以看到链接生成执行文件时链接程序所要链接的库的路径。发现所有链接库的路径为DDK所在路径。原来先前用VS写驱动时,在VC++ Directories-->Library Files中加入了驱动库的路径。只要把DDK的路径去掉,让连接器自动寻找默认库进行链接就没有该问题了。
5. 用DriverWizard 新建的工程要在VS2005中编译必须先设置DDK路径,在VS2005菜单栏Toos=>DriverStudio=>DriverStudio=>DDK Build Settings中设置DDK Root Directory
6. 然后还要编译DriverStudio安装目录DriverStudio/DriverWorks/source/VdwLibs2005.sln,以得到vdw_wdm.lib这个库文件。编译时,注意用VC打开VdwLibs2005.sln工程文件后,有两个工程,要先将VdwLibs工程设为当前Active Project,然后右击选择“Property” ,在VdwLibs Property Pages中Configuration要改成“win32 Active(WDM Checked)”
7. 编译驱动时,不要使用VC的"编译",那会产生很多莫名其妙的错误,而应该选择"DriverStudio"-->“Build with BUILD.exe”。
1>NMAKE : U1073: don't know how to make 'D:/WINDDK/2600/lib/wxp/i386/ntstrsafe.lib'这个错误。
再上网查查。
原来driverstudio产生的驱动工程都会要连接ntstrsafe.lib这个库,但实际上这个库并不存在,在Project的Property pages里的Link=>Input=>Additional Dependencies项中去掉这个库就可以了,还有说DDK2003版本就不存在这个问题,还没试过。
于是去掉之。可是问题依然存在。
狂晕!
最后终于在网上看到一个解决办法
就是将工程中的sources文件里边的:
TARGETLIBS=$(DDK_LIB_PATH)/ntstrsafe.lib $(DDK_LIB_PATH)/csq.lib
直接删除。就行了。
编译后终于成了