zoukankan      html  css  js  c++  java
  • VC6.0 +WDK 开发驱动的环境配置

    下面就来说明一下各种平台编译sys驱动的方法(包括64位平台)
    先看32位版本驱动的编译方法,首先你得准备一些编译必备工具:
    1.要安装VC6
    2.安装DDK(装哪个呢?这个问题其实很简单的,只是很多人不明白,装DDK当然是越新越好了,越新支持的平台越多,
       像2000DDK你是绝对   编译不出来64位sys的,因为它没带64位的库和编译器,所以我们选择现在最比较新的,2003DDK
      (WDK也可以),支持的平台很多, AMD64,IA64,2000,XP,2003都支持)。

    好了,这下我们的系统已经安装了最强的开发工具VC6,最新DDK,在VC里编译各个平台的驱动都没有问题了!
    开始,假设我们的DDK装在C:/2003DDK目录,那么我会发现里面有很多驱动的例子(安装的时候全选),我们选择
    C:/2003DDK/src/wdm/usb/bulkusb作为我们的实验范例。

    第一步:
    打开VC,建立一个Win32 Application工程,然后选择An empty Project(我用英文版的VC,建议你也换成英文版的),
    意思就是建立一个空的Win32工程,工程名字就叫bulkusb,点Finish.

    第二步: 
    将C:/2003DDK/src/wdm/usb/bulkusb/sys(这里是驱动代码,另一个exe里是用户程序,不管它)里的所有文件拷贝到
    bulkusb工程目录下。 然后把.h,.c,.rc 导入到VC里对应的目录里面去。

    第三步:设置工程选项, 把这些代码编译成sys了。
    要编译我们需要DDK,所以先要在vc的Tool->Options->Directories里设置一些路径给VC调用(设置基本原则:要保证
    下面所有设置的路径排在前面)。
        1.设置Include路径:
                 C:/2003DDK/INC
                 C:/2003DDK/INC/CRT
                 C:/2003DDK/INC/WNET
                 C:/2003DDK/INC/DDK/WNET
                C:/2003DDK/INC/DDK/WDM/WNET
        要按这样的顺序添加。注意这里的WNET目录了吗? 这就是2003最新头文件,其实选择wxp或者w2k目录也是可以的,
    只是wnet里的头文件最全,因为系统不断进步,有些新的api只有新的头文件里才有定义。当然最好是选择对应的头文件
    来编译对应系统的驱动,但是我试过用    wnet编译的驱动在2000下也能用,因为我们一般用不到那些新添加的api.。
       2.设置lib路径:
              C:/2003DDK/LIB
              C:/2003DDK/LIB/CRT/I386
              C:/2003DDK/LIB/WNET/I386      //wnet道理和上面一样
      3.设置Executable File:
                        C:/2003DDK/BIN/X86   //这就是编译器的路径,包含cl.exe,link.exe的目录,由于我们要编译32位驱动,所以把这个
                 添加进去, 放在第一项。
    总的来说,只要设置好Include,Lib和编译器,编译什么文件都没问题的,你也可以自己尝试安装最新的2003SDK,编译
    Win32应用程序成64位。

    第四步:开始进入工程设置,
    先设置C/C++,在Preprocesser definitions里输入如下字串:
    Release下输入:
                     _X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG
    Debug下输入:
                    _X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG
    在Code Generation里的Calling convention用__stdcall,(这是驱动程序必须的)
    Debug版有个特殊编译选项 /GZ (注意是大写的,小写的不要删!)删掉,否则有链接错误,chkesp链接不上什么的。

    第五步:开始设置Link页,
         1. 将输出文件名(Output file name)改为.sys扩展名,
         2.在General的Object/Library modules, 填入驱动所调用到的几个lib:
               ntoskrnl.lib hal.lib usbd.lib wmilib.lib
         3.进入Output在Entry-point symbol DriverEntry
         4.下面就是往Project Options手动增加一些链接选项,复制如下进去:
                /machine:IX86 /driver /subsystem:native /SECTION:INIT,d /IGNORE:4198,4010,
               4037,4039,4065,4070,4078,4087,4089,4221
             删除如下选项:
                    /subsystem:windows
           /machine代表目标机器类型,/driver代表驱动,/subsystem:native 也是代表驱动。

    OK,大功告成,我们可以编译32位驱动了!


    那么如果我们要编译64位驱动呢? 这里大家注意一下,64位有两种,一个是AMD64,一个是IA64,要选定你的目标平台,
    目前AMD64平台最为流行其实编译成64位也很简单,只要把32位的配置稍微改一下就行了,我们以编译AMD64位驱动
    为例(你会复制VC的工程Configurations吧,把32位的Relase,Debug各复制一份改名为ReleaseAMD64和DebugAMD64,
    然后在复制品的基础上修改):

    1.要修改两个lib路径:
    C:/2003DDK/LIB/CRT/I386改为:C:/2003DDK/LIB/CRT/amd64
    C:/2003DDK/LIB/WNET/I386 改为:C:/2003DDK/lib/wnet/amd64
    2.修改编译器路径:
    C:/2003DDK/BIN/X86
    改为:
    C:/2003DDK/bin/win64/x86/amd64
    C:/2003DDK/BIN/X86          //这句也要存在
    3.修改C/C++里的Preprocesser definitions为:
    ReleaseAMD64下输入:
    _AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG
    DebugAMD64下输入:
    _AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG
    4.需要修改link页里的Project Options,手动改一下:将/machine:IX86改为:/machine:amd64
    5.理论上到这里设置就OK了,不过还是有一个链接错误unresolved external symbol __security_cookie ,只要在链接的lib里
    加入bufferoverflowK.lib (为什么是bufferoverflowK.lib?看这里:http://support.microsoft.com/kb/894573) 就可以了。


  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207209.html
Copyright © 2011-2022 走看看