- 7
- 0
- 约1.27万字
- 约 11页
- 2021-11-18 发布于广东
- 举报
开发驱动程序的过程
编写内核模式的代码于应用程序的代码是不同的,因为驱动程序是操作系统的信任的部分。
它的代码必须遵循特殊的规则,小心的编写。
驱动程序开发策略
像大多数的软件, 驱动程序也使用有组织的开发方法。 这个部分将介绍一些技巧来尽量
减少开发时间。
使用规范的开发方法
一般的,如果编写一个设备驱动程序没有一个开发策略。 而是去匆忙的测试全新的硬件,
往往测试代码会成为驱动程序的主要部分。 也许设备驱动程序是被一些对操作系统不熟悉的
程序员编写的,第一个驱动程序的编写会是一个驱动程序作者全面了解系统构架的旅程。
幸运的是, 疯狂的软件编写的日子过去了。 在复杂的硬件和操作系统的环境下, 想怎么
编写就怎么编写的代码是不会运行的。
下面是一个简短的开发技术 ( 它们中的一些是来自实时设计技术 )列表。
1. 数据流图可以将一个驱动程序分成独立的功能部分。 通过这个图可以容易的看出各个部
分的联系,和数据的流向。
2. 状态机模型是一个描述驱动过程控制流的好的方法, 特别是管理复杂的硬件和软件协议
的驱动程序。在验证状态机的过程中,可能发现驱动程序中的同步问题。
3. 分析期待的数据的重复率或者输入输出的响应将得到一系列定量的时序条件。 对于确定
驱动程序的总性能是非常重要的。
4. 另一个有用的工具是外部事件和驱动程序响应动作的列表。 这个列表应该包括设备的硬
件事件和用户通过 I/O 管理器的软件事件。
使用这些技术分解一个驱动程序成为一个个定义好的功能部分。 有时, 这些意味着分解一个
简单的, 单片的驱动程序成为一些硬件相关的端口驱动程序和硬件无关的类驱动程序。 在任
何时候, 在工程的开始, 分析一个驱动程序的设计所花费的时间多于设计工程它自己, 这样
可以减少调试和维护的时间。
使用渐进的开发方法
一旦最初的分析和设计完成, 就要开始编写代码了。 按照以下的步骤进行可以减少调试的
时间 :
1. 确定驱动程序需要哪些内核模式对象。
2. 确定驱动程序需要哪些上下文环境或者状态信息和这些信息的存储位置。
3.首先编写 DriverEntry 和 Unload 例程,最初不要增加即插即用支持,这样允许通过控制面
板手动的测试驱动程序的装载和卸载。
4. 添加处理 IRP_MJ_CREA TE 和 IRP_MJ_CLOSE 的操作和一些不需要进行设备访问的例
程。然后可以使用一个简单的 WIN32 程序调用 CreateFile 和 CloseHandle 来测试。
5. 添加寻找和分配驱动程序的硬件的代码,还有在驱动程序被卸载后的重新分配硬件的代
码。如果硬件支持即插即用,这一步测试硬件和驱动程序的自动加载能力。
6. 添加处理 IRP_MJ_XXX 函数的派遣例程,最初的例程应该没有使用物理设备,后来新的
代码应该使用简单的 WIN32 程序进行测试, 例如 ReadFile 和 WriteFile 调用, 或者其它支持
的函数。
7. 最后完成 Start I/O 例程, ISR 和 DPC 例程。现在可以使用真实的数据和硬件进行测试。
一个有用的提示 : 当硬件的确切行为是不能肯定的时候,增加一个 DeviceIoControl 函数,
这个例程直接访问设备的寄存器,这时可用一个简单的 WIN32 程序直接控制设备寄存器。
记得在发布最后的驱动程序版本的时候删除这个功能。
使用驱动程序实例
Windows 2000 驱动程序开发包 (DDK) 里面有相当多的驱动程序实例。有许多方法使用者些
代码来使驱动
原创力文档

文档评论(0)