6009|6

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DDK+VC6.0 如何设置 [复制链接]

小弟我初学驱动,
请问下我怎么把VC和DDK联系起来啊。
不用DriveerWork 哈。

最新回复

天啊,我初学就是困难啊 帮顶  详情 回复 发表于 2010-5-11 22:22
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
搜索一下“ddkbuild.bat”。
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
第一:
你可以把这个BAT文件放到桌面上,这样用着用方便了.
第二:
向楼上所说,把他的BAT文件找到,把着他里面的设置,
来设置你的环境变量.
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
用VC6来编译WDM驱动记录
     最近研究了一下用VC6编译驱动的方法,有的XP DDK自带的编译器版本高于VC6的,也就是_MSC_VER要求大于1300,而VC6的是1200,所以我基本用VC6编译2000 DDK驱动,之所以用VC编译,无非是可以用VC助手,还可以快速定位到编译出错位置。做Release版本(Free版本)的时候,还是用build工具生成吧。我用的DDK版本是(2600.1106),其中包括了XP和2000的DDK。
     本文参考了Arthur Tu兄的用VC++ 6.0来编译WDM驱动。
1.用VC建立一个空工程,我是用Win32 Console Application开始的。
2.把源程序添加进工程里面来。
3.在Tool->Options设置Include和Lib目录,注意是2000 DDK的。
   我的设置是Include目录:
   C:\WINDDK\2600.1106\INC\W2K
   C:\WINDDK\2600.1106\INC\DDK\W2K
   C:\WINDDK\2600.1106\INC\DDK\WDM\W2K
   (注意:这几个目录最好放在VC缺省目录的前面,否则容易出错)
   Lib目录:
   C:\WINDDK\2600.1106\LIB\W2K\I386
4.开始C/C++选项卡里的设置。
   1)Preprocessor definitions中设置为:WIN32=100,_X86_=1,WINVER=0x500,DBG=1
   WIN32=100:不是很清楚。
   _X86_=1:这个最重要,否则无法编译通过。代表CPU类型为X86
   WINVER=0x500,是因为你是for 2K的。XP的是0x501。
   DGB=1表示调试版本。
   2)C++ Language里面去掉Enable exeception handling,否则会出现error LNK2001: unresolved external symbol ___CxxFrameHandler。
   3)调用习俗设置成__stdcall。
   4)Project Options中去掉/GZ,目的是编译的时候不会自动加入__chkesp。
   5)不用预编译头文件,毕竟驱动程序都不会太大,不在乎节省那点时间。
  
5.设置Link选项卡
   1)输出改成*.sys
   2)lib是wdm.lib
   3)勾上Ignore all default libraries,否则会链接libc,报告没有main函数。
   4)Base address:0x10000
     Entry-point sysmbol:DriverEntry
     Statck Reverse:0x400000,缺省是1MB,但为什么要设成4MB?
     Commit:0x1000
   5)去掉自增型链接选项,否则会和/RELEASE冲突。
   6)Project Options:加入/subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078
     /subsystem:native:PE格式文件其中有个地方要填写这个。
     /driver是对驱动做一些优化。
     /SECTION:INIT,D:对INIT section进行discard
     /RELEASE (Set the Checksum)
     /IGNORE:4078 忽略4078错误,否则会出现LINK : warning LNK4078: multiple "INIT" sections found with different attributes (E2000020)
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问 信念来自于实力
是男人就超过20秒...绝妙度- -| 回首页 | 2006年索引 | - -用户模式下枚举进程的三种方法
ddk 和 vc 6.0 集成 开发环境配置
关键词: ddk    vc    6.0    集成    开发环境配置                                          

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


刚开始利用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=Driver1。Driver1是你的驱动文件所在的文件夹名.


如果以后有新的工程也要把工程名称添加到这里


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的工程文件夹,我们的驱动程序就放在这个文件夹下面。

三.还需要两个文件
还有两个文件是必须的 makefile和sources,将他们拷贝到工程文件夹,也就是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  (源文件)















































































【作者: galihoo】【访问统计: 1069 】【2006年09月26日 星期二 10:47】【注册】【打印】
Trackback
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5696251

回复

    发布人:  邮箱:  
主 页:  
验证码:     
评论内容:
            
                   

2003-2004 BOKEE.COM All rights reserved
Powered by BlogDriver 2.1
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
我也碰到这个问题
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
天啊,我初学就是困难啊
帮顶
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表