阅读:1801回复:10
用VC6.0编译WDM Driver的设置
经常有人问这个。我看了些资料和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可是有浮点错误的。 ;) |
|
沙发#
发布于:2003-01-30 19:11
没有人发表意见吗?
有什么遗漏的呀?有些我也没有什么把握。 :D |
|
板凳#
发布于: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] |
|
|
地板#
发布于:2003-02-09 14:53
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。
|
|
地下室#
发布于:2003-02-09 14:59
你做过么?这样能行么? 我试过,可以。但是不排除有错误的可能。 :D 如果你的DDK在e:\\ntddk,可以写成e:\\ntddk\\inc, e:\\ntddk\\inc\\ddk, e:\\ntddk\\inc\\ddk\\wdm,那个$就不要了呀。 $(BASEDIR)是环境变量,设置为你的DDK的安装路径。 |
|
5楼#
发布于:2003-02-09 15:00
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。 见仁见智,个人选择。 :D |
|
6楼#
发布于:2003-02-10 11:29
arthurtu 我想知道作驱动需要掌握C++、vc的那方面知识,有没有什么书籍推荐一下,谢谢
|
|
7楼#
发布于:2003-02-10 19:03
知道C :D
VC只是工具罢了 ;)当然也要掌握好工具怎么用。 书籍的话题说了很多了,在本站下载区看看,好书不少。 |
|
8楼#
发布于:2003-06-06 23:27
总看到有人问,自己up一下 :D
当然也可以用new makefile的方法,或是在command line用一个自己写的bat文件 也可以写个SOURCE文件,利用DS的SrcToDsp工具 还有什么,一时想不起来了,等谁补充吧。 :D |
|
9楼#
发布于:2003-06-07 00:26
愚以为还是《WDM设备驱动程序开发》上介绍的建立一个批处理文件的来得方便。 你试成功了吗?我照他说的做怎么也不行,望你指点1、2 |
|
|
10楼#
发布于:2003-06-07 00:42
基本的就是要有build了,但是还要设置环境变量,以及带参数等。
|
|