您的位置:首页 > 其它

构建Windows驱动开发环境

2009-07-29 11:49 190 查看
在此下载:/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
集成开发环境编译HelloDDK
(1



初次学习编写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.h
和Driver.cpp
拷贝到工程目录中,并添加到工程中,如图1-7
所示。





图1-7
添加新文件到工程

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





图1-8
配置编译版本





图1-9
修改后的check
版本

1.3.2


用VC
集成开发环境编译HelloDDK
(2



(4
)修改工程属性。选择“Project”|“Setting”
,或者直接按下Alt+F7
键,弹出“Project Settings”
对话框。在对话框中,选择“General”
选项卡。将Intermediate files
和Output 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
)修改VC
的lib
目录和include
目录。在VC
中选择“Tools”|“Options”
,在弹出的对话框中选择“Directories”
选项卡。在“Show directories for”
下拉菜单中选择“Include files”
菜单。添加“D:/WINDDK/2600.1106/INC/W2K”
和“D:/WINDDK/2600.1106/INC/DDK/W2K”
,并将这两个目录置于最上,如图1-13
(a
)所示。读者可将“D:/WINDDK/ 2600.1106”
替换成自己的DDK
安装目录。这里应该选择W2K
子目录,DDK
中还会有相应的XP
子目录。因为XP
驱动编译时候需要高版本的VC
编译器,所以这里用的是W2K
子目录,它编译的代码完全可以应用于Windows 2000
和Windows XP
操作系统下。





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

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

(6
)编译。按下F7
键,和1.3.2
节一样,同样会编译出一个HelloDDK.sys
文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: