wdm驱动的学习初步

可能是在linux下比较习惯的原因吧!我反而喜欢直接用DDK的build进行编译驱动,但是毕竟VC++的还是相对省事,故不得不学习设置VC++的编译环境。

首先:windows下做驱动开发,版本控制很重要,系统的版本,DDK的版本,VC++的版本,都是有相关性,搞不好,就容易出错,比如版本不兼容等,我采用的是xp sp2,DDK是3790.1830,不过现在微软提倡用WDK,基本上也可以,我试用了下,也没啥问题,Virtual Studio 6.0,但建议用2005,这样版本兼容会更好一些。

其次:可以使用向导工具,Compuware DriverStudio,有点类似于MFC,可以直接建立驱动的框架,但我是不建议用这个的,毕竟省事是省事了,但是具体细节你也不清楚了,对学习和深入开发并无好处,对框架的把握是很重要的,而且那执行效率也不高。建议可以安装上,然后不使用,有它有些编译设置就省事了不少!

再次:学习书籍——可以看张帆的那边windows驱动开发技术详解,对初学者很合适,武安河那边windows 2000/XP WDM设备驱动程序开发写的就次了很多,内部原理都没有讲清楚,可以拿来做工具参考书,但初学者不合适。另外可以看看windows wdm驱动程序开发指南和programing the Microsoft Windows Driver Model,这两本书都不错,尤其是后者,很是推荐,但不适合初学者,我大体看了看,很费劲。

另外要记录一下用VC设置驱动程序,很多博客都没有说相关选项在哪,看起来很费劲:(张帆书上讲的蛮清楚的)

1:由于没有wizard向导(在不用Compuware DriverStudio的前提下),需要创建空的win32 Application工程,然后进行一系列修改。

2:当然不用多说,添加现有的源文件和头文件,当然也可以自己现编。

3:很多书、博客都说要添加新的编译版本,去掉Debug和Release,在我看来,可去也可不去,差别不大,要去掉的话,在build栏下的configuration下。

4:修改工程属性,这是重点,很多失败都是在这里没有设置好。在project栏里的setting中设置:

在general选项卡中,可以设置中间文件夹和输出文件夹,这个其实不是很重要,只要前后一致就行,不然就会报错说找不到在本工程文件下,某某文件或者某某文件不能打开,那时候多半是这里没有设置好,指向错误了

在C/C++选项卡中,把原Project Options删掉,替换成自己的配置,这里的设置也正好对应上面的勾勾选选。在张帆的书上是推荐这么设置的

/nologo /G3 /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1
/Fo "MyDriver_Check/" /Fd"MyDriver_Check/" /FD /c

注意:/Fo "MyDriver_Check/"就是刚才的中间文件夹,这里可以替换成你自己的,/Fd"MyDriver_Check/"也是设置生产的pdb文件的位置,这也可以替换你自己的,别的基本上不用改

在Link选项卡里,把原Project Options删掉,替换成自己的配置,这里的设置也正好对应上面的选项。张帆书上建议这么设置:

wdm.lib /nologo /base:"0x10000" /stack:0x40000,0x1000 /entry:"DriverEntry" /subsystem:console
 /incremental:no /pdb:"MyDriver_Check/HelloWDM.pdb" /debug /machine:I386 /nodefaultlib /out:"MyDriver_Check/i386/HelloWDM.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078

注意:wdm.lib 是适用于wdm驱动的,要是NT式驱动要设置成ntoskrnl.lib,/pdb:"MyDriver_Check/HelloWDM.pdb"这是设置中间文件pdb的文件名,/out:"MyDriver_Check/i386/HelloWDM.sys"这是设置输出的文件路径和文件名,都可以替换成自己的,另外/pdbtype:sept 在我的机子上会产生一个警告:

LINK : warning LNK4224: /PDBTYPE is no longer supported;  ignored

所以我把这个给去掉了

5:修改VC的lib目录和include目录。VC中选择Tools栏里的Options,在Directories选项卡里,在“show directory for”中选择“Include files”添加你所安装的DDK目录下的INC目录下的WXP和DDK里的WXP,在"Library files“中添加你的DDK目录下的LIB下的WXP里I386,并且将它们置顶,这里可以选择你自己的版本。

6:然后就可以编译了,当然这里面你也可能会碰到一些其他的错误选项,可以看我的另外一篇文章

另外如果选择安装Compuware DriverStudio的话,需要在VC++中打开DriverWorks/source中的Vbwlibs.dsw,并设置DriverStudio栏下的DDK Build Settings,设置DDK所在的目录,并选择compiler Options选项,一般选第二栏。然后就是重新编译Vbwlibs.dsw,惦记Rebuild All。不然会出现警告。

你可能感兴趣的:(wdm驱动的学习初步)