构建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
所示。
(2
)将两个源文件Driver.h
和Driver.cpp
拷贝到工程目录中,并添加到工程中,如图1-7
所示。
(3
)增加新的编译版本,去掉Debug
和Release
版本,如图1-8
和图1-9
所示。
1.3.2
用VC
集成开发环境编译HelloDDK
(2
)
(4
)修改工程属性。选择“Project”|“Setting”
,或者直接按下Alt+F7
键,弹出“Project Settings”
对话框。在对话框中,选择“General”
选项卡。将Intermediate files
和Output files
改为MyDriver_Check
,如图1-10
所示。
选择C/C++
选项卡,将原有的Project Options
内容全部删除,替换成如下内容,如图1-11
所示。
选择Link
选项卡,将原有的Project Options
内容全部删除,替换成如下内容,如图1-12
所示。
(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
操作系统下。
在“Show directories for”
下拉菜单中选择“Library files”
菜单,添加目录“D:/WINDDK/ 2600.1106/LIB/W2K/I386”
,并置于最上端,如图1-13
(b
)所示。
(6
)编译。按下F7
键,和1.3.2
节一样,同样会编译出一个HelloDDK.sys
文件。
一
准备
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 创建新工程 |
)将两个源文件Driver.h
和Driver.cpp
拷贝到工程目录中,并添加到工程中,如图1-7
所示。
图1-7 添加新文件到工程 |
)增加新的编译版本,去掉Debug
和Release
版本,如图1-8
和图1-9
所示。
图1-8 配置编译版本 |
图1-9 修改后的check 版本 |
用VC
集成开发环境编译HelloDDK
(2
)
(4
)修改工程属性。选择“Project”|“Setting”
,或者直接按下Alt+F7
键,弹出“Project Settings”
对话框。在对话框中,选择“General”
选项卡。将Intermediate files
和Output files
改为MyDriver_Check
,如图1-10
所示。
图1-10 修改输出目录 |
选项卡,将原有的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++ 选项卡 |
选项卡,将原有的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 选项卡 |
)修改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 目录 |
下拉菜单中选择“Library files”
菜单,添加目录“D:/WINDDK/ 2600.1106/LIB/W2K/I386”
,并置于最上端,如图1-13
(b
)所示。
(6
)编译。按下F7
键,和1.3.2
节一样,同样会编译出一个HelloDDK.sys
文件。
相关文章推荐
- 构建Windows驱动开发环境
- Windows驱动开发开发环境搭建
- Windows平台安装最新OpenCV-2.4.9,利用Eclipse、MinGW构建C++调用OpenCV开发环境
- 驱动开发环境之Windows XP DDK2600,VC++ 6.0, Driver Studio 3.2
- 构建嵌入式驱动开发编译环境
- windows 下构建ionic开发环境以及相关问题解决办法
- Windows Embedded CE 6内核、驱动开发环境搭建
- Windows驱动开发环境搭建
- 【转】windows驱动开发环境的搭建
- Windows 平台下构建 Android 开发环境( Android SDK 下载及安装)
- Windows驱动开发VS2012 DDK/WDK的环境配置
- WINDOWS 7 配置驱动开发环境(wdk7.60)
- windows 7驱动开发环境配置
- windows驱动开发环境搭建
- Windows开发环境构建之Java篇
- Windows驱动开发环境搭建详细记录
- 在Windows上构建Android应用开发环境
- 第一天:搭建Windows内核驱动开发调试环境
- WINDOWS 7 配置驱动开发环境(wdk7.60)
- WINDOWS 7 配置驱动开发环境(wdk7.60)