构建Windows驱动开发环境

在此下载:/Files/aurain/ddkvs2005build.doc
准备

DDK 版本: Windows DDK 3790

IDE Visual Studio 2005

 

DDK 环境编译驱动

       这种编译驱动 的办法是 DDK 文档中所提倡的办法。此种方法需要编写一个编译脚本文件 ,在这个脚本中描述了 DDK 驱动程序 的源文件、用到的 lib 文件和 include 路径名、编译输出的目录和文件名等信息。编写此类脚本对于 Windows 程序员可能比较陌生,尤其是当源文件较多时,编写脚本文件可能显得更如麻烦。在源程序的相同目录下创建两个文件 makefile Sources ,这两个文件都是文本文件,内容如下。

 

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

Sources 这个文件参考实际情况修改

!if "$(DDK_TARGET_OS)"=="Win2K"

TARGETNAME=Passthru_2000

!elseif "$(DDK_TARGET_OS)"=="WinXP"

TARGETNAME= Passthru _XP

!elseif "$(DDK_TARGET_OS)"=="WinNET"

TARGETNAME= Passthru _03Server

!endif

TARGETPATH=obj

TARGETTYPE=DRIVER

 

C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS_WDM=1

 

 

!if !defined(DDK_TARGET_OS) || "$(DDK_TARGET_OS)"=="Win2K"

#

# The driver is built in the Win2K build environment

#

C_DEFINES=$(C_DEFINES) -DNDIS40_MINIPORT=1

C_DEFINES=$(C_DEFINES) -DNDIS40=1

!else

#

# The driver is built in the XP or .NET build environment

# So let us build NDIS 5.1 version.

#

C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1

C_DEFINES=$(C_DEFINES) -DNDIS51=1

!endif

 

# Uncomment the following to build for Win98/SE/WinMe

# This causes several APIs that are not present in Win9X to be

# ifdef'ed out.

# C_DEFINES=$(C_DEFINES) -DWIN9X=1

 

PRECOMPILED_INCLUDE=precomp.h

PRECOMPILED_PCH=precomp.pch

PRECOMPILED_OBJ=precomp.obj

 

!if !defined(DDK_TARGET_OS) || "$(DDK_TARGET_OS)"=="Win2K"

TARGETLIBS=$(DDK_LIB_PATH)/ndis.lib /

$(DDK_LIB_PATH)/ntstrsafe.lib

!else

TARGETLIBS=$(DDK_LIB_PATH)/ndis.lib

!endif

 

USE_MAPSYM=1

 

INCLUDES=

 

SOURCES=/

    miniport.c /

    passthru.c /

    passthru.rc /

    protocol.c /

    PTEXTEND.C /

    filter.c 

7 行说明此驱动的名称,这里用到了宏来控制不同操作系统版本的编译所需的文件, $(DDK_TARGET_OS) 是从外面的命令行传递进来的。
9 行指明此驱动的类型为 NT 型驱动。
接着是一些宏定义。

TARGETLIBS 是编译时要链接的库
INCLUDES
是附加的包含目录。
SOURCES
指定源文件。
编写完这两个脚本后,在 Windows 的开始菜单中选择 “Windows XP Checked Build Environment” (或者其它操作系统)编译环境。一般驱动可以编译出两种版本, Checked 版本和 Free 版本。两者的区别类似于 Win32 程序开发的 Debug 版本和 Release 版本。

 

IDE 环境编译驱动

       首先准备一个脚本(我这里命名为 MakeDrv.bat ),内容如下:

@echo off

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

rem usage:

rem MakeDrv.bat [<fre | chk>] [<WXP | WNET | W2K>]

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

 

if exist *.sys del *.sys

 

set DDKOPT=%1

if "%DDKOPT%" == "" set DDKOPT=fre

 

set DDKOS=%2

if "%DDKOS%" == "" set DDKOS=WXP

 

pushd .

if not exist c:/winddk/bin/setenv.bat goto SetenvNotFound

call c:/winddk/bin/setenv.bat c:/winddk %DDKOPT% %DDKOS%

popd

if not exist c:/winddk/bin/x86/build.exe goto NoBuildExe

 

c:/winddk/bin/x86/build.exe

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

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

goto exit

 

:CopyChecked

if "%DDKOS%" == "WXP" (

if exist ./objchk_wxp_x86/i386/*.sys move ./objchk_wxp_x86/i386/*.sys ./Debug/

)

if "%DDKOS%" == "WNET" (

if exist ./objchk_wnet_x86/i386/*.sys move ./objchk_wnet_x86/i386/*.sys ./Debug/

)

if "%DDKOS%" == "W2K" (

if exist ./objchk_w2k_x86/i386/*.sys move ./objchk_w2k_x86/i386/*.sys ./Debug/

)

goto exit

 

:CopyFree

if "%DDKOS%" == "WXP" (

if exist ./objfre_wxp_x86/i386/*.sys move ./objfre_wxp_x86/i386/*.sys ./Release/

)

if "%DDKOS%" == "WNET" (

if exist ./objfre_wnet_x86/i386/*.sys move ./objfre_wnet_x86/i386/*.sys ./Release/

)

if "%DDKOS%" == "W2K" (

if exist ./objfre_w2k_x86/i386/*.sys move ./objfre_w2k_x86/i386/*.sys ./Release/

)

goto exit

 

:SetenvNotFound

echo Can't found Setenv.bat.

goto exit

 

:NoBuildExe

echo Can't found build.exe

goto exit

 

:exit

del *.log

pause

MakeDrv.bat 拷到驱动源目录下(与源文件同目录)

说明:

1. c:/winddk/bin/setenv.bat ,这个是驱动自带的, c:/winddk 是我驱动安装目录(需要根据实际情况配置),你也可以设置环境变量。

2. 这个脚本的实质还是调用驱动自带的 build.exe 来编译,只不过在这里我们把需要的参数封装了下。

3. 编译完毕后,我们会把生成的 sys 文件拷贝到 Debug Release 目录,中间文件还是放在类似 objfre_w2k_x86/i386 这种目录下。

 

       现在打开 VS2005 ,新建一个 makefile 项目(中文版的叫“生成文件项目”,在 vc++ ——常规)下,保证解决方案同源码及 MakeDrv.bat 处于同一目录。

在向导的“设置调试配置”中,如下图所示填写:

在“设置发布配置”,不要选择“与调试配置相同”,如下图所示填写:

单击“完成”,便新建了一个工程(当然是空的),你可以把已有的代码添加进来,编译后就会生成驱动文件了。

IDE 可以快速定位错误,以后编辑也很方便,默认是编译 xp checked 版本的驱动,你可以通过项目的配置里(项目 - 项目属性),选择“配置熟悉” -NMake ,生成命令行修改一下,如希望生成 2003 fre 版本的驱动,则改成 MakeDrv.bat fre WNET

以上是两种介绍编译驱动的方法,原理都是调用 DDK 自带的工具的了,大家应该可以快速的构建自己的编译环境,有什么不懂我们可以再讨论。

下面介绍第三种方法,是“ Windows 驱动开发技术详解”中介绍的,摘抄如下:(希望没侵犯版权 ^_^

VC 集成开发环境编译HelloDDK1
初次学习编写Windows 驱动程序的开发人员,大部分是熟悉VC IDE 开发环境的Windows 程序员。他们可能不喜欢用编辑脚本来描述一个工程,而是更希望在熟悉的VC IDE 环境下编译,并且利用VC IDE 可以方便快速地对代码进行交叉索引等操作。本节将向读者介绍此种方法。
1 )用VC 建立一个新工程。在VC IDE 环境中选择“File”|“New” ,弹出“New” 对话框。在该对话框中,选择“Project” 选项卡。在“Project” 选项卡中,选择Win32 Application (因为VC 并没有提供驱动程序的工程,所以在Win32 工程的基础上进行修改)。工程名为“DriverDev” ,如图1-5 所示。单击“OK” 按钮,进入下一个对话框。在该对话框中,选择一个空的工程,如图1-6 所示。

1-5   添加新工程

 

1-6   创建新工程


2 )将两个源文件Driver.hDriver.cpp 拷贝到工程目录中,并添加到工程中,如图1-7 所示。

1-7   添加新文件到工程


3 )增加新的编译版本,去掉DebugRelease 版本,如图1-8 和图1-9 所示。

1-8   配置编译版本

 

1-9   修改后的check 版本

 

1.3.2    VC 集成开发环境编译HelloDDK2
4 )修改工程属性。选择“Project”|“Setting” ,或者直接按下Alt+F7 键,弹出“Project Settings” 对话框。在对话框中,选择“General” 选项卡。将Intermediate filesOutput files 改为MyDriver_Check ,如图1-10 所示。

1-10   修改输出目录

选择C/C++ 选项卡,将原有的Project Options 内容全部删除,替换成如下内容,如图1-11 所示。

/nologo /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100
/D _X86_=1 /D WINVER=0x500 /D DBG=1
/Fo"MyDriver_Check/" /Fd"MyDriver_Check/" /FD /c

 

1-11   修改C++ 选项卡

选择Link 选项卡,将原有的Project Options 内容全部删除,替换成如下内容,如图1-12 所示。

ntoskrnl.lib /nologo /base:"0x10000"
/stack:0x400000,0x1000 /entry:"DriverEntry"
/subsystem:console /incremental:no /pdb:"
MyDriver_Check/HelloDDK.pdb" /debug /machine:I386
/nodefaultlib /out:"MyDriver_Check/HelloDDK.sys"
/pdbtype:sept /subsystem:native /driver
/SECTION:INIT,D /RELEASE /IGNORE:4078

 

1-12   修改link 选项卡

5 )修改VClib 目录和include 目录。在VC 中选择“Tools”|“Options” ,在弹出的对话框中选择“Directories” 选项卡。在“Show directories for” 下拉菜单中选择“Include files” 菜单。添加“D:/WINDDK/2600.1106/INC/W2K”“D:/WINDDK/2600.1106/INC/DDK/W2K” ,并将这两个目录置于最上,如图1-13a )所示。读者可将“D:/WINDDK/ 2600.1106” 替换成自己的DDK 安装目录。这里应该选择W2K 子目录,DDK 中还会有相应的XP 子目录。因为XP 驱动编译时候需要高版本的VC 编译器,所以这里用的是W2K 子目录,它编译的代码完全可以应用于Windows 2000Windows XP 操作系统下。

   

1-13   设置include 目录和设置lib 目录

“Show directories for” 下拉菜单中选择“Library files” 菜单,添加目录“D:/WINDDK/ 2600.1106/LIB/W2K/I386” ,并置于最上端,如图1-13b )所示。

6 )编译。按下F7 键,和1.3.2 节一样,同样会编译出一个HelloDDK.sys 文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值