原创 WinXP SP2+DS3.2+XP DDK2600+VC6.0

2009-6-3 17:27 4395 1 1 分类: MCU/ 嵌入式


我使用的是WinXP SP2+DS3.2+XP DDK2600+VC6.0英文版,以下为DS3.2版本的安装过程:

1.安装英文原版Visual studio 6.0,同时要记住注册环境变量。

2.安装XPDDK2600,安装时候注意需要将所有的组件、工具、例子等都安装(避免出现hidport.h找不到的问题);

3.安装DS3.2;

4.通过DriverStudio菜单下的DDK Build Settings子菜单启动VC,

5.用Open Workspace打开位于DS安装目录的
……\DriverWorks\Source\vdwlibs.dsw。
6. 选择VC的Build菜单,选择batch Build,在之后的对话框中选择"Select x86",然后点击Rebuld all.等待编译成功

7.打开位于……\DriverWorks\Examples\wdm\hellowdm.dsw,然后编译(用VC的编译和用DS增加的编译钮都可以)。如果你可以在其目录中找到hellowdm.sys你就成功了。

8.使用Driver wizard生成用VC编译的项目后,修改项目属性中的Link,删除ntstrsafe.lib库的包含.
重新编译驱动程序即可成功.(避免出现找不到ntstrsafe.lib库的错误)

其他环境如WIN2000下的如何安装成功等我就不太清楚了。

我把hidport.h文件和free版本的vdw_wdm.lib上传了一下。


 


个星期前郭老师给我布置了一项任务:开发我们自己设计的一块板子的PCI设备驱动,并给我指出了方向,具体说就是“三步走”战略:


(1)入门。熟悉基于DriverStudio开发环境的设备驱动开发,同时侧面了解PCI设备驱动程序的相关知识。


(2)进阶。运用纯DDK进行驱动开发,着重于学习别人的实例,并能熟练进行调试和修改。


(3)实战。深入研究PCI总线标准,结合具体的电路板特性开发出一套自己的设备驱动。


现在正在入门阶段的初级,总结一下近一周以来的WINDOWS驱动程序开发学习过程中的经验:

我目前使用的开发环境是:WINDDK\2600 + Visual Studio 6.0 + Compuware\DriverStudio 3.2

(前两者安装顺序不限,DriverStudio要最后安装)。

参考的主要入门书是:《Windows 2000/XP WDM 设备驱动程序开发(第二版)》武安河 编著

----------------------------------

学习中遇到的问题和解决方法:

(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这个连接项去掉(它与source文件有对应关系,在source文件中把这个库的链接去掉也可以)

在工程中的sources文件里边,找到下面一行:

TARGETLIBS=$(DDK_LIB_PATH)\ntstrsafe.lib $(DDK_LIB_PATH)\csq.lib

直接删除即可。有时候还会提示没有ntstrsafe.h,#include<ntstrsafe.h>出错,把它注释掉即可。

(4)在重新编译武安河这本书中DMASample这个示例程序时,出现了一个错误:

fatal error C1189: #error : Compiler version not supported by Windows DDK

这个错误是在前面几个例子中不曾遇到的,原因在于wdm.h文件中有一个条件编译语句

#if _MSC_VER < 1300

#error Compiler version not supported by Windows DDK

#endif

而VC6对应的_MSC_VER(与版本有关)为1200,因此提示如上错误

解决此问题是通过运用DDK sources to vcproj Converter工具把驱动工程的sources文件转换成对VC6相适应而解决的。

(5)关于调试。调试方法很多,一般都用DbgPrint。

check和free的区别。简单地说,check相当于debug,free相当于release,前者是调试版本,后者是发布版本。你可以使用以下语句实现仅在check版本中输出调试语句:

#if dug

#define dprintf DbgPrint

#else

#define dprintf(x)

#endif

然后使用dprintf代替DbgPrint。

调试工具。ds自带的softice,DriverMonitor,等。此外,Dbgview和DriverMonitor类似,可以从网上下载到的。Dbgview和DriverMonitor可以看到DbgPrint的字符串。

转换为vc工程。开始--程序--Compuware DriverStudio--develop--DDK sources to vcproj Converter,即可转换。

编译应用程序时尽量用DDK编译,不要用VC自带的Build,否则生成的应用程序会提示错误!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
yangxw_107_659163421 2009-01-21 11:15
我要是联想总裁我会这么做
积极响应国家关于“大学生下乡”“和家电下乡”的政策为企业创造巨大利润 1.“大学生下乡”的背景2008年大学毕业生560万左右,到2008年底的时候,大约有150万人还没有找到工作。2009年,随着国...
yangxw_107_659163421 2008-09-17 23:21
Const 用法
                                                            Const 用法Const最早想法是用于取代预处理器#define   这个宏,...
yangxw_107_659163421 2008-09-04 13:11
字节对齐问题
字节对齐今天在用C读一个BMP文件时,怎么也读不到正确的值,仔细跟踪了一下,发现原来是这个struct占了0x10个字节,本来它只占0x0e个字节,我一想这应该是个字节对齐的问题,所以找了一下,在这个...
yangxw_107_659163421 2008-08-04 23:08
多功能车载系统
我准备自己设计一个多功能车载系统,其中包括车载娱乐系统、倒车雷达、车灯控制系统、简易两档变速控制等。对这些方面有兴趣、有研究的同志可以加入我的小组。或者直接联系我,我的邮箱:yangxw_107@ya...
yangxw_107_659163421 2008-08-04 17:21
《嵌入式实时操作系统uCOS-II》(第二版) 电子书
《嵌入式实时操作系统uCOS-II》(第二版),邵贝贝译,由于附件太大,上传不了,有需要的朋友请联系我,我的油箱:yangxw_107@yahoo.com.cn...
广告
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /6 下一条