其实我一直很都想做一下驱动程序开发的,(从一开始就听说Driver的开发不是人做的)……
言归正传,从昨天到现在整整搞了一天半,终于将编译环境配置出来了(winxp DDK sp1+VC6+DriverStudio)
其中重装了一次系统,vc和DDK装了N遍。现在将配置过程总结一下,可让大家少走点弯路。
而且讨厌的是网上的方法都是对的,但是提供代码老是编译不通过。(我baidu了很多资料才将其中的Dug
改过来哦)
软件必备:
1. windows的DDK(不同版本windows下不同的DDk我用的是xp DDK sp1);
2.VC6.0 英文版(也可用VS2005但是配置Driverstudio稍有不同);中文版我没试过(不建议使用);
3.DriverStudio 我用的是3.2;
安装顺序:
vc -> ddk -> DriverStudio
注意事项:
1.顺序绝对不可以错;
2.DDK很脆弱,安装目录不允许有空格(这是为什么默认安装在C:/WINDDK/下);
3.安装路径不允许有汉语字符。
4.当安装成功后,在建立工程的时候,也不允许出现第2,3项(很BT吧,没办法,光这两项我就试了
两个小时才搞清楚)。。。。
安装过程:
这个过程很Easy,就按照默认的配置安装即可,我们不太Care!
使用VC6调试DDK程序:
这是这项工程的核心部分。
首先了解一下DDK的编译,这个过程需要两个东东:一是使用安装目录下的./bin/setenv.bat注册环境变量。第二
使用 ./bin/build.exe 来编译(想弄清其运行机制的,查阅编译器的相关文档)。
编译过程需要三个文件:一个批处理文件来执行build命令(来自VC IDE调用)一个Makefile文件
它集成了Build所需的编译器设置,还有一个Source文件,他用来管理需要编译的源文件的。(还有其他作用不再赘述)
我们要做的就是使用自己写的MakeFile来编译我们的程序。否则你将用命令行来编译!!!
进入正题:
利用VC的Wizzard创建makefile工程一路默认即可。
将成熟代码加到工程中来(就是没有错误的C/C++Code);然后就是设置VC编译器
我们假设 批处理文件就是 build.bat
设置Project的setting 将Debug的 CommandLine:改为
build.bat chk WorkDir ProPath
设置 Release 的CommandLine为
build.bat fre WorkDir ProPath
说明: chk 是表示将目标文件编译为checked版本(相当于VC的Debug其中有很多调试信息)
WorkDir 是你当前工程的根目录
ProPath 是你当前工程的 路径。
注意:WorkDir和ProPath要根据你工程路径来设置,如果位置变了,相应的也要重新设置。
按照我提供的 Commandline提供一个build.bat 文件:
源码如下:
@echo off
rem -----------------------------------------------------------
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
set DDKOPT=%1
if "%DDKOPT%" == "" set DDKOPT=fre
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
%2
cd %3
%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
这个文件是在另外一个从网上下载的配置方法里改来的,原来的不能用,
不怎么解释了,了解命令行的人一看就懂,不了解的解释了也不明白……
在提供一个makefile文件:(意思是使用默认的Makefile,makefile里Include指令嘛)
!INCLUDE $(NTMAKEENV)/makefile.def
然后提供一个source文件:
TARGETNAME=HelloDDK
TARGETTYPE=DRIVER
TARGETPATH=OBJ
INCLUDES=$(BASEDIR)/inc;/
$(BASEDIR)/inc/ddk;/
SOURCES=Driver.cpp/
略微解释一下:TargetName 编译出来的目标文件
TargetType一般是 Driver
TargetPath 为中间目录文件名称
Includes 提供源程序中头文件路径
sources为需要编译的C/C++源文件。如果多的话逐一列出。
好了 你可以使用VC编译和DDK联合开发驱动程序了,
而DriverStudio提供了很多Debug时需要实用的软件,我也不太明白。
不过配置不太难。
Gooooooooooooood luck To U!!