欢迎来到天天文库
浏览记录
ID:35327723
大小:796.50 KB
页数:197页
时间:2019-03-23
《驱动程序编写者指南》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第一卷驱动程序编写者指南第1章驱动程序开发环境第2章测试驱动程序VI第1章驱动程序开发环境为Microsoft®Windows®2000开发驱动程序至少需要两台机器:一台用于开发,一台用于调试。如果驱动程序依赖于基本设备,包括高端工作站和服务器,驱动程序也可在一台多处理器计算机上调试和测试。本章讨论如下主题:n1.1自由构建(FreeBuild)和检查构建(CheckedBuild)n1.2调试环境1.1自由构建和检查构建微软的Windows2000驱动程序的测试和调试需要Windows®2000的自由构建和检查构建。n自由构建(或零星构建)是操作系统的终端用户版本,系统和驱动程序以最优化方式
2、构建,不可用调试断言,且调试信息已从二进制码中去除。自由系统和驱动程序更小更快,对内存的需求更小。n检查构建用于操作系统和内核模式驱动程序的测试和调试,检查构建包括意外错误检查、参数检查和在自由构建中不可用的调试信息。一个检查的系统或驱动程序能帮助区分和记录驱动程序的某些问题,如内存泄漏或不当的设备配置,这些问题将导致不可预测的后果。尽管检查构建提供额外的保护,但它比自由构建消耗更多的内存和硬盘空间,且由于下列原因,系统和驱动程序运行得更慢。n可执行程序含有符号调试信息。n由于参数检查和调试输出,执行了附加的代码(诊断信息)。新的驱动程序开发通常包括以下步骤:1.编写驱动程序代码,应包括条件编
3、译标记的调试检查。2.测试和调试基于操作系统的检查构建的驱动程序的检查构建。3.测试和调试基于自由构建的驱动程序的自由构建。4.基于自由构建的驱动程序的调整。5.使用了检查构建和自由构建的驱动程序和操作系统附加的测试和调试。6.使用了自由构建的最终的测试和检查。在驱动程序开发的早期,需要Windows2000检查构建来调试驱动程序,检查构建的附加调试代码保护了驱动程序可能导致的许多错误(比如复发的自旋锁)。执行调整、最终测试和检查驱动程序应该基于自由构建而完成,自由构建的速度越快越有可能发现竞争条件和其他同步性的问题。由于自由构建与Windows2000的零星版本相同,最终测试和检查也应该基于
4、自由构建而完成。驱动程序代码通常包括预处理器符号,该符号允许被编译成自由和检查构建。DBG标记是一个保留的符号,可用它来决定编译时Windows2000的什么构建在运行,如果Windows2000检查构建运行,设置DBG为1,如果自由构建运行,不定义DBGVI(或设置为0,如果或者包括头文件wdm.h,或者包括ntddk.h)。驱动程序也应该在至少一个多处理器平台和至少一个单处理器平台上测试和调试;且这两个平台应该运行Windows2000的当前版本。1.1调试环境内核模式调试需要一个目标机和一个主机,目标机用来运行驱动程序或另一内核模式的应用程序,主机运行调试程序。图1.1显示使用调试驱动程
5、序的典型Windows2000设置。内核调试不需要自由或检查构建的特别结合,从一自由或检查系统调试一自由系统或检查系统是可行的。然而,总体上说,主机没有理由运行较慢的检查构建。图1.1典型的Windows2000调试设置参看在线DDK的DebuggingDrivers和微软的调试程序使用文献来获得更多细节。VI第1章检查驱动程序在Windows2000上,DriverVerifier是新的可用工具,它执行几项测试和调试内核模式驱动程序的任务。1.1DriverVerifierDriverVerifier是一可帮助监视一个或多个内核模式驱动程序以证实他们没有非法函数调用或引起系统讹误的工具,Dr
6、iverVerifier在目标驱动程序上执行广泛的测试和检查任务。例如,如果驱动程序以非正当的IRQL使用了内存,不正当地调用或释放自旋锁和内存分配,或者释放内存池时没有首先删除任何定时器,DriverVerifier将发布合适的错误检查。当未装载驱动程序时,DriverVerifier检查确信驱动程序已经正确地清理了队列、线程和其他项目。此外,DriverVerifier能够执行以下任何情况:n从一个特别内存池分配驱动程序内存请求,该过程测试驱动程序是否访问它的内存分配之外的内存,或者在释放它的分配之后访问内存。n通过使内存分页代码无效而给驱动程序极端的内存压力,这个过程揭示了访问分页内存的
7、企图,分页的内存发生在当错误的IRQL或当保留一自旋锁时。n池分配的随机失效或其他的内存请求,该过程测试了驱动程序处理低内存状况的能力。n未装载的驱动程序检查所有的内存分配,以确信驱动程序没有漏掉内存。n从一特别池分配驱动程序的IRP,监视驱动程序I/O以处理其他不一致的行为。这些能力可以分别激活或禁止,此外,DriverVerifier可同时用于任何数目的驱动程序。下面的部分解释了驱动程序的工作
此文档下载收益归作者所有