资源描述
ddk学习中遇到的问题和解决方法
2009年05月16日 星期六 17:55
关于Driver Studio 3.2 的安装详解
经过对VC、WINDDK、Driver Studio这三个软件反复的安装,终于可以使Driver Studio能在VC环境下正常编译了。俗话说久病成医,遇到的问题多了,自然就有了很多解决问题的方法,现在拿出来和大家一起分享一下。
1、分别安装VC、WINDDK、Driver Studio,为:VC-〉WINDDK-〉 Driver Studio。其实顺序也可以变一下的,笔者曾试过VC-〉 Driver Studio -〉WINDDK,没问题的,但最好按建议顺序安装;
2、注意安装DDK时,建议将例子等全部安装,否则Driver Studio编译时会提示缺少头文件;
3、在VS2005环境下,安装Driver Studio时会有对话框弹出,单击Ignore按钮,解决办法会在后面详细说明;
4、选择“DriverStudio->DDK Build Setting”,在“DDK Root Directory”选项中选入DDK目录,例如“C:\WINDDK\2600”。为了防止每次启动VC来编译WDM时,都要设置DDK目录,可以在“控制面板”的“系统”-〉“高级”-〉“环境变量E”设置中,添加一个值为C:\WINDDK\2600的系统变量BASEDIR;
5、用VC打开“…\DriverStudio\DriverWorks\source\VdwLibs.dsw”,用 Driver Studio进行编译,如果编译成功就OK了,然后可以进行驱动的开发了。
6、利用DriverWizard向导对所要开发的驱动类型进行正确配置,生成所需要的驱动工程框架。
安装DriverStudio3.2 过程中出现DSDDKEnv8.dll failed to register错误的解决方法
原因:与VS2005集成时会发生此错误。
解决方法,补丁:ftp://
>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目录的WdmD文件
找到“Microsoft Visual Studio Solution File, Format Version 9.00”这一行,在其后下一行加入“# Visual Studio 2005”保存即可,以后用DriverWizard生成的工程就可以正常双击打开了。
编译中可能遇到的问题(VS2005环境下)
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。
NextNode()或其他函数没有返回类型的原因,你的代码可能是从VC++里迁移到VS2005里面来编译出现的错误吧,在VC里你的函数没有返回类型他自动默认为INT,但在VS2005里就要报你上面的错误!
学习中遇到的问题和解决方法:
(1)拿到附书代码,运行出了第一个驱动程序CharSample,步骤如下:先双击代码光盘提供的注册表导入文件
Windows2K-XP.reg,然后运行DriverStudio自带的EzDriverInstaller工具,打开sys目录下的驱动安装配置文件
CharSample.inf,然后Add New Device,提示需要.sys驱动系统文件,找到sys\objchk\i386目录下的
CharSample.sys文件,确定后将提示The Driver Loaded Successfully!(如果报错,而且设备前带!号,一般是因为忘记导入注册表了)
如此安装好驱动以后,就可以运行exe\objchk\i386目录下的应用程序Test_CharSample.exe进行测试了!
(2)运行成功后,重新编译时却总出现错误,编译不过去!
错误是:
fatal error LNK1181: cannot open input file "......\DriverStudio\DriverWorks\lib\I386\checked\vdw_wdm.lib" 通过网上学习和交流找到答案:原来是因为配置开发环境时,漏掉了如下一个步骤:
编译......\Compuware\DriverStudio\DriverWorks\source目录下的工程得到vdw_wdm.lib文件!
编译时,注意用VC打开工程文件后,有两个工程,要先将VdwLibs工程设为当前Active Project,然后在工具栏上单击右键选择“组建”,在弹出的编译工具栏中配置一下编译平台的设置:选择Win32 WDM Checked平台(因为我们用的XP),然后编译就应该可以了,但是还有可能出现编译错误:
fatal error C1083: Cannot open include file: 'warning.h': No such file or directory
为啥呢?因为没有选择DDK环境,此时应该在DriverStudio菜单-》DDK Build Setting...中选择我们先前安装的DDK的目录,我安装的目录是C:\WINDDK\2600,这样就可以编译通过了!
编译完后会在"......\DriverStudio\DriverWorks\lib\I386\checked\"目录下生成vdw_wdm.lib文件,做完这些后在去编译自己编写的驱动程序工程就不会有上面所列的错误了!
当然,也有可能会出现这样的编译错误:fatal error C1051: program database file, '......\compuware\driverstudio\driverworks\source\obj\i386\wdmchecked\vdw_wdm.pdb', has an obsolete format, delete it and recompile
不过编译器提示的应该够清楚了,只要把连接目录下的文件删除再编译一次就可以了!
(3)用向导新建一个驱动工程,进行编译会产生如下错误:
Linking with DDK linker...
LINK : fatal error LNK1181: cannot open input file 'ntstrsafe.lib'
Error executing link.exe.
因为这个文件在xpddk里面是没有的,在2003 ddk里面有,拷贝一个过来就可以了,或者在工程-》设置-》连接选框中把ntstrsafe.lib这个连接项去掉
转载 XP + VC6.0 + ddk2600 + DriverStudio Windows驱动开发环境
2009年02月12日 星期四 15:24
这几天搭建ddk的环境 xp+vc6+ddk2600+driverstudio3.2
上次搭建的时候,方法已经忘记了,感觉差不多,中间安装都没有什么问题。
可是编译example的时候老是提示缺少*.lib
原来忘记编译driverstudio source下的一个.dsw了
编译好以后基本上就没有问题了。
可是自己建立dsw的时候还是不会。最后只好选择sudami的easysys
感觉很不错。有时间要自己看看dsw。
/////////////////////////////////////////////////////////
为了下次不忘记,转载一篇
/////////////////////////////////////////////////////////
建立驱动开发环境,所需的软件为DriverStudio3.2 + DDK2003 + VC。
DDK建议使用最新的DDK2003,因为可以减少很多麻烦。使用DDK2600的话,很多人反映会碰到一个编译出错的问题。
这是我使用DDK2600时碰到的同样的问题,然后在EDNchina网站上发的贴:
--------------
我在用DriverStudio开发驱动时,碰到了这样的问题:
--------------------Configuration: KFileWrite - Win32 Free--------------------
d:\DESIGN~1\DRIVER~1\DRIVER~4\include\kcsq.h(35): Could not find the file csq.h.
d:\DESIGN~1\DRIVER~1\DRIVER~4\include\kcsq.h(35): Could not find the file csq.h.
Linking with DDK linker...
LINK : fatal error LNK1181: cannot open input file 'ntstrsafe.lib'
Error executing link.exe.
KFileWrite.sys - 1 error(s), 0 warning(s)
关键是这个ntstrsafe.lib.
我在网上一搜,碰到这种问题的人还不少呢,虽然解决方法是很多,但都差不了几个字,要么从DDK2003那拷一个,或者是在project-->setting-->link下去掉对ntstrsafe.lib的链接,也不知他们自己到底有没有试,我在project-->setting-->link下压根就没看到ntstrsafe.lib几个字...很郁闷啊
--------------
网上所说的解决方法是对的,但没有说清楚,使人无法一时明白。我后来自己回贴:
--------------
再说详细点吧,以方便后来的人.
假如你用DriverStudio新建的工程名叫KFileWrite,那么打开project-->setting,在左边会出现三个选项,分别是"KFileWrite","KFileWriteApp","KFileWriteClsInst",要选择"KFileWrite",在 link标签栏下的object/library modules栏中才会有ntstrsafe.lib,还有vdw_wdm.lib,把ntstrsafe.lib删除即可.我之前是一进入project-->setting,系统就默认选择了"KFileWriteApp",导致我始终没有找到ntstrsafe.lib的选项.
--------------
所以使用DDK2003就完全没有这个问题的困扰。
三个软件都装好了,也不是马上就能用了,还要进行一些设置,这些内容网上都能找到。
然后还要编译DriverStudio安装目录DriverStudio\DriverWorks\source\VdwLibs.dsw,以得到vdw_wdm.lib这个库文件。
--------------
(
(2)运行成功后,重新编译时却总出现错误,编译不过去!
错误是:
fatal error LNK1181: cannot open input file "......\DriverStudio\DriverWorks\lib\I386\checked\vdw_wdm.lib" 通过网上学习和交流找到答案:原来是因为配置开发环境时,漏掉了如下一个步骤:
编译......\Compuware\DriverStudio\DriverWorks\source目录下的vdwlibs.dsw工程得到vdw_wdm.lib文件!
编译时,注意用VC打开vdwlibs.dsw工程文件后,有两个工程,要先将VdwLibs工程设为当前Active Project,然后在工具栏上单击右键选择“组建”,在弹出的编译工具栏中配置一下编译平台的设置:选择Win32 WDM Checked平台(因为我们用的XP),然后编译就应该可以了,但是还有可能出现编译错误:
fatal error C1083: Cannot open include file: 'warning.h': No such file or directory
为啥呢?因为没有选择DDK环境,此时应该在DriverStudio菜单-》DDK Build Setting...中选择我们先前安装的DDK的目录,我安装的目录是C:\WINDDK\2600,这样就可以编译通过了!
编译完后会在"......\DriverStudio\DriverWorks\lib\I386\checked\"目录下生成vdw_wdm.lib文件,做完这些后在去编译自己编写的驱动程序工程就不会有上面所列的错误了!
当然,也有可能会出现这样的编译错误:fatal error C1051: program database file,
'......\compuware\driverstudio\driverworks\source\obj\i386\wdmchecked\vdw_wdm.pdb', has an obsolete format, delete it and recompile
不过编译器提示的应该够清楚了,只要把连接目录下的文件删除再编译一次就可以了!
--------------
上面的内容是我从别人的博客上转载过来的,讲得已经很清楚了,不过它在编译时选择的是在工具栏右键选择"Build",然后在弹出来的工具栏配置中选择“Win32 WDM Checked”平台,这样的话每次只能编译一种平台,我们也可以在菜单栏选择"Build"-->“Batch Build...”,然后点击"Select x86",这样就可以选中所有的32位平台(大多数人用的还是32位平台吧),不要直接选择菜单栏"Build"-->"Build vdw_wdm.lib",因为这种选择默认选择的平台是"Win32 IA64 WDM Free"(这是64位平台),除非你就是要生成此环境下的驱动。
此外,编译驱动时,不要使用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的Settings里的Link项中去掉这个库就可以了。
于是去掉之。
可是问题依然存在。狂晕!
最后终于在网上看到一个解决办法
就是将工程中的sources文件里边的:
TARGETLIBS=$(DDK_LIB_PATH)\ntstrsafe.lib $(DDK_LIB_PATH)\csq.lib
直接删除。就行了。
编译后终于成了。
展开阅读全文