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

    技术2022-05-11  5

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

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

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

    在开始讲如何配置环境前,先想想自己要编译程序,需要让编译器知道哪些东西?1.头文件和库路径,如果是编译应用程序,这个你就不用管了,默认的路径已经配置好了编译驱动的话,多增加头文件和库的路径,这里用我自己的机器环境,具体的情况,根据你的安装目录来更改includeD:/WINDDK/2600/inc/ddk/w2kD:/WINDDK/2600/inc/w2klibD:/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=0release模式 /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学习

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

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

     

    最新回复(0)