CN1512335A - 基于构件的操作系统动态设备驱动的方法 - Google Patents

基于构件的操作系统动态设备驱动的方法 Download PDF

Info

Publication number
CN1512335A
CN1512335A CNA021594716A CN02159471A CN1512335A CN 1512335 A CN1512335 A CN 1512335A CN A021594716 A CNA021594716 A CN A021594716A CN 02159471 A CN02159471 A CN 02159471A CN 1512335 A CN1512335 A CN 1512335A
Authority
CN
China
Prior art keywords
drive member
member object
interface
equipment
operating system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA021594716A
Other languages
English (en)
Other versions
CN1245685C (zh
Inventor
榕 陈
陈榕
苏翼鹏
杜永文
邓康
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ketai Century Science and Technology Co., Ltd., Shanghai
Original Assignee
KETAI SHIJI SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KETAI SHIJI SCIENCE AND TECHNOLOGY Co Ltd BEIJING filed Critical KETAI SHIJI SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority to CNB021594716A priority Critical patent/CN1245685C/zh
Priority to US10/747,236 priority patent/US20040153580A1/en
Publication of CN1512335A publication Critical patent/CN1512335A/zh
Application granted granted Critical
Publication of CN1245685C publication Critical patent/CN1245685C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

一种基于构件的操作系统动态设备驱动的方法,操作系统通过设备管理器管理所有的设备和驱动构件对象,客户程序通过设备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对象向客户程序提供应用接口。本发明将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存。

Description

基于构件的操作系统动态设备驱动的方法
技术领域
本发明涉及一种基于构件的操作系统动态加载、卸载设备驱动的方法,特别是指一种将驱动程序构件化,并只在应用程序需要使用驱动程序时,才装载驱动程序并创建出驱动构件对象;且在驱动构件对象使用完毕后,就将驱动程序删除并卸载,从而实现合理而有效地使用CPU和内存资源的设备驱动的方法,属于计算机技术领域。
背景技术
设备及其驱动的管理是任何操作系统都必须具备的功能。操作系统通过驱动程序来访问硬件设备,并通过驱动程序的隔离,使操作系统不需要了解具体硬件的访问细节。
同时,设备驱动作为系统访问硬件的接口,其运行模式必须与操作系统的运行有机地结合起来。因而操作系统需要对设备驱动程序的运行进行必要的管理和协调,这些管理功能通常包括:
1)搜集硬件系统中的设备信息。这些设备信息可通过硬件本身的功能检测得到,例如PCI总线上的设备;也可通过手工配置的方式,把设备信息添加到系统中。
2)对系统中的设备进行标识,通过设备标识能够把设备与对应的驱动程序进行匹配。例如:在传统的Unix系统中,通过主设备号和次设备号来标识设备并找到其相应的驱动程序入口。
3)在上层应用需要访问硬件设备时,操作系统负责激活相应的驱动程序,通过驱动程序为上层应用提供硬件访问接口。
4)操作系统协调设备驱动程序的运行,管理共享硬件资源,检测及报告资源冲突,并为设备驱动提供设备信息服务。
5)最后,操作系统还需要为设备驱动程序的开发提供必要的支持手段。
传统的操作系统中的设备管理子系统在完成上述必要的功能服务的同时,通常也都存在以下三个的问题:
第一,传统的操作系统,都没有将驱动程序构件化。驱动程序总是与操作系统绑定在一起,操作系统启动时加载所有的驱动程序,而不管用户是否使用到这个驱动程序;这样既耗费CPU资源,也耗费内存资源。
第二,驱动程序运行在操作系统核内,而传统操作系统中在核内能进行的操作是受限制的。例如:不能访问文件系统,不能访问标准输入、输出设备,不能使用一些在用户态可以使用的许多标准函数及系统调用等。这些限制给驱动程序的开发带来了极大的不便,驱动程序员需要熟悉一大套与应用开发不一样的开发接口及编程约定,编写驱动程序的门槛由此变得很高。
第三,由于受到跨地址空间的约束,传统操作系统中的驱动程序上层接口大多都是以文件接口为基础设计的。驱动程序的开发者无法根据设备特性定义自己的接口方法。
发明内容
本发明的主要目的在于提供一种基于构件的操作系统动态加载、卸载设备驱动的方法,除实现传统操作系统的所完成的常规设备及驱动管理功能外,还将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;而一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存;合理而有效地使用CPU和内存资源。
本发明的目的是这样实现的:
一种基于构件的操作系统设备动态驱动的方法,操作系统通过设备管理器管理所有的设备和驱动构件对象,构件客户程序通过设备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对象向构件客户程序提供应用接口。
上述的设备管理器至少具有:
设备枚举器接口,用于提供系统中所有的设备信息及其状态信息;
设备管理接口,用于提供创建设备驱动构件对象的功能;
该设备枚举器接口和设备管理接口提供给上层应用;
设备信息接口,提供给驱动构件对象,用于驱动构件对象从中获得自己的设备信息。
上述的设备管理器通过系统的设备配置文件和/或设备枚举器接口获取设备信息,并在驱动构件对象初始化时,将相应的设备信息以设备信息接口参数的形式传递给驱动构件对象。
上述的设备管理器收集、管理系统中的所有设备信息,为每一个设备建立相应的设备节点,并使用设备标识和设备号唯一地标识系统中的每一个设备。
上述的驱动构件对象至少具有:
驱动接口,用于驱动构件对象与设备管理器交互;
应用接口,用于应用程序访问驱动构件对象。
上述的驱动构件对象还具有:设备驱动中断服务例程接口,用于提供设备驱动中断服务例程的入口。
设备管理器创建驱动构件对象的具体过程为:
步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动构件对象;
步骤12:从驱动构件对象取设备标识并根据设备识别找到相应的设备节点;
步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备节点;
步骤14:初始化设备的驱动构件对象;
步骤15:返回该驱动构件对象接口。
在创建驱动构件对象的步骤之前还进一步包括:
步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则执行步骤11;
步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享;
步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建失败。
在找到设备节点之后,还进一步检测该设备资源是否与已活动的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。
上述的冲突检测为:在找到与驱动构件对象相应的设备信息后,将当前新创建的驱动构件对象的设备信息与驱动构件对象已被创建的设备信息进行比较,如果占用的设备资源相同或部分相同,则表明发生了冲突,否则则没有冲突。
在初始化设备驱动构件对象之后,还进一步包括:
步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15;
步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告知创建失败;
步骤14C:如果查询成功则安装中断服务程序;执行步骤15。
本发明的方法还进一步包括:当驱动构件对象的引用结束时,该驱动构件对象将自己删除;具体的删除过程至少包括:
步骤21:当驱动构件对象引用结束后,将引用计数值减1
步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构件对象,并执行步骤26;
步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等待一预设的时间后重复执行本步骤;
步骤24:注销该驱动构件对象;
步骤25:删除该驱动构件对象;
步骤26:返回引用计数值。
当驱动构件对象被设定为常驻状态时;对应的常驻驱动构件对象在引用结束时不被删除;其具体的处理过程为:
当常驻驱动构件对象的引用计数值为零时,将该驱动构件对象设置为非激活状态;当下次构件客户再次创建同样的驱动构件对象时,则直接返回已经存在的驱动构件对象的接口,并将该驱动构件对象的状态设置为激活状态。
一种基于构件的操作系统设备动态驱动实现的方法,至少根据如下的方式定义驱动构件:
通过声明驱动构件类,使相应的驱动构件类至少包含设备驱动构件向设备管理器提供的交互接口。
所述的设备驱动构件向设备管理器提供的交互接口至少包括:
获取设备标识的功能,用于返回驱动对象所驱动的设备的标识;使设备管理器与相应的设备节点进行匹配;
驱动对象初始化功能,用于使驱动对象采用传入的设备信息接口参数取得自己的设备信息;
共享功能,用于标识驱动对象是否支持多线程、多进程;
可立即卸载功能,用于在驱动对象将要被卸载时根据任务完成情况决定是否立即退出。
在声明驱动构件类时还进一步使该驱动构件类包含设备驱动中断服务例程的入口;该入口至少由设备管理器自动安装,并在中断发生时被调用。
所述的驱动构件通过如下的方法实现:根据驱动构件的定义,在编译时生成相应驱动构件的源程序框架,并由驱动开发者实现所有相应的功能。
所述的源程序框架中至少包括用户自定义的上层应用接口功能和设备驱动构件向设备管理器提供的交互接口功能。所述的源程序框架中还包括有设备驱动中断服务例程的入口。
本发明除实现了传统操作系统的所完成的常规设备及驱动管理功能外,还将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;而一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存;从而合理而有效地使用了CPU和内存资源;与此同时,运行在操作系统核内的驱动程序不再受操作系统内核的限制,开发驱动构件和开发普通的应用构件在可使用的系统调用及API上没什么区别,因此降低了驱动程序的开发门槛;由于驱动构件不受跨地址空间的约束,可以自定义用户接口,使得驱动程序的开发者可以根据设备特性定义自己的接口方法。
附图说明
图1为本发明总体结构关系原理示意图;
图2为本发明创建驱动构件对象实施例的流程图;
图3为本发明删除驱动构件对象实施例的流程图。
具体实施方式
以下结合附图和具体的实施例对本发明作进一步的详细说明:
本发明使操作系统可以通过设备管理器(DeviceManager),来管理操作系统中所有的设备与相应的驱动构件对象。该操作系统的设备驱动模型以构件化的设备管理器为核心,并基于如下的原则实现:
首先,由设备管理器收集、管理操作系统中的所有的设备信息,并且为每一个设备建立一个设备节点,并使用设备标识与设备号来唯一标识这些设备。
然后,把驱动构件对象作为设备的一个属性,当且仅当相应设备节点的驱动构件对象被创建出来以后后,该设备节点才成为被激活了的设备或活动设备(Actived Device)。
再由设备管理器创建驱动构件对象,并使用设备标识、设备号来匹配设备节点与驱动构件对象。
上述的驱动构件所实现的接口分为两大类:一是系统接口,它是系统定义的标准接口,由操作系统调用;二是上层用户接口,由驱动构件的开发者定义,并由驱动构件对象的客户程序调用。
设备管理器管理驱动构件对象的创建及消亡过程,但不参与驱动构件对象的使用过程。
参见图1,其为构件化的设备管理器、驱动构件对象和构件客户程序之间实现设备驱动的关系示意。其中,驱动构件对象实现了两个标准系统接口:设备驱动接口IDriver及设备驱动中断服务例程接口IDriverISR(可选),这两个接口对上层构件客户程序是不可见的,只能由设备管理器使用,另外,驱动构件对象向客户程序提供应用接口A,可使客户程序调用接口方法。
设备管理器提供设备信息接口IDeviceInfo给驱动构件对象,驱动构件对象可以从该设备信息接口中得到自己的设备信息。
此外,设备管理器还向上层应用提供设备枚举器接口IDeviceEnumerator和设备管理接口IDeviceManager。设备枚举器接口IDeviceEnumerator用于列出系统中所有的设备信息及其状态;构件客户程序使用设备管理接口IDeviceManager中的建立驱动功能(CreateDriver)来创建设备驱动构件对象。
要让驱动构件对象能够运行在正确的设备上,操作系统中的所有设备需要有全局性的唯一标识。本发明使用设备识别符号(DeviceId)和设备号(DeviceNo)来标识设备。
其中,设备识别符号为字符串形式,用它可以将不同种类的设备区分开;例如:串行口的设备识别符号是“COM”,IDE控制器的设备识别符号是“IDE”。设备号为数字形式,用以区分系统中的多个相同设备,通常从数值“1”开始编号。例如:第一个串行口的设备号为1,第二个串行口的设备号为2,以此类推。
与普通构件不同的是:驱动构件类的属性栏里必须用相应的关键字,例如“driver”,声明这是一个驱动构件类。使用关键字“driver”,驱动构件对象包含了两个隐含的标准系统接口:设备驱动接口IDriver及设备驱动中断服务例程接口IDriverISR,这意味着驱动构件的编写者必须实现这两个接口。
设备驱动接口IDriver是设备驱动构件向设备管理器提供的交互接口,设备驱动中断服务例程接口IDriverISR是设备驱动中断服务例程的入口。
对不需要中断服务程序的设备驱动而言,可以使用关键字“noisr”声明驱动构件类,这样,编译器在编译设备驱动构件类时就不会把设备驱动中断服务例程接口IDriverISR包含到构件类之中。
设备驱动中断服务例程接口IDriverISR中的中断服务例程功能被作为驱动的中断服务程序入口,由设备管理器自动安装,并在中断发生时被调用。
使用驱动构件的客户端程序可以使用驱动构件类智能指针来实例化一个驱动构件对象。在此之前,可以先指定设备号(缺省值为1)。
参见图2,设备管理器创建驱动构件对象的过程包括:
步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则执行步骤11;
步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享;
步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建失败;
步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动构件对象;
步骤12:读取设备标识并根据设备识别找到相应的设备节点;在找到设备节点之后,还进一步检测该设备资源是否与已活动的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。
步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备节点:
步骤14:初始化设备的驱动构件对象;
步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15;
步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告知创建失败;
步骤14C:如果查询成功则安装中断服务程序;
步骤15:返回该驱动构件对象接口。
与普通构件一样,一旦构件客户不再使用驱动构件对象,并且系统中没有其它引用到驱动构件对象的地方,即驱动构件对象的引用计数变为零时,驱动构件对象把自己从内存中删除。所不同的是,驱动构件对象在删除自己之前,首先会确定该驱动构件对象能否立即被删除,最后并且通知设备管理器,以便设备管理器能够正确地维护和管理设备状态。
参见图3,驱动构件对象的删除包括:
步骤21:当驱动构件对象引用结束后,将引用计数值减1
步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构件对象,并执行步骤26;
步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等待一预设的时间后重复执行本步骤;
步骤24:注销该驱动构件对象;
步骤25:删除该驱动构件对象;
步骤26:返回引用计数值。
在创建驱动构件对象的过程中,设备管理器在找到与驱动构件对象相应的设备信息后,首先会检查该设备占用的资源是否与其它设备冲突。检测的内容包括中断号、I/O地址、内存映像地址以及直接存储器存取(DMA)通道号等。
传统操作系统,如Unix、Windows等的资源冲突检测是静态的,是把设备资源与系统中其它所有的设备资源进行比较,以确定是否冲突。由于本发明操作系统的驱动构件对象可以动态装载和卸载,因此设备管理器确定资源是否冲突的方法也是动态的,即:该方法是把当前的新创建的驱动构件对象的设备信息与其它活动设备(驱动构件对象已经被创建的设备)信息进行比较。
这种动态资源冲突检测的优点在于:一些系统硬件资源可以复用。只要两个设备的驱动构件不会同时启用,就可以使用相同的硬件资源。例如:系统上声卡使用直接存储器存取(DMA)通道1,光驱也使用DMA通道1,但只要不同时使用声卡和光驱,就不会出现资源冲突。
在设备管理器调用设备驱动接口IDriver初始化驱动构件对象时,会传入一个设备信息接口参数。驱动构件对象通过该设备信息接口取得自己的设备相关的信息。
驱动构件开发者比较重要的是设备所占用的硬件资源,如I/O地址、内存地址、DMA通道号等。由于中断服务程序是由设备管理器自动安装,所以驱动构件的实现通常不需要关心中断号。
对有些设备,如硬盘、网卡等,由于它们经常使用,不希望其驱动构件对象频繁地被创建和删除,从而影响操作系统的效率。因此需要一种能够支持常驻型驱动程序开发的机制。本发明的解决办法是:
在定义驱动构件时,声明驱动构件为常驻状态,一旦驱动构件被声明为常驻,该常驻驱动构件对象不会在引用计数变为零时真正删除掉该驱动构件对象。实际上,在常驻驱动构件对象的引用计数变为零时,该驱动构件对象通知设备管理器,设备管理器则将这个驱动构件对象置为非激活状态;在下次构件客户创建同样的驱动构件对象时,设备管理器直接将已经存在的驱动构件对象的接口返回,并将驱动构件对象的状态设置为激活状态。
本发明中,设备管理器通过两种渠道收集设备信息:一是从操作系统标准的设备配置文件读入设备信息;二是通过设备枚举器驱动获取设备信息。得到的设备信息以链表形式存放以便于检索。并在调用驱动构件对象的初始化功能时,将相应的设备信息以设备信息接口参数的形式传递给驱动构件对象。
如上所述,设备管理器通过设备枚举器驱动获取设备信息时,设备枚举器接口列出设备枚举器中的所有设备信息,然后通过如下的功能检测到相应的设备信息:1、取当前设备节点的信息;2、移至下一个设备节点;3、恢复到初始状态。
典型的设备枚举器驱动是各种总线及控制器驱动。例如:周边元件扩展接口(PCI)总线驱动,通过其枚举器接口可以得到PCI总线上自动检测到的所有设备信息。设备管理器在创建新的设备驱动构件对象时,总会检查该驱动构件对象是否支持设备枚举器接口,如果支持,则通过该接口取出枚举器里的所有设备信息。
在本发明的实施例中,驱动构件通过如下的方式实现:
定义一个驱动构件类,该驱动构件类与普通构件不同的是,驱动构件类的必须用相应的关键字(例如:driver)来声明该构件类为一驱动构件类。事实上,该声明用于使驱动构件类包含两个隐含的标准系统接口:设备驱动构件向设备管理器提供的交互接口和设备驱动中断服务例程的入口。
对有些不需要中断服务程序的设备驱动而言,可以使用相应的关键字(例如:noisr)声明驱动构件类不需要中断服务程序,这样,在编译该设备驱动构件类时就不会将设备驱动中断服务例程的入口包含到构件类之中。
在上述定义的驱动构件类中至少应包括获取设备标识、初始化、对象共享以及可立即卸载等功能;其中:获取设备标识功能用于返回驱动对象所驱动的设备的标识,设备管理器用它与相应的设备节点进行匹配;初始化是驱动对象被创建后调用的第一个功能,用于驱动对象的初始化;驱动对象可通过传入的设备信息接口参数取得自己的设备信息;共享功能用于标识驱动对象是否支持多线程或多进程;可立即卸载功能在驱动对象将要卸载时被调用,这实际上是给驱动对象一个选择机会,以根据任务完成情况决定是否立即退出。
设备驱动中断服务例程的入口中包含有中断服务例程功能,其被作为驱动的中断服务程序入口,由设备管理器自动安装,并在中断发生时被调用。
在定义了驱动构件后,可以通过运行特定的编译工具生成驱动构件的源程序框架。生成的源程序框架中,除了包括用户自定义的上层应用接口功能外,还包括上述的设备驱动构件向设备管理器提供的交互接口和设备驱动中断服务例程的入口(如果用户没有指定“noisr”属性的话)接口中的所有功能。驱动开发者可按指定的语义实现所有这些功能。
设备管理器调用上述的初始化功能初始化驱动对象时,会传入一个设备信息(IdeviceInfo)接口参数。驱动对象通过IDeviceInfo可以取得自己的设备相关信息。其中对驱动构件开发者比较重要的是:设备所占用的硬件资源,如I/O地址、内存地址、DMA通道号等。由于中断服务程序可由设备管理器自动安装,所以驱动构件的实现通常不需要关心中断号。
最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

Claims (19)

1、一种基于构件的操作系统设备动态驱动的方法,其特征在于:操作系统通过设备管理器管理所有的设备和驱动构件对象,构件客户程序通过设备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对象向构件客户程序提供应用接口。
2、根据权利要求1所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的设备管理器至少具有:
设备枚举器接口,用于提供系统中所有的设备信息及其状态信息;
设备管理接口,用于提供创建设备驱动构件对象的功能;
该设备枚举器接口和设备管理接口提供给上层应用;
设备信息接口,提供给驱动构件对象,用于驱动构件对象从中获得自己的设备信息。
3、根据权利要求2所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的设备管理器通过系统的设备配置文件和/或设备枚举器接口获取设备信息,并在驱动构件对象初始化时,将相应的设备信息以设备信息接口参数的形式传递给驱动构件对象。
4、根据权利要求1或2或3所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的设备管理器收集、管理系统中的所有设备信息,为每一个设备建立相应的设备节点,并使用设备标识和设备号唯一地标识系统中的每一个设备。
5、根据权利要求1所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的驱动构件对象至少具有:
驱动接口,用于驱动构件对象与设备管理器交互;
应用接口,用于应用程序访问驱动构件对象。
6、根据权利要求5所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的驱动构件对象还具有:设备驱动中断服务例程接口,用于提供设备驱动中断服务例程的入口。
7、根据权利要求1所述的基于构件的操作系统设备动态驱动的方法,其特征在于:设备管理器创建驱动构件对象的具体过程为:
步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动构件对象;
步骤12:从驱动构件对象取设备标识并根据设备识别找到相应的设备节点;
步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备节点;
步骤14:初始化设备的驱动构件对象;
步骤15:返回该驱动构件对象接口。
8、根据权利要求7所述的基于构件的操作系统设备动态驱动的方法,其特征在于:在创建驱动构件对象之前还包括:
步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则执行步骤11;
步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享;
步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建失败。
9、根据权利要求7所述的基于构件的操作系统设备动态驱动的方法,其特征在于:在找到设备节点之后,还进一步检测该设备资源是否与已活动的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。
10、根据权利要求9所述的基于构件的操作系统设备动态驱动的方法,其特征在于:所述的冲突检测为:在找到与驱动构件对象相应的设备信息后,将当前新创建的驱动构件对象的设备信息与驱动构件对象已被创建的设备信息进行比较,如果占用的设备资源相同或部分相同,则表明发生了冲突,否则没有冲突。
11、根据权利要求7所述的基于构件的操作系统设备动态驱动的方法,其特征在于:在初始化设备驱动构件对象之后,还进一步包括:
步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15;
步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告知创建失败;
步骤14C:如果查询成功则安装中断服务程序;执行步骤15。
12、根据权利要求1所述的基于构件的操作系统设备动态驱动的方法,其特征在于:该方法还进一步包括:当驱动构件对象的引用结束时,该驱动构件对象将自己删除;具体的删除过程至少包括:
步骤21:当驱动构件对象引用结束后,将引用计数值减1
步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构件对象,并执行步骤26;
步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等待一预设的时间后重复执行本步骤;
步骤24:注销该驱动构件对象;
步骤25:删除该驱动构件对象;
步骤26:返回引用计数值。
13、根据权利要求1或12所述的基于构件的操作系统设备动态驱动的方法,其特征在于:当驱动构件对象被设定为常驻状态时;对应的常驻驱动构件对象在引用结束时不被删除;其具体的处理过程为:
当常驻驱动构件对象的引用计数值为零时,将该驱动构件对象设置为非激活状态;当下次构件客户再次创建同样的驱动构件对象时,则直接返回已经存在的驱动构件对象的接口,并将该驱动构件对象的状态设置为激活状态。
14、一种基于构件的操作系统设备动态驱动实现的方法,其特征在于:至少根据如下的方式定义驱动构件:
通过声明驱动构件类,使相应的驱动构件类至少包含设备驱动构件向设备管理器提供的交互接口。
15、根据权利要求14所述的基于构件的操作系统设备动态驱动实现的方法,其特征在于:所述的设备驱动构件向设备管理器提供的交互接口至少包括:
获取设备标识的功能,用于返回驱动对象所驱动的设备的标识;使设备管理器与相应的设备节点进行匹配;
驱动对象初始化功能,用于使驱动对象采用传入的设备信息接口参数取得自己的设备信息;
共享功能,用于标识驱动对象是否支持多线程、多进程;
可立即卸载功能,用于在驱动对象将要被卸载时根据任务完成情况决定是否立即退出。
16、根据权利要求14所述的基于构件的操作系统设备动态驱动实现的方法,其特征在于:在声明驱动构件类时还进一步使该驱动构件类包含设备驱动中断服务例程的入口;该入口至少由设备管理器自动安装,并在中断发生时被调用。
17、根据权利要求14或16所述的基于构件的操作系统设备动态驱动实现的方法,其特征在于:所述的驱动构件通过如下的方法实现:根据驱动构件的定义,在编译时生成相应驱动构件的源程序框架,并由驱动开发者实现所有相应的功能。
18、根据权利要求17所述的基于构件的操作系统设备动态驱动实现的方法,其特征在于:所述的源程序框架中至少包括用户自定义的上层应用接口功能和设备驱动构件向设备管理器提供的交互接口功能。
19、根据权利要求18所述的基于构件的操作系统设备动态驱动实现的方法,其特征在于:所述的源程序框架中还进一步包括设备驱动中断服务例程的入口。
CNB021594716A 2002-12-31 2002-12-31 基于构件的操作系统动态设备驱动的方法 Expired - Fee Related CN1245685C (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CNB021594716A CN1245685C (zh) 2002-12-31 2002-12-31 基于构件的操作系统动态设备驱动的方法
US10/747,236 US20040153580A1 (en) 2002-12-31 2003-12-30 Component based operation system dynamic device drive method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB021594716A CN1245685C (zh) 2002-12-31 2002-12-31 基于构件的操作系统动态设备驱动的方法

Publications (2)

Publication Number Publication Date
CN1512335A true CN1512335A (zh) 2004-07-14
CN1245685C CN1245685C (zh) 2006-03-15

Family

ID=32739364

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021594716A Expired - Fee Related CN1245685C (zh) 2002-12-31 2002-12-31 基于构件的操作系统动态设备驱动的方法

Country Status (2)

Country Link
US (1) US20040153580A1 (zh)
CN (1) CN1245685C (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739267A (zh) * 2008-11-27 2010-06-16 英业达股份有限公司 外围装置初始化方法及计算机系统
CN101478832B (zh) * 2009-01-22 2012-07-25 中兴通讯股份有限公司 一种移动终端、设备管理客户端及其实现方法
CN102999353A (zh) * 2012-11-15 2013-03-27 青岛海信宽带多媒体技术有限公司 创建设备节点的方法及装置
CN103425540A (zh) * 2012-05-18 2013-12-04 中兴通讯股份有限公司 Mac系统驱动管理方法和装置
CN103677921A (zh) * 2013-12-13 2014-03-26 Tcl康钛汽车信息服务(深圳)有限公司 一种Android系统兼容wifi芯片的方法及系统
CN104102512A (zh) * 2014-07-17 2014-10-15 哈尔滨工业大学 基于外部中断的嵌入式平台io设备动态识别系统及该系统的io设备动态识别方法
CN105657464A (zh) * 2016-01-28 2016-06-08 四川长虹电器股份有限公司 一种usb重复节点的屏蔽方法
CN107506212A (zh) * 2017-08-28 2017-12-22 北京翼辉信息技术有限公司 一种在实时操作系统上动态加载声卡驱动的方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729083B (zh) 2014-04-30 2021-02-12 华为技术有限公司 一种加载驱动程序的方法及嵌入式设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6209041B1 (en) * 1997-04-04 2001-03-27 Microsoft Corporation Method and computer program product for reducing inter-buffer data transfers between separate processing components
US6016515A (en) * 1997-04-04 2000-01-18 Microsoft Corporation Method, computer program product, and data structure for validating creation of and routing messages to file object
US6643712B1 (en) * 1997-04-04 2003-11-04 Microsoft Corporation Validating the creation of and routing of messages to file objects
US6205492B1 (en) * 1997-04-04 2001-03-20 Microsoft Corporation Method and computer program product for interconnecting software drivers in kernel mode
US7181382B2 (en) * 2003-05-08 2007-02-20 Microsoft Corporation System and method for testing, simulating, and controlling computer software and hardware

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739267A (zh) * 2008-11-27 2010-06-16 英业达股份有限公司 外围装置初始化方法及计算机系统
CN101478832B (zh) * 2009-01-22 2012-07-25 中兴通讯股份有限公司 一种移动终端、设备管理客户端及其实现方法
CN103425540A (zh) * 2012-05-18 2013-12-04 中兴通讯股份有限公司 Mac系统驱动管理方法和装置
CN102999353B (zh) * 2012-11-15 2016-02-03 青岛海信宽带多媒体技术有限公司 创建设备节点的方法及装置
CN102999353A (zh) * 2012-11-15 2013-03-27 青岛海信宽带多媒体技术有限公司 创建设备节点的方法及装置
CN105573809A (zh) * 2012-11-15 2016-05-11 青岛海信宽带多媒体技术有限公司 创建设备节点的方法及装置
CN105573809B (zh) * 2012-11-15 2019-05-24 青岛海信宽带多媒体技术有限公司 创建设备节点的方法及装置
CN103677921A (zh) * 2013-12-13 2014-03-26 Tcl康钛汽车信息服务(深圳)有限公司 一种Android系统兼容wifi芯片的方法及系统
CN103677921B (zh) * 2013-12-13 2017-02-15 福尔达车联网(深圳)有限公司 一种Android系统兼容wifi芯片的方法及系统
CN104102512A (zh) * 2014-07-17 2014-10-15 哈尔滨工业大学 基于外部中断的嵌入式平台io设备动态识别系统及该系统的io设备动态识别方法
CN104102512B (zh) * 2014-07-17 2017-04-26 哈尔滨工业大学 基于外部中断的嵌入式平台io设备动态识别系统及该系统的io设备动态识别方法
CN105657464A (zh) * 2016-01-28 2016-06-08 四川长虹电器股份有限公司 一种usb重复节点的屏蔽方法
CN105657464B (zh) * 2016-01-28 2018-12-07 四川长虹电器股份有限公司 一种usb重复节点的屏蔽方法
CN107506212A (zh) * 2017-08-28 2017-12-22 北京翼辉信息技术有限公司 一种在实时操作系统上动态加载声卡驱动的方法
CN107506212B (zh) * 2017-08-28 2021-08-17 北京翼辉信息技术有限公司 一种在实时操作系统上动态加载声卡驱动的方法

Also Published As

Publication number Publication date
US20040153580A1 (en) 2004-08-05
CN1245685C (zh) 2006-03-15

Similar Documents

Publication Publication Date Title
CN1313923C (zh) 软件分发方法与系统
CN100339830C (zh) 一种更新软件的方法
CN1930553A (zh) 访问逻辑分区中的存储器
CN1959640A (zh) 在软件包管理系统将用户进程表示为软件包的系统和方法
CN1534461A (zh) 用于动态增加软件部件以便扩展系统过程功能的系统结构和相关方法
CN1567301A (zh) 访问数据库的方法及装置
CN1858704A (zh) 升级程序的方法
CN101042645A (zh) 统一软件开发环境的方法、设备及系统
CN1298503A (zh) 分布式系统中的动态查找服务
CN1737779A (zh) 一种扩展外设的方法及系统
CN101034990A (zh) 权限管理方法及装置
CN1710535A (zh) 一种gis应用系统及其开发方法
CN1609789A (zh) 模块化对象串行化体系结构
CN1866283A (zh) 实现规则系统触发的系统及方法
CN1924812A (zh) 用于i/o适配器的方法和装置
CN1245685C (zh) 基于构件的操作系统动态设备驱动的方法
CN1140500A (zh) 分布式数据库系统
CN1993676A (zh) 发现数据处理系统内的硬件的方法和设备
CN1658159A (zh) 可配置和可动态更改的对象模型
CN1848111A (zh) 用于内存数据库的一种数据操作接口的实现方法
CN1487391A (zh) 可访问性系统事件机构和方法
CN1889048A (zh) 组件的实现方法以及系统
CN1949176A (zh) 用于管理试探特性的方法和系统
CN1848083A (zh) 一般软件要求分析器
CN101046745A (zh) 控制界面上控件之间关系的方法、装置及控件显示系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: SHANGHAI KETAI SHIJI TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: KETAI SHIJI SCIENCE AND TECHNOLOGY CO., LTD., BEIJING

Effective date: 20050527

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20050527

Address after: 201203 Shanghai city Pudong New Area Jing Road No. 498 building 17 layer 2

Applicant after: Ketai Century Science and Technology Co., Ltd., Shanghai

Address before: 100176, No. 6, No. 618, block B, Pioneer Building, Tsinghua Science Park, Beijing, Haidian District

Applicant before: Ketai Shiji Science and Technology Co., Ltd., Beijing

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060315

Termination date: 20151231

EXPY Termination of patent right or utility model