阅读:2509回复:23
困惑的问题:一个完整的驱动都包括那些内容?愿意放尽所有的分!
想知道一个完整的驱动都包括那些内容?
我是这样认为的:首先,它应该包括三部分:第一部分,是设备端的程序;第二部分,是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),那怎么编译呢?又如何把文件夹中的文件联系(大概是这个意思吧)到一块呢? 罗罗嗦嗦的说了一大堆,也不知大家看明白了没有?回答者必有分,当然,回答最细致的人得分最多,我已经做好把我现有的分都花在这个问题上的准备了。问题解决后,我在灌水坛放分! |
|
最新喜欢:mapofl
|
沙发#
发布于:2003-06-09 20:10
其实DDK帮我们设置BUILD很好用,所以无须VC IDE直接将C,H,,RC,SOURCE,MAKEFILE进行BUILD即可.
|
|
|
板凳#
发布于: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根据你的驱动设定。 好累,就说这么多,自己多看看书,打好基础。如果你以前基础就比较扎实,还是比较好入门的。 |
|
地板#
发布于:2003-06-09 20:57
你所列的问题正好是我也在探究的东西。随便说说吧--错了,请大侠指教。
一个完整的WDM程序究竟都包含那些部分?一般说,用途不同的设备的驱动程序,其构成也不一样,例如,软驱和声卡的驱动就不会一样。尽管如此,共性的东西还是有的:例如初始化、即插即用管理、电源管理等等。 开发驱动程序的方法有几种,和应用程序编程语言一样--易学的不灵活,灵活的不易学。如果用VC+DDK的方案,是最难的了,但灵活性最强,真要在这个方案上修炼成功,就是牛人了。这种方案下,不需要IDE环境,编译程序用的是BUILD命令,实际就是命令行的界面了。因此用不到工程或项目文件。 BUILD命令使用之前,特别是第一次使用之前是要设置编译环境的,这些设置都被放在一个批处理文件中。编译中,还要使用Makefile,SOURCRE、dirs等文件,(其实IDE不过是将这些文件集成使用并体现在图形界面上,不被使用者直接感觉到罢了)。 先说到这里,有空再继续 |
|
地下室#
发布于:2003-06-10 05:54
src中的例子,每个特定的项目占据一个子目录,最低层的子目录中,就是生成一个WDM驱动所需要的全部源文件。注意里面有个htm文件,用IE打开后,会看到用英文写的简略地介绍该子目录中每个文件的作用,如何编译等等信息。你比较几个子目录就会发现,彼此并不相同。但其构成也无非是头文件,和扩展名为.C的源文件等等。
下面说点题外话。----我猜,你大概想从整体上弄清WDM的结构,特别希望有个注释信息很详尽的例子,能事先知道程序的结构和功能,然后对照参考源代码进行模仿学习,这和我的念头一样。但至今也没有找到合适的资料。所以学习进展很慢。也许将来不得不该学较为容易的工具。 |
|
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批处理文件到底起什么作用?我打开它,但是看不懂它的内容; |
|
|
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学好,让我将来有的问。 |
|
|
7楼#
发布于:2003-06-10 11:40
另:各位(我在包括以后的各位)去灌水坛领分吧。!
|
|
|
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批处理文件到底起什么作用?我打开它,但是看不懂它的内容; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 不就是几句批处理命令吗?很早前我看过,就是把编译的命令行参数拿进来,方便你编译驱动,完全可以自己写。 |
|
|
9楼#
发布于:2003-06-10 15:50
[quote]那当我修改src里面的例子时,是不是就直接修改.c,.h文件就可以了,如果我想建立一个工程文件将它们包括进去进行再编译可不可以?还是习惯这样。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 当然可以,随你所愿。 唉,当年设置VC时,一个星期才搞定,差点没疯掉。所以,BaoFu兄,跟我这种笨蛋加菜鸟比起来,你已经是天才少年了 :D。打起精神来,把DDK学好,让我将来有的问。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 就是就是,BaoFU不用谦虚了,呵呵。 |
|
|
10楼#
发布于:2003-06-10 19:27
我开始学习驱动,到现在差不多一个月了,毕业论文已经完成,这两天正在浏览那本厚厚的驱动程序开发指南。和Baofu,nlq_new兄一样,只是这方面的新手,因为都刚经历了初始入门的阶段,有些体悟相互交流一下也许对大家都是很大的帮助,如果需要的话,我可以把完成的论文发给你们一份,虽然大量内容都是来自Chris Cant和Walt Oney的书:)
|
|
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 |
|
|
12楼#
发布于:2003-06-10 20:34
另:各位(我在包括以后的各位)去灌水坛领分吧。! 有必要吗?? |
|
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]\" |
|
14楼#
发布于:2003-06-11 07:00
谢谢windyguy兄:论文可发到:plbm1299@sohu.com,让我拜读一下,提高提高。
nlq_new兄: SOURCE文件中的内容是dos的批处理语句,基本是QBaisc语言中的东西,找本dos的书参考一下,很容易懂的。要说难点,在于BUILD命令采用的命令行界面,较之于图形界面的直观性太差。但命令行界面 也有它所好处:灵活性很强,一旦熟练后,用起来比图形界面更顺手和随心所欲。这也是微软至今仍(在这个领域里)坚持使用它的原因。 |
|
15楼#
发布于:2003-06-11 09:29
我开始学习驱动,到现在差不多一个月了,毕业论文已经完成,这两天正在浏览那本厚厚的驱动程序开发指南。和Baofu,nlq_new兄一样,只是这方面的新手,因为都刚经历了初始入门的阶段,有些体悟相互交流一下也许对大家都是很大的帮助,如果需要的话,我可以把完成的论文发给你们一份,虽然大量内容都是来自Chris Cant和Walt Oney的书:) 真是好人哪!给我一份吧!信箱:nlq_new@hotmail.com.另:现在可以去灌水坛领分了! 有必要吗?? 没别的办法表示感激呀! :D :D :D |
|
|
16楼#
发布于:2003-06-11 19:19
已发:),请查收
|
|
17楼#
发布于:2003-06-11 19:47
-----------------------------------------------------------
在看DDK开发包的例程时,发现没有工程文件(dsp或dsw),那怎么编译呢? ----------------------------------------------------------- BUILD!!!!! 注意:source,makefile 文件!!! |
|
18楼#
发布于:2003-06-11 21:18
谢谢windyguy! :)
----------------------------- BUILD!!!!! 注意:source,makefile 文件!!! ------------------------ BUILD什么呀?是不是这样:build 目录A makefile,source以及source里列出的*.c,*.h文件都在目录A下面? :D |
|
|
19楼#
发布于:2003-06-11 21:38
Build先通过Source和makefile这两个文件的内容来编译项目,所以你要build什么,在Source里面指定清楚就好,不用build 目录A。
直接进入放了Source和makefile的目录,build,然后回车就ok。 |
|
上一页
下一页