• vc 6.0中开发驱动设备程序配置方法


    刚开始利用ddk开发驱动程序的时候采用的是ultraedit编辑工具,然后编译安装驱动程序.
    参考www.USBSOLUTION.COM,现在介绍在vc中开发驱动程序的配置方法.
    . 准备工作
    1.
    首先创建一个你的驱动工程文件目录。这个目录下用来放置你的各个驱动工程文件夹。(比如我在D盘创建了一个MyDrivers文件夹作为我的驱动工程文件目录)

    2.
    然后添加两个用户环境变量,一个是DDKROOT,他的值应该是你所安装DDK的根目录。(比如在安装DDK时安装到了d:/WINDDK/2600,那么 DDKROOT的值应该为d:/WINDDK/2600),另外一个变量是WORKPATH,这个变量的值就应该是你第一步所创建的驱动工程目录的路径。(若按本文,WORKPATH的值应该是D:/MyDrivers ),这两个变量会在我们接下来的工程配置中要用到,当然既然是变量,他们的名称是随你的喜欢了。

    //这里要注意的是,如果以后你创建了一个新的工程之后,这里需要改动
    3.
    最后在D:/MyDrivers下创建一个名称为DIRS的无扩展名的文件。用记事本打开它,写上 DIRS=Driver1Driver1是你的驱动文件所在的文件夹名.

    如果以后有新的工程也要把工程名称添加到这里

    DIRS= /

         irda /

         config /

         ndis /

         wshsmple /

         modem

    也就是 在本目录下面有 irda config  ndis wshsmple modem 几个工程

    //MakeDriver.bat应该放在工程目录下面
    4.
    写一个MakeDriver.bat批处理文件.如下.(直接copy,不用修改)

    @echo off

    if "%1"=="" goto usage1
    if "%3"=="" goto usage2
    if not exist %1/bin/setenv.bat goto usage3


    call %1/BIN/setenv %1 %4

    %2
    cd %3
    build -b -w %5 %6 %7 %8
    goto ok

    :usage1
    echo Error: the first parameter is NULL!
    goto exit

    :usage2
    echo Error: the third parameter is NULL!
    goto exit

    :usage3
    echo Error: %1/bin/setenv.bat not exist!
    goto exit

    :ok
    echo MakeDriver %1 %2 %3 %4
    :exit

    .建立一个Makefile工程
    下面我将要建立一个Driver1的工程。他的路径将是D:/MyDrivers/Driver1

    1.
    打开vc6.0,建立一个Makefile的新工程,输入工程名(比如:Driver1)及路径(我们要选择你所创建的驱动工程文件目录D:/MyDrivers)
    2.
    Debug配置对话框中输入如下:

    //红色的D:应该特别注意,不然的话不能成功哦
    Build Command Line:
    MakeDriver %DDKROOT% D: %WORKPATH% CHECKED
    注意:D: %WORKPATH% CHECKED ,如果你的驱动工程文件的目录为E:/myDrivers
    则应该修改为
    Build Command Line: MakeDriver %DDKROOT% E: %WORKPATH% CHECKED
    这个地方曾经出错,调试了半天,haha
    Rebuild all optines: -nmake/a
    Output file name:
    改为sys扩展文件( 比如: Driver1.sys )
    3.
    Release配置对话框中输入如下:
    Build Command Line: MakeDriver %DDKROOT% D: %WORKPATH% FREE
    Rebuild all optines: -nmake/a
    Output file name:
    改为sys扩展文件( 比如: Driver1.sys )
    4.
    工程配置结束,选择Finish按钮

    这时我们可以看到我们的驱动工程文件目录中已经有了一个Driver1的工程文件夹,我们的驱动程序就放在这个文件夹下面。

    .还需要两个文件
    还有两个文件是必须的 makefilesources,将他们拷贝到工程文件夹,也就是D:/MyDrivers/Driver1,sources文件一般需要我们改写,makefile直接从ddk目录中拷贝来一个放在工程文件夹下就行了。
    sources文件中一般需要改写的部分如下:
    TARGETNAME=DRIVER1        

    INCLUDES=$(DDKROOT)/inc; /
    $(DDKROOT)/inc/DDK

    TARGETLIBS=$(DDK_LIB_PATH)/usbd.lib /
    $(DDK_LIB_PATH)/ntoskrnl.lib

    SOURCES = driver1.cpp

    TARGETNAME
    的值是你驱动程序的名字,比如我的会输出DRIVER1.SYS
    INCLUDES
    将所有你所用到的内核函数,他们所在的头文件的路径添加进来。
    TARGETLIBS
    将所有你所用到的内核函数,他们所在的库文件的路径添加进来。
    SOURCES
    就是你工程文件夹需要编译的所有文件名,包括.CPP,.C,.RC文件
    好了,基本上可以编写驱动程序了.
    然后你就可以编写windows程序一样,写驱动程序.
    如果编译成功的话,就会在./objchk/i386下面生成 *.sys

    :

    这里的方法和  ./驱动开发学习笔记.doc中所述的方法稍微有点差别,本篇文章所使用的方法是静态的方法,自己手动添加用户变量,但是./驱动开发学习笔记.doc所说的方法是让setenv.bat去设置环境变量,

    另外一种配置方法:

    1.      然后添加两个用户环境变量,一个是DDKROOT,他的值应该是你所安装DDK的根目录。(比如在安装DDK时安装到了d:/WINDDK/2600,那么 DDKROOT的值应该为d:/WINDDK/2600),另外一个变量是WORKPATH,这个变量的值就应该是你第一步所创建的驱动工程目录的路径。(若按本文,WORKPATH的值应该是D:/MyDrivers ),这两个变量会在我们接下来的工程配置中要用到,当然既然是变量,他们的名称是随你的喜欢了。

    2.      写一个批处理文件 built.bat(内容不变)

          @echo off

    rem -----------------------------------------------------------

    rem usage:

    rem    build.bat []

    rem -----------------------------------------------------------

    if exist *.sys del *.sys

    if exist ./objchk/i386/*.pdb del ./objchk/i386/*.pdb

    if exist ./objfre/i386/*.pdb del ./objfre/i386/*.pdb

    if exist ./objchk/i386/*.sys del ./objchk/i386/*.sys

    if exist ./objfre/i386/*.sys del ./objfre/i386/*.sys

    :start

    set DDKOPT=%1

    if "%DDKOPT%" == "" set DDKOPT=free

    pushd .

    if not exist %DDKROOT%/bin/setenv.bat goto :SetenvNotFound

    call %DDKROOT%/bin/setenv.bat %DDKROOT% %DDKOPT%

    popd

    if exist %DDKROOT%/bin/x86/build.exe goto :start

    %DDKROOT%/bin/build.exe

    :start

    %DDKROOT%/bin/x86/build.exe

    if "%DDKOPT%" == "checked" goto :CopyChecked

    if "%DDKOPT%" == "chk" goto :CopyChecked

    if "%DDKOPT%" == "free" goto :CopyFree

    if "%DDKOPT%" == "fre" goto :CopyFree

    goto :exit

    :CopyChecked

    if exist ./objchk/i386/*.sys move ./objchk/i386/*.sys .

    goto :exit

    :CopyFree

    if exist ./objfre/i386/*.sys move ./objfre/i386/*.sys .

    goto :exit

    :SetenvNotFound

    echo Can't found Setenv.bat.

    goto :exit

    :exit

    set DDKOPT=

    del *.log

    pause

    3.      MAKEFILE (不变)

    #

    # DO NOT EDIT THIS FILE!!!  Edit ./sources. if you want to add a new source

    # file to this component.  This file merely indirects to the real make file

    # that is shared by all the driver components of the Windows NT DDK

    #

    !INCLUDE $(NTMAKEENV)/makefile.def

    4.      Sources (更改两处)

    TARGETNAME=HelloWorld2  (生成的.sys名称)

    TARGETPATH=obj

    TARGETTYPE=DRIVER

    #    $(DDK_LIB_PATH)/ndis.lib    

    MSC_WARNING_LEVEL=-W3 -WX

    MSC_OPTIMIZATION=/Odi

    INCLUDES=

    C_DEFINES= $(C_DEFINES) -DUNICODE -D_UNICODE

    C_DEFINES=$(C_DEFINES) -DNDIS50_MINIPORT=1

    C_DEFINES=$(C_DEFINES) -DNDIS50=1

    SOURCES          =    HelloWorld.c  (源文件)

     
  • 相关阅读:
    HIVE中内连接和左半连接不一致问题
    hive 中的Sort By、 Order By、Cluster By、Distribute By 区别
    基于MapReduce的矩阵乘法运算
    基于MapReduce的关系代数运算(2)
    基于MapReduce的关系代数运算(1)
    帖子爬取
    tomcat------https单向认证和双向认证
    struts2配置文件struts.xml的简介
    2014,事情只有一件!
    MYSQLi数据访问查询数据
  • 原文地址:https://www.cnblogs.com/tyjsjl/p/2156068.html
Copyright © 2020-2023  润新知