- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
驱动程序编写者指南
第1章 驱动程序开发环境
第2章 测试驱动程序
驱动程序开发环境
为Microsoft? Windows? 2000开发驱动程序至少需要两台机器:一台用于开发,一台用于调试。
如果驱动程序依赖于基本设备,包括高端工作站和服务器,驱动程序也可在一台多处理器计算机上调试和测试。
本章讨论如下主题:
1.1 自由构建(Free Build)和检查构建(Checked Build)
1.2 调试环境
自由构建和检查构建
微软的Windows2000驱动程序的测试和调试需要Windows? 2000的自由构建和检查构建。
自由构建(或零星构建)是操作系统的终端用户版本,系统和驱动程序以最优化方式构建,不可用调试断言,且调试信息已从二进制码中去除。自由系统和驱动程序更小更快,对内存的需求更小。
检查构建用于操作系统和内核模式驱动程序的测试和调试,检查构建包括意外错误检查、参数检查和在自由构建中不可用的调试信息。一个检查的系统或驱动程序能帮助区分和记录驱动程序的某些问题,如内存泄漏或不当的设备配置,这些问题将导致不可预测的后果。
尽管检查构建提供额外的保护,但它比自由构建消耗更多的内存和硬盘空间,且由于下列原因,系统和驱动程序运行得更慢。
可执行程序含有符号调试信息。
由于参数检查和调试输出,执行了附加的代码(诊断信息)。
新的驱动程序开发通常包括以下步骤:
编写驱动程序代码,应包括条件编译标记的调试检查。
测试和调试基于操作系统的检查构建的驱动程序的检查构建。
测试和调试基于自由构建的驱动程序的自由构建。
基于自由构建的驱动程序的调整。
使用了检查构建和自由构建的驱动程序和操作系统附加的测试和调试。
使用了自由构建的最终的测试和检查。
在驱动程序开发的早期,需要Windows2000检查构建来调试驱动程序,检查构建的附加调试代码保护了驱动程序可能导致的许多错误(比如复发的自旋锁)。
执行调整、最终测试和检查驱动程序应该基于自由构建而完成,自由构建的速度越快越有可能发现竞争条件和其他同步性的问题。
由于自由构建与Windows2000的零星版本相同,最终测试和检查也应该基于自由构建而完成。
驱动程序代码通常包括预处理器符号,该符号允许被编译成自由和检查构建。
DBG标记是一个保留的符号,可用它来决定编译时Windows2000的什么构建在运行,如果Windows2000检查构建运行,设置DBG为1,如果自由构建运行,不定义DBG(或设置为0,如果或者包括头文件wdm.h ,或者包括ntddk.h)。
驱动程序也应该在至少一个多处理器平台和至少一个单处理器平台上测试和调试;且这两个平台应该运行Windows2000的当前版本。
调试环境
内核模式调试需要一个目标机和一个主机,目标机用来运行驱动程序或另一内核模式的应用程序,主机运行调试程序。
图1.1 显示使用调试驱动程序的典型Windows2000设置。内核调试不需要自由或检查构建的特别结合,从一自由或检查系统调试一自由系统或检查系统是可行的。然而,总体上说,主机没有理由运行较慢的检查构建。
图1.1典型的Windows2000调试设置
参看在线DDK的Debugging Drivers和微软的调试程序使用文献来获得更多细节。
检查驱动程序
在Windows2000上,Driver Verifier是新的可用工具,它执行几项测试和调试内核模式驱动程序的任务。
Driver Verifier
Driver Verifier是一可帮助监视一个或多个内核模式驱动程序以证实他们没有非法函数调用或引起系统讹误的工具,Driver Verifier在目标驱动程序上执行广泛的测试和检查任务。例如,如果驱动程序以非正当的IRQL使用了内存,不正当地调用或释放自旋锁和内存分配,或者释放内存池时没有首先删除任何定时器,Driver Verifier将发布合适的错误检查。
当未装载驱动程序时,Driver Verifier检查确信驱动程序已经正确地清理了队列、线程和其他项目。
此外,Driver Verifier能够执行以下任何情况:
从一个特别内存池分配驱动程序内存请求,该过程测试驱动程序是否访问它的内存分配之外的内存,或者在释放它的分配之后访问内存。
通过使内存分页代码无效而给驱动程序极端的内存压力,这个过程揭示了访问分页内存的企图,分页的内存发生在当错误的IRQL或当保留一自旋锁时。
池分配的随机失效或其他的内存请求,该过程测试了驱动程序处理低内存状况的能力。
未装载的驱动程序检查所有的内存分配,以确信驱动程序没有漏掉内存。
从一特别池分配驱动程序的IRP,监视驱动程序I/O以处理其他不一致的行为。
这些能力可以分别激活或禁止,此外,Driver Verifier可同时用于任何
文档评论(0)