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

原创 2007年10月09日 14:33:00

刚开始利用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  (源文件)

 

windows VC USB开发相关的api说明

1、头文件包含,库文件链接  在VC中开发HID应用程序时,需要包含setupapi.h和hidsdi.h,包含方式必须为extern "C",如下所示: extern "C" { // Decla...
  • jirryzhang
  • jirryzhang
  • 2017年04月01日 11:35
  • 1037

设计和编写设备驱动的一般方法

我的上一篇博客《设备驱动调试和移植的一般方法》详细介绍了调试和移植的几个步骤,依照那几个步骤,按部就班,外加不屑的努力,你就可以完成驱动的调试和移植。但是当你面临的是一块崭新的芯片XXXX,当前并没有...
  • zqh2007
  • zqh2007
  • 2014年04月28日 16:33
  • 1199

VxWorks设备驱动入门示例程序Hello Wold

VxWorks的设备驱动程序就靠着三张表来维护:我把它们叫做 Fd Table、Dev Table、Drv Table,分别表示文件描述符表、设备列表、驱动程序表。用英文表示是想说明这些表的名字与我们...
  • RubyBoss
  • RubyBoss
  • 2015年01月21日 16:46
  • 694

字符设备驱动----中断程序

Linux内核将所有的中断统一编号,使用一个irq_desc结构数组来描述这些中断:每个数组项对应一个中断。一. 中断的处理流程如下:1. 发生中断时,CPU执行异常向量 vector_irq 的代码...
  • lwbeyond
  • lwbeyond
  • 2015年11月17日 23:55
  • 745

Linux 字符设备驱动开发--内存读写操作

学习Linux的累计时间已经有两年多了,工作关系,学习的过程总是断断续续的,现在整理一下,下面要分享的是一个简单的linux驱动程序,没有什么实际的用处,像hello wold!程序一样,我们简单体会...
  • jc70100322
  • jc70100322
  • 2015年11月08日 22:20
  • 1476

VC使用驱动打印的一个例子

void CDlltestDlg::OnPrint() {  char szprinter[80];  char *szDevice,*szDriver,*szOutput;  HDC hdcprin...
  • qq445803843
  • qq445803843
  • 2015年05月20日 17:57
  • 734

《Win7设备驱动程序开发》学习笔记

《Windows 7 设备驱动程序开发》是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10。本文我学习该书的一些笔记,目前主要是...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年06月14日 15:31
  • 3593

《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)进展同步更新

本博实时更新《Linux设备驱动开发详解(第3版)》的最新进展。 2015.4 完稿。 2015年8月9日,china-pub开始上线预售:http://product.china-pub.com/4...
  • 21cnbao
  • 21cnbao
  • 2014年06月30日 20:22
  • 39587

基于WinDriver的64位驱动开发环境配置

由于项目需要,需要将此前在XP上实现的PCIE驱动移植到WIN7上来,此前用到的是VS+DDK的方案,相对来说比较复杂。 在刚着手移植工作,我采用的是框架是WDF+VS2012的方案,但由此生成的驱动...
  • nszjh
  • nszjh
  • 2014年07月14日 19:31
  • 4298

VxWorks设备驱动程序开发指南(三)---驱动程序的分类

设备驱动程序的分类 1、Introduction 本章讨论和基于VxBus驱动程序模型的VxWorks设备驱动程序的相关核心概念,并特别剖析了VxBus设备驱动程序框架,主要包括以下信息: ...
  • htyang725
  • htyang725
  • 2013年01月24日 23:22
  • 1884
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc 6.0中开发驱动设备程序配置方法
举报原因:
原因补充:

(最多只允许输入30个字)