现在的位置: 首页 > 综合 > 正文

怎样配置vc的环境来编译驱动

2013年07月16日 ⁄ 综合 ⁄ 共 2116字 ⁄ 字号 评论关闭

写下怎么配置vc的环境吧,不过网上这方面的文章很多了,我就不写重复的东西了,讲符号配置顺延。

怎样配置vc的环境来编译驱动

最好用vc 7.0来编译驱动,6.0的编译器没有7.0的编译器好,编译器用的越新越好,驱动和普通的程序没有什么区别

在开始讲如何配置环境前,先想想自己要编译程序,需要让编译器知道哪些东西?
1.头文件和库路径,如果是编译应用程序,这个你就不用管了,默认的路径已经配置好了
编译驱动的话,多增加头文件和库的路径,这里用我自己的机器环境,具体的情况,根据你的安装目录来更改
include
D:/WINDDK/2600/inc/ddk/w2k
D:/WINDDK/2600/inc/w2k
lib
D:/WINDDK/2600/lib/w2k
如果要编译xp下的驱动的话,把w2k更改为wxp

2.编译选项(cl.exe 后面跟的参数)
debug模式
 /nologo 不让我们的设置(cl.exe 后面跟的参数)输出到输出窗口
 /Gz 采用stdcall调用方式,还有_fastcall, _cdecl _pascal调用方式
 /MLD 用的单线程调试版运行库
 /W3 警告级别
 /Zi 创建.PDB文件记录所有调试信息
 /Od 不允许优化
 /c  仅仅生成obj,需要link程序来连接
 其中还有一些其他选项,可以在设置属性页里面选择,例如:
/Fo"Release/" 表示中间生成的obj存放的目录
/Fd"Release2K/vc70.pdb" 表示程序名字数据库文件
 还需要定义一些宏,宏才是最重要的,这个用来指导编译器用哪些windows结构,怎么来生成适合windows的代码。 
 WINVER=0x500; 指定你需要编译的驱动运行在2k下,0x501是xp,0x502是2k3,具体的看msdn
 DEBUG;_DEBUG;DBG;调试版本,有调试输出
 UNICODE; 驱动是unicode,WCHAR会被定义为2个字节
 _X86_;  生成驱动必须的,如果是应用程序的话,对应 _WINDOWS 这个宏
 STD_CALL; 采用 stdcall调用方式,不过这个在编译选项里面已经指定了
 WIN32_LEAN_AND_MEAN; 用来减少编译时间的
 NT_UP; 你的驱动能运行在多处理器上,定义NT_UP=0
release模式
 /MLD 变成 /ML 用单线程运行库
 /Od  变成 ? 你自己看着办吧,编译驱动尽量不开优化,有以下优化选项
 /Os:更小的大小
 /Ot:更快的速度
 /Og:全局优化
 /GF 增加,合并重复的字符串
 /Oi  使用内部函数替换一些函数的调用
 内联函数扩展的三种优化,使用内联函数可以节省函数调用的开销:
 什么都不加,表示不使用内联
 /Ob1 仅函数定义前有inline或__inline标记使用内联
 /Ob2 除了inline或__inline标记的函数外,编译器“觉得”应该使用内联的函数,都使用内联
 /Oy    不使用帧指针,以提高函数调用速度
 还有一个总的优化选项,四选一
 /Od  不允许优化
 /O1 更小的大小
 /O2 更快的速度
 /Ox  完全优化
 是不是都被这些优化搞晕了,link里面也还有优化,呵呵
 DEBUG;_DEBUG;DBG;把这三个宏去掉
3.连接选项(link.exe 后面跟的参数)
debug模式
 /OUT:"debug/???.sys"
 /INCREMENTAL:NO
 /NOLOGO 不让我们的设置(link.exe 后面跟的参数)输出到输出窗口
 /ENTRY:"DriverEntry" 指定入口
 /BASE:"0x10000"    生成驱动必须指定为该基址
 /MACHINE:X86       在intel上跑
 /driver            生成驱动
 /subsystem:native  生成驱动
 /DEBUG "/PDB:debug/???.pdb" 这个用来生成符号文件,但是这样的话,你编译生成的驱动里面会含有这个pdb的绝对路径,不知道怎么做和微软一样的符号文件。有知道的兄弟告诉我一声哈:)。
注:windbg里面,symstore.exe可以完成这个任务,自己没有用过,主要用于很大的公司发布自己产品的pdb文件,命令行如下:
symstore add /r /f d:/build/release/*.PDB /s e:/symbols /t "MyApp" /v "Build 632"
release模式
 /OUT:"debug/???.sys" ---> /OUT:"release/???.sys"
 还可以增加优化选项
 /opt:ref 省略没有引用的数据
 /opt:icf 省略冗余数据
 也可以选择生成pdb文件,参数和上面的一样(/DEBUG "/PDB:debug/???.pdb"),方便自己在release模式下的源代码级调试,this is perfect!!!

ps:其中cl.exe link.exe里面的参数还有很多,自己可以看着msdn学习

自己以前写驱动的时候,不知道开了一个什么优化,把我写的一个函数给优化掉了,结果在其他模块调去调用这个函数,结果可想而知了。花了不少时间才发现这个问题。

 看完后,请点下左边的广告,谢谢!!

抱歉!评论已关闭.