arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1801回复:10

用VC6.0编译WDM Driver的设置

楼主#
更多 发布于:2003-01-25 01:13
经常有人问这个。我看了些资料和MSDN,总结了一下,有不对和遗漏的,请指出。
适用于DDK开发的。

首先是产生一个workspace(什么?!不会?下面的就算了,可以不看了)。

到project->setting
一、首先是compile选项。
到Project->Setting->C/C++,Category选
1、General,在Preprocessor Definitions,不要WIN32(就不是Win32的嘛),不要_DEBUG(WDM不是Win32调试目标),不要_WINDOWS(也不是Windows的application),不要_MBCS(WDM用Unicode而不是MBCS);加上DBG(=1或0),加上_X86_(Intel的,哦,你在Alpha上用?用 _ALPHA_ 吧);加上_WIN32_WINNT=0x0500(KMD是0x0400),和WINNT=1;Warning level建议选Level 3,把级别设高些,把Warning as errors选上,driver可是要求高安全的;Optimizations对Checked的就disable,Free的可以选Maximize speed;Debug info建议选C7 Compatible,Program Database也可以的。
2、再选Preprocessor,在Additional include directories,把DDK的include路径加上,如:$(BASEDIR)\\inc,$(BASEDIR)\\inc\\ddk,$(BASEDIR)\\inc\\ddk\\wdm,所以要设置好环境变量,当然,也可以直接写上你的路径,如果你不想在别人的机上编译的话J。
3、选Precompiled Headers,选Automatic use of precompiled headers。
4、选Code Generation,Calling Convention选__stdcall。
5、另外在Project options手工加上(去掉)的包括:去掉/GX(disable synchronous exception handling);
其他的就用默认的就可以了。
第二步就是到Link Tab去,Category选
1、选General,选上Ignore all default libraries;在Object/library modules,加上ntoskrnl.lib、hal.lib、int64.lib;如果是Checked的话,就把Generate debug info给选上;Output file name照你的路径给写上,如checked\\xxx.sys(其实这个在Debug Tab里面的Executable for debug session改更好,其他的一些地方都跟着变了);Link incrementally不要选。
2、选Debug,Free的driver当然是什么也不选(你要加上也可以);Checked的选Both formats会好些。
3、选Input,把你的Lib路径在Additional library path加上,如$(BASRDIR)\\libfre\\ i386。
4、选Output,Base address写上0x10000,Entry-point symbol写上DriverEntry(这是所有WDM的默认入口)。
5、另外要在Project options手工加上的必要的包括:/driver(产生driver);/subsystem:native[,major[.minor]](也是driver必要的),默认是4.00,WDM的应该用5.00了。
还有一些参数,到MSDN去看看,很有用的。在MSDN的Visual Tools and languages->Visual C++ Documentation->Using Visual C++->Compiling and Linking。

比如
/QIfdiv[-] Performs Pentium FDIV erratum fix, - for disable
Pentium的CPU可是有浮点错误的。 ;)

最新喜欢:

temptemptempte... ABUABUABUABU abc0099abc009...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-01-30 19:11
没有人发表意见吗?
有什么遗漏的呀?有些我也没有什么把握。 :D
118139
驱动中牛
驱动中牛
  • 注册日期2002-12-02
  • 最后登录2009-04-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-09 14:35
你做过么?这样能行么?


还有 \"$(BASEDIR)\\inc,$(BASEDIR)\\inc\\ddk,$(BASEDIR)\\inc\\ddk\\wdm\"这句

如果ddk是安装在e:\\
是否是写成 $E:\\NTDDK\\inc,$E:\\NTDDK\\inc\\ddk,$E:\\NTDDK\\inc\\ddk\\wdm,这样


编译完没有没有发现*.sys文件


[编辑 -  2/9/03 by  118139]
[color=red]虽然岁月总是匆匆的催人老,虽然情爱总是让人烦恼,斩了千次的情丝却断不了,百转千折它将我围绕. [/color][color=blue]有人问我你究竟是哪里好,这么多年你还忘不掉,春风再美也比不上你的笑,没见过你的人不会明了. [/color]
lzhui
驱动牛犊
驱动牛犊
  • 注册日期2001-04-27
  • 最后登录2004-01-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-09 14:53
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-02-09 14:59
你做过么?这样能行么?


还有 \"$(BASEDIR)\\inc,$(BASEDIR)\\inc\\ddk,$(BASEDIR)\\inc\\ddk\\wdm\"这句

如果ddk是安装在e:\\
是否是写成 $E:\\NTDDK\\inc,$E:\\NTDDK\\inc\\ddk,$E:\\NTDDK\\inc\\ddk\\wdm,这样


编译完没有没有发现*.sys文件


[编辑 -  2/9/03 by  118139]

我试过,可以。但是不排除有错误的可能。 :D
如果你的DDK在e:\\ntddk,可以写成e:\\ntddk\\inc, e:\\ntddk\\inc\\ddk, e:\\ntddk\\inc\\ddk\\wdm,那个$就不要了呀。
$(BASEDIR)是环境变量,设置为你的DDK的安装路径。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-02-09 15:00
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。

见仁见智,个人选择。 :D
footboy
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-02-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-10 11:29
arthurtu  我想知道作驱动需要掌握C++、vc的那方面知识,有没有什么书籍推荐一下,谢谢
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-02-10 19:03
知道C :D
VC只是工具罢了 ;)当然也要掌握好工具怎么用。
书籍的话题说了很多了,在本站下载区看看,好书不少。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-06-06 23:27
总看到有人问,自己up一下 :D

当然也可以用new makefile的方法,或是在command line用一个自己写的bat文件

也可以写个SOURCE文件,利用DS的SrcToDsp工具

还有什么,一时想不起来了,等谁补充吧。
 :D
blue_wind
驱动中牛
驱动中牛
  • 注册日期2002-11-24
  • 最后登录2006-11-30
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-07 00:26
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。

你试成功了吗?我照他说的做怎么也不行,望你指点1、2
好东西大家共享,没必要做从复的劳动! 冒着微软的炮火前进!前进!前进!进!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2003-06-07 00:42
基本的就是要有build了,但是还要设置环境变量,以及带参数等。
游客

返回顶部