欢迎来到天天文库
浏览记录
ID:56705260
大小:24.00 KB
页数:5页
时间:2020-07-05
《开发usb驱动程序的方法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、开发驱动程序的方法(连载一)开始驱动程序设计 下面的文字是从的帮助中节选出来的,它让我们明 白在开始设计驱动程序应该注意些什么问题,这些都是具有普遍 意义的开发准则。应该支持哪些请求在开始写任何代码之前, 应该首先确定我们的驱动程序应该处理哪些例程。 如果你在设计一个设备驱动程序,你应该支持和其他相同类型 设备的驱动程序相同的和请求代码。 如果你是在设计一个中间层驱动程序,应该首先确认你下层 驱动程序所管理的设备,因为一个高层的驱动程序必须具有低层 驱动程序绝大多数例程入口。高层驱动程序在接到 请求时,在确定自身当前堆栈单元参数有效的前提下 ,设置好
2、中下一个低层驱动程序的堆栈单元,然后再调用 将请求传递给下层驱动程序处理。 一旦决定好了你的驱动程序应该处理哪些,就可以开始 确定驱动程序应该有多少个例程。当然也可以考虑把某些 处理的例程合并为同一例程处理。例如在和 里,对和处理的例程就是同一函数。 对和处理的例程也是同一个函数。 应该有多少个对象? 一个驱动程序必须为它所管理的每个可能成为请求的目标的物理和逻辑设备创建一个命名对象。一些低层的驱动程序还可能要创建一些不确定数目的对象。例如一个硬盘驱动程序必须为每一个物理硬盘创建一个对象,同时还必须为每个物理磁盘上的每个逻辑分区创建一个对象。 一个高层驱动
3、驱动程序必须为它所代表的虚拟设备创建一个 对象,这样更高层的驱动程序才能连接它们的对象到这个驱动程序的对象。另外,一个高层驱动程序通常为它低层驱动 程序所创建的对象创建一系列的虚拟或逻辑对象。 尽管你可以分阶段来设计你的驱动程序,因此一个处在开发阶段的 驱动程序不必一开始就创建出所有它将要处理的所有对象。 但从一开始就确定好你最终要创建的所有对象将有助于设计者所要解决的任何同步问题。另外,确定所要创建的对象还有助于你定义对象的 的内容和数据结构。 开始驱动程序开发 驱动程序的开发是一个从粗到细逐步求精的过程。 的 目录下有一个庞大的样板代码,几乎覆盖了所
4、有类型的设备驱动程序、高层驱动程序和过滤器驱动程序。在开始开发你的驱动程序之前,你应该在这个样板库下面寻找是否有和你所要开发的类似类型的例程。例如我们所开发的驱动程序,虽然对描述得不是很详细,我们还是可以在\目录发现很多和设备有关的驱动程序。下面我们来看开发驱动程序的基本步骤。 最简的驱动程序框架 、 写一个例程,在里面调用创建 一个对象。 、 写一个处理请求的例程的基本框架 (参见 4.4.3描述的一个 例程所要完成的最基本工作。当然写了例程后, 要在例程为初始化例程入口)。如果驱动程序创建了多于一个对象,则必须为 请求写一个例程,该例程通常情况下可以和共用一个例
5、程,参见参见 。 、 编译连接你的驱动程序。 用下面的方法来测试你的驱动程序。 首先按上面介绍的方法安装好驱动程序。 其次我们还得为逻辑设备名称和目标对象名称之间建立 起符号连接,我们在前面已经知道对象名称对用户模式 是不可见的,是不能直接通过来访问的, 只能访问 逻辑设备名称。我们可以通过修改注册表来建立这两种名称之间的符 号连接。运行在\ \ 下建立起符号连接(这种符号连接也可以在驱动程序里调用函数 来创建)。 重新启动系统。 编写一个简单的测试程序调用 函数以刚才你命名的逻辑设备名打开这个设备。如果打
6、开成功,那么你也就成功地写出了一个最简单的驱动程序了。 支持更多的设备请求 例如你的驱动程序可能需要对请求做出响应(完成后可用 函数进行测试)。如果你的驱动程序需要能够手工卸载,那么还必须对做出响应。为你所需要处理写好处理例程,并在里面初始化好这些例 程入口。 一个低层的驱动程序可能需要最起码一个,和 例程,可能需要一个例程,如果设备使用了, 那么可能还需要一个例程。关于这些例程,请参考 相应文档。 对于高层驱动程序可能需要一个或多个例程,最起码 完成检查状态块然后调用的工作。 如果需要,还要对 数据结构和内容做些修改开发驱动程序的方法(连载二
7、) 还有更多其他的对象,例如中断对象、对象、定时器对象等等,但在我们开发的驱动程序中并没有用到,因此在这里不做介绍。 缓冲策略 很明显的,驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。这就就设计到设备的缓冲策略。 读写请求的缓冲策略 前面说到通过设置对象的可以选择控制处理读写请求的缓冲策略。下面对这些缓冲策略分别做一介绍。 、缓冲() 在读写请求的一开始,管理
此文档下载收益归作者所有