首页 理论教育 操作系统实现之路:DriverEntry

操作系统实现之路:DriverEntry

时间:2023-10-21 理论教育 版权反馈
【摘要】:DriverEntry是IOManager调用的函数,该函数给设备驱动程序一个机会,用来做一些初始化工作。一般情况下,直接把驱动程序实现的一些对设备操作的功能函数指针赋值给驱动程序对象即可,如:另一项重要的工作就是创建设备对象,可以通过调用IOManager提供的CreateDevice函数来完成。CreateDevice函数由IOManager实现,该函数创建一个设备对象,并使用函数指定的参数对其初始化,然后插入到系统的设备对象链表中。

操作系统实现之路:DriverEntry

DriverEntry是IOManager调用的函数,该函数给设备驱动程序一个机会,用来做一些初始化工作。一般情况下,该函数可以做下列工作。

(1)初始化驱动程序的全局变量。

(2)注册用来对设备进行操作的功能函数。

(3)创建自己管理的设备对象。

一般情况下,直接把驱动程序实现的一些对设备操作的功能函数指针赋值给驱动程序对象(作为该函数的参数传递)即可,如:

另一项重要的工作就是创建设备对象,可以通过调用IOManager提供的CreateDevice函数来完成。一般情况下,设备驱动程序只能创建自己可以管理的对象(创建自己不能管理的设备对象也是可以的,但没有任何意义)。对物理设备的资源(IO端口、中断向量、内存映射范围等)分配,有两种方式:(www.xing528.com)

(1)接受由IOManager传递过来的资源分配方案,把这些资源分配给设备。

(2)如果设备驱动程序管理的设备,系统资源固定(比如对于键盘、显示器、IDE接口硬盘等设备,其资源基本上固定),那么可以不接受IOManager提供的资源分配方案,而自己硬性地给设备分配资源,这种方式下,很有可能出现资源冲突。

在创建设备对象的时候,一个很重要的事情就是指定设备的设备扩展,所谓设备扩展,就是紧跟随设备对象后面的一段存储空间,该空间内存储了与设备相关的一些数据,比如设备的类型、设备块的大小、当前指针位置、设备的尺寸等。设备扩展的大小和具体内容是与特定物理设备相关联的,只有设备驱动程序自己知道,因此需要设备驱动程序来指定。

下面是一个典型的创建设备对象并对其初始化的例子。

CreateDevice函数由IOManager实现,该函数创建一个设备对象(__DEVICE_OBJECT对象),并使用函数指定的参数对其初始化,然后插入到系统的设备对象链表中。设备对象的定义和机制,请参考本章的后续内容。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈