驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了。Windows下的开发为什么那么容易上手,Visual studio功不可莫。一帮懒人在MS的“悉心呵护”下产生了,身边很多做Win32应用程序开发的朋友,都不知道ml.exe和link.exe是搞什么的,只知道F7,F5了。驱动开发就不一样了,没一套现在的IDE和框架代码。和Win32 ASM一样,编译链接比较繁琐。根据网上的一些资料以及参考了一些驱动开发方面的书籍,总结以下几种方式。
2.选择一项进入,比如我选择”Win XP Checked Build Environment”,将目录切换到你的驱动文件夹下。如下图:
3.从DDK安装目录的Src目录中拷贝出MAKEFILE文件到你的驱动文件夹下,此MAKEFILE文件不需要修改。内容如下:
4.在驱动文件夹下建立一个sources文件,内容如下:
TARGETNAME:生成的驱动的文件名,比如上面的将生成lesson.sys。
TARGETPATH:生成bin文件的目录
TARGETTYPE:生成的文件类型,比如DRIVER生成.sys,DYNLINK生成.dll
SOURCES:源文件列表
您也可以再指定其他项,比如TARGETLIBS来导入程序需要的库。
5.设置好上面的步骤4以后,在步骤2中输入build即可进行源代码的编译和连接,如果没有错误将会生成你要的bin。
此方法是M$指定的编译方法,比较灵活,你可以在步骤5中build后面加入一些需要的参数。在IDE横行的时代此种方法可能让许多开发人员不太习惯,如果您不做Linux下的开发,Makefile法已经很难在Windows平台下见到了。个人感觉这种还是比较容易的,因为本人目前的嵌入式开发方式与此类似,每天都要compile数百遍,次数多了,也就习惯了。
此编译法是上面一种方式的变通,比较适合对VS开发环境有一点依赖的开发人员,大多数人员应该是从Win32编程转过来的。直接使用命令行编译总感觉怪怪的,哪有直接F7来的惬意呢?此法需要一个脚本,我写了一个简单的,如果您喜欢这种方式,可以在其基础上修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@echo off :: 功能:使用VS2005编译Windows驱动 :: 使用: BuildDriver.bat [DDK Install_Directory] [Project Directory] [Build mode] :: Code by lonkil if "%1" =="" goto usage if "%2" =="" goto usage if "%3" =="" goto usage if not exist %1\bin\setenv.bat goto usage call %1\bin\setenv.bat %1 %3 cd /d %2 build goto exit :usage echo BuildDriver.bat [DDK Install_Directory] [Project Directory] [Build mode] echo BuildDriver.bat D:\WINDDK\2600 f:\driver chk :exit pause |
上面的简单脚本其实就是第一种编译方式改成BAT的方式,然后集成到VS中去。下载脚本:
BuildDriver.bat (496 bytes, 494 hits)
此种方法虽然易用,但由于作者需要做到通用,自然会在生成的代码中产生一些冗余代码,让一些有”洁癖”人士感到不爽,但删代码总比加代码来的容易,当然你也可建立空项目。另一方面由于该方法帮程序员做了不少体力活,也隐藏了一些驱动编译的细节,个人认为初学者还是有必要看看下面的介绍的第四种编译方法。
1>D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\basetsd.h(36) : error C2220: 警告被视为错误 – 没有生成“object”文件
1>D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\basetsd.h(36) : warning C4005: “POINTER_64”: 宏重定义
1> D:\WINDDK\2600\inc\wxp\ntdef.h(134) : 参见“POINTER_64”的前一个定义
造成此问题的原因是驱动中的包含文件引入不正确,使用了PlatformSDK的包含文件了,解决办法是在”工具”->”选项”->”包含文件”的最上部添加:”D:\WINDDK\2600\inc\crt“,重新编译OK生成成功。
现在您就可以在VS中像做Win32/MFC程序一样,交叉编译链接了,当然调试是不行的,驱动是运行在Ring0下,需要内核级的调试器,如SoftIce,WinDbg此类工具进行调试。
这几种方式,我比较偏向于第一种,还是很方便的,编辑器可以使用SourceInsight跳转,查看引用,搜索非常的方便,感觉比VS+VA还要方便。作者Lonkil,转载请注明出处,本文来源Vc爱好者。
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)\makefile.def