nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:2507回复:23

困惑的问题:一个完整的驱动都包括那些内容?愿意放尽所有的分!

楼主#
更多 发布于:2003-06-09 18:09
想知道一个完整的驱动都包括那些内容?
我是这样认为的:首先,它应该包括三部分:第一部分,是设备端的程序;第二部分,是WDM驱动程序,第三部分,是用户应用程序。不知这样说对不对?同时我很想知道的是这三部分各自又包含那些内容,比如说都包含那些文件?(尤其是第二部分)
我现在正在看的是第二部分的驱动程序,是用DDK+VC开发的(其他的我不知道)。有两套例程集可以参考,一套是Chris Cant的Windows WDM设备驱动程序开发指南的随书光盘中的例程,一个是DDK的例程src,前一个由于有书的讲解,有如下印象:一个驱动程序应该包括有一个*.dsp(dsw)工程文件,这样才能在在这个工程里,我们才能编写一些*.c,*.h文件,另外在这个工程里还包括和一些MAKEFILEbuild.err,build.log,build.wrn,MakeDrvr.bat,Makefile.inc,SOURCRE之类的文件(具体有哪些我也不太清楚,还要各位大侠补充一下),但是,在看DDK开发包的例程时,发现没有工程文件(dsp或dsw),那怎么编译呢?又如何把文件夹中的文件联系(大概是这个意思吧)到一块呢?
罗罗嗦嗦的说了一大堆,也不知大家看明白了没有?回答者必有分,当然,回答最细致的人得分最多,我已经做好把我现有的分都花在这个问题上的准备了。问题解决后,我在灌水坛放分!

最新喜欢:

mapoflmapofl
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2003-06-09 20:10
其实DDK帮我们设置BUILD很好用,所以无须VC IDE直接将C,H,,RC,SOURCE,MAKEFILE进行BUILD即可.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
windyguy
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2004-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-09 20:42
……汗,发现你连vc的基本概念都没有,和我半个月前差不多,呵呵。就是因为毕业设计要做驱动,才逼着去看的:)

一个驱动程序,你甚至可以不用vc来编写,直接用记事本就可以。所谓的工程文件,是vc为了更好得组织代码而创建的。驱动不是必须要包含工程文件,至于dsw是vc的WorkSpace文件,也是为了组织代码的,自己去看看vc的书吧。

“MAKEFILEbuild.err,build.log,build.wrn,MakeDrvr.bat,Makefile.inc,SOURCRE”,这些你列出的文件,前面的.err,.log,.wrn是DDK编译时生成的日志,完全无用,Chris Cant在工程中加入应该是为了方便调试。

MakeDrvr.bat是Chris Cant为了方便编译做的批处理,你可以手工用DDK编译,所以也不是必须。

MakeFile, MakeFile.inc, Sources 这三个文件是必须的,DDK在编译时需要它们,Makefile的两个文件可以照抄,Sources根据你的驱动设定。

好累,就说这么多,自己多看看书,打好基础。如果你以前基础就比较扎实,还是比较好入门的。
BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-09 20:57
你所列的问题正好是我也在探究的东西。随便说说吧--错了,请大侠指教。
   一个完整的WDM程序究竟都包含那些部分?一般说,用途不同的设备的驱动程序,其构成也不一样,例如,软驱和声卡的驱动就不会一样。尽管如此,共性的东西还是有的:例如初始化、即插即用管理、电源管理等等。
  开发驱动程序的方法有几种,和应用程序编程语言一样--易学的不灵活,灵活的不易学。如果用VC+DDK的方案,是最难的了,但灵活性最强,真要在这个方案上修炼成功,就是牛人了。这种方案下,不需要IDE环境,编译程序用的是BUILD命令,实际就是命令行的界面了。因此用不到工程或项目文件。
    BUILD命令使用之前,特别是第一次使用之前是要设置编译环境的,这些设置都被放在一个批处理文件中。编译中,还要使用Makefile,SOURCRE、dirs等文件,(其实IDE不过是将这些文件集成使用并体现在图形界面上,不被使用者直接感觉到罢了)。
     先说到这里,有空再继续
BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-10 05:54
src中的例子,每个特定的项目占据一个子目录,最低层的子目录中,就是生成一个WDM驱动所需要的全部源文件。注意里面有个htm文件,用IE打开后,会看到用英文写的简略地介绍该子目录中每个文件的作用,如何编译等等信息。你比较几个子目录就会发现,彼此并不相同。但其构成也无非是头文件,和扩展名为.C的源文件等等。
   下面说点题外话。----我猜,你大概想从整体上弄清WDM的结构,特别希望有个注释信息很详尽的例子,能事先知道程序的结构和功能,然后对照参考源代码进行模仿学习,这和我的念头一样。但至今也没有找到合适的资料。所以学习进展很慢。也许将来不得不该学较为容易的工具。  
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-10 10:08
引用windyguy的话:
“一个驱动程序,你甚至可以不用vc来编写,直接用记事本就可以。所谓的工程文件,是vc为了更好得组织代码而创建的。驱动不是必须要包含工程文件,至于dsw是vc的WorkSpace文件,也是为了组织代码
的,自己去看看vc的书吧。”

这段话的意思是说如果选择DDK作开发工具,不限制用什么编程工具来写,只要在DDK的free build或checkde build环境中将C,H,RC,SOURCE,MAKEFILE等文件进行编译就可以了。但是不能单个进行编译吧?比如说,我有这些文件(C,H,,RC,SOURCE,MAKEFILE)在文件夹WDM1里,是不是就要就编译整个WDM1文件夹中的所有内容?那DDK怎么识别那些哪些是要编译的,哪些文件是跟整个驱动无关的呢?


“MakeDrvr.bat是Chris Cant为了方便编译做的批处理,你可以手工用DDK编译,所以也不是必须。”

MakeDrvr.bat批处理文件到底起什么作用?我打开它,但是看不懂它的内容;
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-10 10:48
引用BaoFu的话:
“src中的例子,每个特定的项目占据一个子目录,最低层的子目录中,就是生成一个WDM驱动所需要的全部源文件。注意里面有个htm文件,用IE打开后,会看到用英文写的简略地介绍该子目录中每个文件的作用,如何编译等等信息。你比较几个子目录就会发现,彼此并不相同。但其构成也无非是头文件,和扩展名为.C的源文件等等。“

那当我修改src里面的例子时,是不是就直接修改.c,.h文件就可以了,如果我想建立一个工程文件将它们包括进去进行再编译可不可以?还是习惯这样。

”下面说点题外话。----我猜,你大概想从整体上弄清WDM的结构,特别希望有个注释信息很详尽的例子,能事先知道程序的结构和功能,然后对照参考源代码进行模仿学习,这和我的念头一样。但至今也没有找到合适的资料。所以学习进展很慢。也许将来不得不该学较为容易的工具。 ”

我推荐过chris cant的书《Windows WDM驱动开发指南》,书中的内容就是针对随书光盘中的例子进行讲解的,不太深入,但是还可以,就是逐个看例子,对每个例子的代码逐行进行分析,同时参照walter
oney的书和DDK的help(最头疼的英文),挺有收获的,但是我就像windyguy说的,对基本知识没有概念(其实这才是关键的),所以虽然知道它(例子)这样作,但是不太明白它为什么这样作,再加上一些注册表,内存池,中断过程中优先级的转换等等让我望而生畏的概念(虽然我看了这些概念的相关资料,一遍又一遍的,但还是很糊涂,不能完全理解),所以,我的学习可以说是“消化了,但没吸收”。

唉,当年设置VC时,一个星期才搞定,差点没疯掉。所以,BaoFu兄,跟我这种笨蛋加菜鸟比起来,你已经是天才少年了 :D。打起精神来,把DDK学好,让我将来有的问。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-10 11:40
另:各位(我在包括以后的各位)去灌水坛领分吧。!
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-10 15:47
这段话的意思是说如果选择DDK作开发工具,不限制用什么编程工具来写,只要在DDK的free build或checkde build环境中将C,H,RC,SOURCE,MAKEFILE等文件进行编译就可以了。但是不能单个进行编译吧?比如说,我有这些文件(C,H,,RC,SOURCE,MAKEFILE)在文件夹WDM1里,是不是就要就编译整个WDM1文件夹中的所有内容?那DDK怎么识别那些哪些是要编译的,哪些文件是跟整个驱动无关的呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
进行怎样的编译SOURCE文件里已经决定了,Makefile所有的驱动都一样,只有相同的一行,SOURCE文件指定了编译文件的依赖性,RC从某个角度看就是SOURCE在VC下的表现。

MakeDrvr.bat批处理文件到底起什么作用?我打开它,但是看不懂它的内容;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不就是几句批处理命令吗?很早前我看过,就是把编译的命令行参数拿进来,方便你编译驱动,完全可以自己写。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-10 15:50
[quote]那当我修改src里面的例子时,是不是就直接修改.c,.h文件就可以了,如果我想建立一个工程文件将它们包括进去进行再编译可不可以?还是习惯这样。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当然可以,随你所愿。

唉,当年设置VC时,一个星期才搞定,差点没疯掉。所以,BaoFu兄,跟我这种笨蛋加菜鸟比起来,你已经是天才少年了 :D。打起精神来,把DDK学好,让我将来有的问。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
就是就是,BaoFU不用谦虚了,呵呵。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
windyguy
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2004-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-10 19:27
  我开始学习驱动,到现在差不多一个月了,毕业论文已经完成,这两天正在浏览那本厚厚的驱动程序开发指南。和Baofu,nlq_new兄一样,只是这方面的新手,因为都刚经历了初始入门的阶段,有些体悟相互交流一下也许对大家都是很大的帮助,如果需要的话,我可以把完成的论文发给你们一份,虽然大量内容都是来自Chris Cant和Walt Oney的书:)
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-06-10 20:23
我打开SOURCE文件看了:
wTARGETNAME=Wdm1
TARGETTYPE=DRIVER
DRIVERTYPE=WDM
TARGETPATH=OBJ

INCLUDES=$(BASEDIR)\\inc;

SOURCES= init.cpp \\
dispatch.cpp \\
pnp.cpp \\
DebugPrint.c \\
Wdm1.rc
以上这几个就是要编译的文件吗?
NTTARGETFILES=PostBuildSteps------这个是什么意思?

下面的是MakeDrvr文件的内容,我看不明白呀!都是什么意思?有没有人讲解一下。
@echo off
if \"%1\"==\"\" goto usage
if \"%3\"==\"\" goto usage
if not exist %1\\bin\\setenv.bat goto usage
call %1\\bin\\setenv %1 %4
%2
cd %3
build -b -w %5 %6 %7 %8 %9
goto exit

:usage
echo usage   MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked [build_options]
echo eg      MakeDrvr %%DDKROOT%% C: %%WDMBOOK%% free -cef
:exit
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-06-10 20:34
另:各位(我在包括以后的各位)去灌水坛领分吧。!


有必要吗??
windyguy
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2004-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-06-10 21:03
你起码得有一些dos使用的知识,我试着解释下吧。

\"下面的是MakeDrvr文件的内容,我看不明白呀!都是什么意思?有没有人讲解一下。
@echo off                  //关闭屏幕回显,没什么要紧的
if \"%1\"==\"\" goto usage     //假如不存在参数1跳到usage段,参数1就是你运行MakeDrvr.bat后接的第一个参数,后同
if \"%3\"==\"\" goto usage    
if not exist %1\\bin\\setenv.bat goto usage//假如不存在该文件也跳到usage,就是setenv.bat这个文件,其中引用了参数1
call %1\\bin\\setenv %1 %4  //运行setenv.bat,call 就是开始一个外部命令
%2  //直接运行参数2,比如你MakeDrvr ok dir,因为dir是参数2,所以这个地方相当与执行dir命令
cd %3
build -b -w %5 %6 %7 %8 %9 //这儿就是用ddk来build了
goto exit  //成功退出.bat

:usage
echo usage   MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked [build_options]
echo eg      MakeDrvr %%DDKROOT%% C: %%WDMBOOK%% free -cef
:exit [/quote]\"
BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-06-11 07:00
谢谢windyguy兄:论文可发到:plbm1299@sohu.com,让我拜读一下,提高提高。
nlq_new兄:
  SOURCE文件中的内容是dos的批处理语句,基本是QBaisc语言中的东西,找本dos的书参考一下,很容易懂的。要说难点,在于BUILD命令采用的命令行界面,较之于图形界面的直观性太差。但命令行界面
也有它所好处:灵活性很强,一旦熟练后,用起来比图形界面更顺手和随心所欲。这也是微软至今仍(在这个领域里)坚持使用它的原因。
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-06-11 09:29
 我开始学习驱动,到现在差不多一个月了,毕业论文已经完成,这两天正在浏览那本厚厚的驱动程序开发指南。和Baofu,nlq_new兄一样,只是这方面的新手,因为都刚经历了初始入门的阶段,有些体悟相互交流一下也许对大家都是很大的帮助,如果需要的话,我可以把完成的论文发给你们一份,虽然大量内容都是来自Chris Cant和Walt Oney的书:)


真是好人哪!给我一份吧!信箱:nlq_new@hotmail.com.另:现在可以去灌水坛领分了!

有必要吗??


没别的办法表示感激呀! :D :D :D
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
windyguy
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2004-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-06-11 19:19
    已发:),请查收
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-06-11 19:47
-----------------------------------------------------------
在看DDK开发包的例程时,发现没有工程文件(dsp或dsw),那怎么编译呢?
-----------------------------------------------------------
BUILD!!!!!
注意:source,makefile 文件!!!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-06-11 21:18
谢谢windyguy! :)
-----------------------------
BUILD!!!!!
注意:source,makefile 文件!!!
------------------------
BUILD什么呀?是不是这样:build 目录A
makefile,source以及source里列出的*.c,*.h文件都在目录A下面? :D
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
windyguy
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2004-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-06-11 21:38
  Build先通过Source和makefile这两个文件的内容来编译项目,所以你要build什么,在Source里面指定清楚就好,不用build 目录A。

直接进入放了Source和makefile的目录,build,然后回车就ok。
上一页
游客

返回顶部