驱动开发学习笔记2.docx
《驱动开发学习笔记2.docx》由会员分享,可在线阅读,更多相关《驱动开发学习笔记2.docx(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结资料word 精心总结归纳 - - - - - - - - - - - -驱动开发学习笔记1很久没有网了,出了一段时间的差,近来,莫名的就有点郁闷!前不久在大富翁上发了 一份帖子是关于delphi程序员的进展,大家的反应并不都是很好。于是开头觉得可以考虑换个方向。以前我是做MIS开发的。换哪个方向了?人越多的方向,似乎越是没有前途。想想起初上高校,那可是越多人考的学校,学费越贵啊!可现在的职业了?越 多人干的事,越是没有前途了。考虑来考虑去,打算学习一下驱动程序的开发吧!于是 从网上查找了一些资料,看的懂的觉得蛮不错适合我这种学校生的就贴了出来,算是学习笔记吧!用户模式与内核模
2、式从 Intel80386开头,出于安全性和稳固性的考虑,该系列的CPU 可以运行于ring0ring3从高到低四个不同的权限级,对数据也供应相应的四个爱护级别。运行于较低级别的代码不能随便调用高级别的代码和拜访较高级别的数据,而且也只有运行在 ring0层的代码可以直接对物理硬件进行拜访。由于WindowsNT是一个支持多平台的操作系统,为了与其他平台兼容,它只利用了CPU 的两个运行级别。一个被称为内核模式 ,对应 80x86的 ring0层,是操作系统的核心部分,设备驱动程序就是运行在该模式下。另一个被称为用户模式 ,对应 80x86的 ring3层,操作系统的用户接口部分(就是我们通常
3、所说的win32 API)以及全部的用户应用程序都运行在该级别。 操作系统对运行在内核模式下的代码是不设防的,所以不管是建设仍是破坏内核模式下的编程都是值得去讨论的。图 1-WIN2000系统的分层结构在物理硬件与系统核心之间有一个硬件抽象层(HardwareAbstractionLayer),它屏蔽了不同平台硬件的差异,向操作系统的上层供应了一套统一的接口。从图中我们仍 可以看到,设备驱动程序(DeviceDriver)是被 I/O治理器 I/OManager包围起来的,即驱动程序与操作系统上层的通信全部都要通过I/O治理器。 这给驱动程序的编写带来了很大的便利,由于许多诸如接收用户的恳求、
4、与用户程序交换数据、内存映射、挂接中断、同步等等麻烦的工作都由I/O治理器代劳了。驱动程序的分类驱动程序并不像全部人想的那样肯定要和硬件打交道,我粗略的把他分为两类:硬驱动和软驱动。 硬驱动就是对硬件直接编程进行掌握,这类驱动通常必需遵守硬件的通信协议,直接对硬件进行端口拜访、中断响应、DMA 传输。它包括:串、并行口,键盘,文件系统, SCSI ,网络等驱动程序。另外一种软驱动了?不需要直接对硬件就行操作。我认为他可以懂得为它是在硬驱动之上的一层更为高级的驱动。我想学习的主要是软驱动。一般来说,设备驱动程序的任务主要有两个:第一,接受来自用户程序的读写恳求,把用户的数据传送给设备,或把从设备
5、接收到的数据传送给用户。其次,轮询设备或处理来自设备的中断恳求,完成数据传输。驱动程序的结构可编辑资料 - - - 欢迎下载精品名师归纳总结学习资料 名师精选 - - - - - - - - - -第 1 页,共 19 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料word 精心总结归纳 - - - - - - - - - - - -在这里,我主要介绍WDM的结构。WDMWindows driver module是什么东西了? 在 Windows9895下面,或许你听得最多的是VXD ,我只知道VXD 是一种驱动程序,和 WDM 差不多的东西。
6、只是由于 Windows2000是 WindowsNT那条线过来的东西,要加上两个主要的新功能:即插即用(Plug and Play)和电源治理( Power Menage),又不能用 Windows9895那一套, 所以就搞出一个叫WDM这么个东西, 来支持 PNP和 PM. 。其实想想,现在的技术名词仍不是一般的多啊!总之wdm大家都叫它windows驱动程序模型 。Windows2000里有叫 即插即用治理器和 IO(此 IO非彼 IO端口)治理器 的两个东西。比如说我在机器上插了一张符合PCI 规范的 PCI 卡。即插即用治理器会发觉 这张卡插在第N 个插槽上, 然后即插即用治理器会说
7、它找到了这样一张卡,它就去找有没有现成的驱动程序,假如没有找到,它会告知我们,我找到了这样一张卡,请你插入这张卡的驱动程序盘。好,我们就把驱动程序盘给它,即插即用治理器会去找驱动程序盘上的 INF文件,找到后它会比较PCI 卡上的标志和INF 文件里的标志是否相同,假如相同,它就会依照INF文件里供应的路径去找驱动程序,找到之后就可以交给IO 治理器, IO治理器会装载这个驱动程序。 IO治理器在做了一些接口的工作后,即 插即用治理器会先安排好相关的资源给PCI 卡,比如说IO端口空间、内存空间和中断向量,然后告知这张卡的驱动程序,我给你安排了这些资源,你看怎么的。假如你没有怎么的或不敢怎么的
8、,那就赶快登记这些资源,以备后用。下面说 IO治理器这个东西。上面我们讲到IO治理器装载这个驱动程序,驱动程 序有一个大门,仍有N 多的小门。 IO治理器先从大门进去(由于IO治理器只找得 到大门, IO治理器是不是很傻,NO ,当然有它的道理,你别问我:IO治理器怎么 找到大门的?驱动程序无非就是一些文件,IO治理器把这么些文件加载到系统中去), 去找一样东西:进小门的的图。我们要在大门进去的房间里放这张的图(驱动程序都是我们造的,我们当然有驱动程序的的图啦)。IO治理器找到了的图,就可以自由进出大小门了。 这些大小门说白了就是函数(不要问我函数是什么东东),小门的的图就是函数的的址。IO治
9、理器知道了这些函数的的址,当然就可以调用这些函数啦。 仍有一个叫IRP的东西,中文名叫IO恳求包。我们这样来懂得它:在用户的应用程序这一端,要和驱动程序对话,它们之间不是简洁的调用函数(至于为什么,我现在也不知道),应用程序和驱动程序之间有IO治理器隔着,应用程序对驱动程序的操作, 第一由 IO治理器处理成一个包,这个包里面有应用程序恳求的操作内容、传送的数据等等一些东西, 然后 IO治理器把这个包扔给驱动程序,驱动程序依照包里的恳求,完成操作,把该回传的数据放进包里,再把包扔仍给IO治理器, IO治理器再把数据返回给应用程序。 这里所说的包,就是IRP 。这里说的只是WDM结构的一部分, 但
10、是有了这一部分学问,其它部分就不难懂了。通过上面的介绍你观察了什么。你可以想象得出驱动程序是什么样子的吗?我是这样想的。驱动程序似乎就是一个函数库,只不过在大门的的方放了一张的图。而这个大门与的图我们见到过吗?似乎有点像dll 文件了。在早些时候我学dll 的时候,我就只会用dll 来存放函数。2005年 9 月 24 日 13:57可编辑资料 - - - 欢迎下载精品名师归纳总结学习资料 名师精选 - - - - - - - - - -第 2 页,共 19 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料word 精心总结归纳 - - - - -
11、 - - - - - - -驱动程序开发 工具篇由于我学习的时候是在win2000下进行的,所以一切以我学习时的配置为准。第一:安装win2000操作系统,我安装是win2000高级服务器版本。其次:安装Vc+6.0,我装的是英文版。第三:安装win2000DDK。通常驱动程序的调试都是用ddk在 cmd中完成的。这部分我临时略过。下面先介绍如何设置 vc+6.0在 Visual Studio 6.0集成环境中开发设备驱动程序的方法。在 Windows上,Windows DDK供应的开发环境是基于命令行的,操作起来极为不便,而 Visual Studio 6.0给我们供应了特别友好易用的集成环
12、境,让我们有如虎添翼之感。那么,能否利用Visual Studio的集成环境来开发驱动程序了?答案是可以的。通过对 Visual Studio集成环境的简洁设置,创建好自己的驱动开发集成环境就可 以了。第一要求系统已安装DDK 和 Visual C+6.0安装时选上全部工具 ,1、接下来需要改造ddkbinsetenv.bat把要求 mstools的有关语句注释掉 如想在命令行环境开发驱动就仍需加入call VC_DIRVC98BinVcvars32.bat,以便能在命令行使用vc 的相关工具。如只想在IDE 环境开发就不必调用Vcvars32.bat,由于相关工具的路径信息可以在vc 环境中
13、设置 .2、创建一个目录DriverEnv(目录名随便), 作为你开发驱动的大本营3、在该目录下创建一个批处理文件MakeDrvr.bat,内容如下:echo offif %1= goto usage if %3= goto usageif not exist %1binsetenv.bat goto usage call %1binsetenv %1 %4%2cd %3build -b -w %5 %6 %7 %8 %9 goto exit:usageecho usage MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked build_
14、optionsecho eg MakeDrvr %DDKROOT% C: %WDMBOOK% free -cef:exit可编辑资料 - - - 欢迎下载精品名师归纳总结学习资料 名师精选 - - - - - - - - - -第 3 页,共 19 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料word 精心总结归纳 - - - - - - - - - - - -该批处理第一对传递的参数作一些检查,然后调用 ddk的 setenv命令设置环境变量,然后转变目录为源程序所在驱动器和目录,并最终调用build, -b保证显示完全的错误信息, -w 保
15、证在屏幕上输出警告,在vc ide里的 output窗口中可以看到这些错误和警告。4. 建立一个空白工程选 File的 new 菜单项 , 然后选 project栏的 makefile,然后输入路径,一路next下去即可 ,visual studio供应两种配置win32 debug和 win32 release.5. 修改这两种配置选 project的 settings菜单项 win32 debug:在 Build Command Line一栏填入MakeDrvr DDK_DIR SOURCE_DRIVE SOURCE_DIR checked build option s在 Rebuild
16、all options一栏填入-nmake /a在 output file一栏填入与sources文件中的 TARGETNAME相同的文件名在 Browse info file name一栏填入 obji386checked与TARGETNAME相同的文件名,见下述).bscwin32 release:在 Build Command Line一栏填入MakeDrvr DDK_DIR SOURCE_DRIVE SOURCE_DIR free build options在 Rebuild all options一栏填入-nmake /a在 output file一栏填入与sources文件中的 T
17、ARGETNAME相同的文件名在 Browse info file name一栏填入 obji386free与 TARGETNAME相同的文件名 .bsc注: DDK_DIR 一般可以写成 %BASEDIR%, build options一般为 -cef即已足够6. 添加源文件到工程可以新建,也可以添加,这和一般的win32开发一样。7. 添加资源文件选 INSERT的 RESOURCE菜单项即可8. 把文件 makefile放入源程序目录,其内容总是# DO NOT EDIT THIS FILE. Edit .sources. if you want to add a new source#
18、 file to this component. This file merely indirects to the re al make file# that is shared by all the driver components of the Windows NT DDK#可编辑资料 - - - 欢迎下载精品名师归纳总结学习资料 名师精选 - - - - - - - - - -第 4 页,共 19 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料word 精心总结归纳 - - - - - - - - - - - -.INCLUDE $NT
19、MAKEENVmakefile.def9. 把文件 Sources放入源程序目录,内容为TARGETNAME=RamDrive/这是要生成的驱动程序.sys文件的名字TARGETPATH=obj /.sys文件所在目录的上层目录,(由于ddk的 bug应手工在 obj目录下创建checked和 free目录,以作为 .sys的最终存放目录TARGETTYPE=DRIVER /驱动程序的类型,一般不变 INCLUDES=$BASEDIRinc /ddk包含文件路径,一般不变 SOURCES=RamDrive.cpp RamDrive.rc /源文件 不要头文件 ,资源文件 BROWSER_INF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 驱动开发学习笔记 驱动 开发 学习 笔记
限制150内