[转]驱动开发的几种编译环境配置法

驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了。Windows下的开发为什么那么容易上手,Visual studio功不可莫。一帮懒人在MS的“悉心呵护”下产生了,身边很多做Win32应用程序开发的朋友,都不知道ml.exe和link.exe是搞什么的,只知道F7,F5了。驱动开发就不一样了,没一套现在的IDE和框架代码。和Win32 ASM一样,编译链接比较繁琐。根据网上的一些资料以及参考了一些驱动开发方面的书籍,总结以下几种方式。

备注:以下实现环境为Windows DDK 2600,WinXP, Visual studio 2005,如果你的系统配置与以本人的环境不一致,可能需要实际微调。

 

一、官方指定编译法。


1.安装DDK。请下载适合您系统的DDK开发包,自行安装到机器上。成功安装后,打开开始菜单如下图:
驱动开发的几种编译环境配置法

在”Build Environment”中将会看到几组选项,其中分为64位和32位的编译环境,Checked和Free分别表示调试版和发行版。

 

2.选择一项进入,比如我选择”Win XP Checked Build Environment”,将目录切换到你的驱动文件夹下。如下图:
驱动开发的几种编译环境配置法
3.从DDK安装目录的Src目录中拷贝出MAKEFILE文件到你的驱动文件夹下,此MAKEFILE文件不需要修改。内容如下:

#
# 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

4.在驱动文件夹下建立一个sources文件,内容如下:

TARGETNAME=lesson
TARGETPATH=obj
TARGETTYPE=DRIVER
SOURCES=lesson.c

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数百遍,次数多了,也就习惯了。

 

二、集成Visual Studio的BAT法

 

此编译法是上面一种方式的变通,比较适合对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\2600f:\driver chk :exit pause

上面的简单脚本其实就是第一种编译方式改成BAT的方式,然后集成到VS中去。下载脚本:

  BuildDriver.bat (496 bytes, 201 hits)


设置Visual studio步骤:
1.”文件”->”新建项目”,如下图:
驱动开发的几种编译环境配置法
选择上图中的①位置的”常规” ②位置的”生成文件项目”。

2.进入下一步如图:
驱动开发的几种编译环境配置法
在”生成命令行”中写上:”BuildDriver.bat D:\WINDDK\2600 $(ProjectDir) chk
其中的BuildDriver.bat就是上面的那段脚本保存的文件。
D:\WINDDK\2600为我DDK安装的路径您需要改成你自己的安装目录。

$(ProjectDir)此宏在VS中您可以保持不变,代表你项目的目录。

chk代表编译模式。chk是debug版,fre表示Release版。你可以在”设置”发布”配置“中使用BuildDriver.bat D:\WINDDK\2600 $(ProjectDir) fre

3.在BuildDriver.bat的同一目录中拷入MAKEFILE和source文件,参见上一种方式的三四两步。

好了,在VS中添加一个.c文件写一个HelloWord程序,F7到目录看看,是不是已经生成好了你的HelloWord.sys了?

三、懒人的DDKWizard法


此方式是本文介绍的几种方法中最方便的一种,只要轻松点击几下鼠标不但驱动的工程在VS中已经生成好了,连驱动的代码基本框架都帮你生成好了。俗称懒人法,因为DDKWizard的作者Oliver Schneider都说因为自己懒才写的这套脚本,DDKWizard是大大的方便了驱动的开发,再次验证了懒人推动了世界的进步, :) 。

1.去DDKWizard官方网站下载一个DDKWizard安装包,在本机安装。安装完成后启去VS2005,如下图:

驱动开发的几种编译环境配置法

在新建项目中,已经多了一个”DDK Project”了,如果需要DDKWizard为您生成代码模块,选择”Driver“,空项目的话选择”Empty driver“,进入下一步。

驱动开发的几种编译环境配置法

选择你开发的平台,驱动工程就建好了,很方便的说。

 

此种方法虽然易用,但由于作者需要做到通用,自然会在生成的代码中产生一些冗余代码,让一些有”洁癖”人士感到不爽,但删代码总比加代码来的容易,当然你也可建立空项目。另一方面由于该方法帮程序员做了不少体力活,也隐藏了一些驱动编译的细节,个人认为初学者还是有必要看看下面的介绍的第四种编译方法。

 

四、勤快人的Visual Studio配置法


上面介绍的几种方法虽然也用了VS来开发驱动,但主要依托于Makefile,VS的强大之处还是不能体现,比如交叉编辑。当发现在你在代码中有错误时,不能通过双击Output窗口中的错误行,跳到相应的代码处,这一点让VS的方便性大减。下面这种方式利用VS的ml.exe和link.exe来生成sys,因为sys也PE文件完全可以使用VS的ml.exe和link.exe进行编译和链接。此方式虽然在Visual studio 2005中也是点击鼠标,不过略显麻烦,但习惯了就好了。

1.新建一个Win32空的工程,如下图:

驱动开发的几种编译环境配置法

驱动开发的几种编译环境配置法
2.设置DDK的包含文件和lib库,在菜单”工具”->”选项”设置如下图:

在②中选择”包含文件”,在③的位置分别添加:”D:\WINDDK\2600\inc\wxp“、”D:\WINDDK\2600\inc\ddk\wxp“。请根据您DDK安装位置作相应的调整,注意一点就是顺序很重要,请前您刚才设置的两项尽量靠前,下面设置lib库的路径也一样。

驱动开发的几种编译环境配置法


3.在①中选择”库文件”,在②位置添加:”D:\WINDDK\2600\lib\wxp\i386“,请根据您DDK安装位置作相应的调整,如下图:
驱动开发的几种编译环境配置法
到此包含文件和库文件配置已经结束,下面进行项目的编译选项设置。

4.”项目”->”xxx属性”或Alt+F7,调出项目属性页。选择”C/C++”->”常规”设置如下图:
驱动开发的几种编译环境配置法
将”调试信息格式”设置为:”C7兼容(/Z7)
将”警告视为错误”设置为:”是(/WX)“,驱动程序兼容不得半点砂子,否则将是蓝屏。
其他采用默认值。
5.”预处理器定义”选项设置
驱动开发的几种编译环境配置法

定义这几个宏:DBG=1;WIN32=100;_X86_=1,如果是低于Visual studio2005的编译器,还需要定义WINVER=0×500.
6.”代码生成”选项设置
驱动开发的几种编译环境配置法

将”启用最小重新生成”设置为:”
将”基本运行时检查”设置为:”默认值
将”运行时库”设置为:”多线程(/MT)
7.”高级”选项设置
驱动开发的几种编译环境配置法

将”调用约定”设置为:”__stdcall(/GZ)

将”忽略所有默认库”设置为:”是(/NODEFAULTLIB)
8.”链接器”->”常规”:
驱动开发的几种编译环境配置法

将”输出文件”设置为:”$(OutDir)\$(ProjectName).sys
将”启用增量链接”设置为:”否(/INCREMENTAL:NO)
9.”输入”选项设置
驱动开发的几种编译环境配置法

将”附加依赖项”设置为:”ntoskrnl.lib如果是WDM驱动将是wdm.lib”
将”忽略所有默认库”设置为:”是(/NODEFAULTLIB)
10.”系统”选项设置
驱动开发的几种编译环境配置法

将”子系统”设置为:”本机(/SUBSYSTEM:NATIVE)
将”堆栈保留大小”设置为:”400000
将”堆栈提交大小”设置为:”10000
将”驱动程序”设置为:”驱动程序(/DRIVER)“如果是WDM驱动将是WDM (/DRIVER:WDM)

11.”高级”选项设置

驱动开发的几种编译环境配置法
将”入口点”设置为:”DriverEntry
将”基址”设置为:”0×10000
将”目标计算机”设置为:”MachineX86 (/MACHINE:X86)
编译和链接选项已经设置完成,可以F7了。但会得到如下错误:

 

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爱好者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值