1.驱动程序开发环境
开发Win2000下的驱动程序需要至少两台机器,一台用于开发,一台用于调试。
如果驱动程序依赖低层设备,包括高级终端和服务器,则驱动程序必须经过多处理器环境中的调试和测试。
1.1 Free Build 和 Checked Build
测试和调试Win2000下的驱动程序需要Win2000下的free build 和checked build。
l Free build(或者说retail build)是针对最终用户的操作系统。在这种情况下,系统和驱动程序在构造时进行了完全的优化,调试声明不起作用,调试信息从二进制文件中剥离。发布后的系统和驱动程序小而运行速度快,占用更少内存。
l Check build作为开发中的系统和核心模式驱动程序的测试和调试辅助工具,具有溢出错误检测,参数确认,以及free build 中没有的调试信息。在此环境下的系统或者驱动程序能够帮助隔离和追踪驱动程序的问题,例如,不可预知的动作导致内存泄漏,或者导致不适当的设备配置。
尽管check build 提供了额外的保护,但比free build消耗了更多的内存和硬盘空间。由于以下原因系统和驱动程序的运行较慢:
l 运行时包含了符号调试信息。
l 由于参数选择和调试输出(诊断信息)执行了附加路径代码
>新驱动程序开发过程一般包含以下几步:
1. 编写驱动程序代码,应该包含用于调试检验的条件编译标志;
2. 使用操作系统的checked build环境测试与调试指定的驱动程序版本;
3. 使用free build 环境测试与调试驱动程序的发布版本;
4. 在free build 环境下进行驱动程序的执行期调整;
5. 在free build 和check build 环境下进行操作系统和驱动程序的测试与调试;
6. 用free build 进行最终测试和分析
在驱动程序的开发阶段早期,有必要使用Win2000下的checked build 进行调试。在checked build 中附加调试代码可以防止许多驱动程序制造的错误(例如递归自旋锁定)。
执行期调整,最终测试,以及驱动程序检验要在free build 环境下进行。更快的free build 使其可能发觉竞争限制和其他同步问题。
当free build 和Win2000零售版本相同时,最终测试和检验也应该在free build 下进行。
驱动程序一般包含了允许进行free build 和checked build下编译的处理器标志
DBG保留字用于编译时检测何种Win2000版本正在运行,如果Win2000 checked build 正在运行,DBG被置1,如果free build正在运行,DBG将不被定义(当wdm.h或者ntddk.h头文件被包含时置0)。
驱动程序至少应该在一个多处理器和单处理器的环境中进行测试和调试,因为这两种平台都会运行当前Win2000。
1.2调试环境
核心模式的调试需要一台目标机器和一台本地机器。目标机器一般用于运行当前驱动程序或者其他核心模式应用程序,本地机器一般用于运行调试程序。
图1显示了典型的用于调试驱动程序的Win2000 配置。
核心态调试不需要明确组织free build或者checked build。也许调试free 系统会在free 或checked 系统下,或者调试checked系统在free或checked系统下。然而,一般没理由在本地机器上运行慢速的checked build。