CN102819443B - 一种pci硬件应用程序兼容运行的方法和装置 - Google Patents

一种pci硬件应用程序兼容运行的方法和装置 Download PDF

Info

Publication number
CN102819443B
CN102819443B CN201210279665.1A CN201210279665A CN102819443B CN 102819443 B CN102819443 B CN 102819443B CN 201210279665 A CN201210279665 A CN 201210279665A CN 102819443 B CN102819443 B CN 102819443B
Authority
CN
China
Prior art keywords
hardware
pci
application program
list
pci hardware
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.)
Active
Application number
CN201210279665.1A
Other languages
English (en)
Other versions
CN102819443A (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.)
Beijing Runke General Technology Co Ltd
Original Assignee
Beijing Jingwei Hirain Tech Co Ltd
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 Beijing Jingwei Hirain Tech Co Ltd filed Critical Beijing Jingwei Hirain Tech Co Ltd
Priority to CN201210279665.1A priority Critical patent/CN102819443B/zh
Publication of CN102819443A publication Critical patent/CN102819443A/zh
Application granted granted Critical
Publication of CN102819443B publication Critical patent/CN102819443B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供了一种PCI硬件应用程序兼容运行的方法,包括:当对PCI硬件进行操作的应用程序的个数为至少两个时,启动服务程序,应用所述服务程序得到PCI硬件的数据结构列表,并将数据结构列表发布给对PCI硬件进行操作的所有的应用程序,使所述应用程序通过数据结构列表中的目标PCI硬件的信息对目标PCI硬件进行操作。采用本发明的提供的一种PCI硬件应用程序兼容运行的方法和装置,解决了当多个应用程序同时操作PCI硬件时导致的异常,使得各个应用程序能够兼容运行。

Description

一种PCI硬件应用程序兼容运行的方法和装置
技术领域
本发明属于硬件控制领域,尤其涉及一种PCI硬件应用程序兼容运行的方法和装置。
背景技术
PCI(Peripheral Component Interconnection,周边元件扩展接口)硬件应用程序都要基于底层PCI的硬件驱动,在操作系统层次上,所有的硬件资源都会作为一个句柄(Handle,本质上是一个特定的整型数)被识别和使用,由于PCI设备硬件的特殊性,当一个进程占用了这个设备的句柄的时候,其他进程对这个设备的操作(包括扫描、打开等)都将会产生错误,这就是PCI硬件驱动程序的进程独占性。
在实际的工程实践中,往往存在需要使用多个不同应用目的的应用程序同时对不同的PCI设备进行操作或是在不同时对同一PCI设备进行操作的情况。在这种情况下,当第一个程序运行之后,其他所有程序的运行都会出现异常。出现异常的原因是除第一个打开的应用程序外的程序在运行过程中,会对第一程序已经占用的设备硬件资源进行诸如扫描或者打开操作,由于驱动进程的独占性,会导致出错。而深层次的原因是,PCI协议导致PCI设备位于不同的插槽上,其识别过程需要对所有的PCI设备进行扫描和打开、再通过Vendor ID和Device ID(在某些特殊情况下,如多块PCI设备具有相同的Vendor ID和Device ID,还需要对特定寄存器进行读取)的判定来识别设备。归根结底是,应用程序之间没有共享同一份PCI硬件设备数据结构列表,而是要各自独占这份PCI硬件设备数据结构列表,从而导致了异常。
发明内容
有鉴于此,本发明的目的在于提供一种PCI硬件应用程序兼容运行的方法和装置,通过服务程序扫描并获取描述PCI硬件的数据结构列表,然后通过向各个应用程序分发实现共享该列表,各个应用程序能够通过所述可以共享的PCI设备硬件数据结构列表对目标PCI硬件设备进行操作。
一种PCI硬件应用程序兼容运行的方法,所述方法应用于当调用应用程序对PCI硬件进行操作时,包括:
检测当前调用的对PCI硬件进行操作的应用程序的个数;
当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取描述所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的方法,优选的,还包括:
当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述数据结构列表中的每个数据结构包含的成员变量包括:
表征硬件板卡资源信息的句柄Handle;
表征所述硬件板卡的身份信息的ID;
表征所述硬件板卡在PCI插槽上的位置的插槽Slot。
上述的PCI硬件应用程序兼容运行的方法,优选的,当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件包括:
启动预设服务程序,应用所述服务程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述服务程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
上述的PCI硬件应用程序兼容运行的方法,优选的,当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件包括:
启动所述应用程序,应用所述应用程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述应用程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
上述的PCI硬件应用程序兼容运行的方法,优选的,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述将所述数据结构列表发布给对所述PCI硬件进行操作的所有的应用程序包括:
应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作包括:
依据目标PCI硬件的ID信息和Slot信息,应用所述应用程序获得所述数据结构列表中对应的数据结构;
依据所述数据结构中的Handle信息,应用所述应用程序对所述目标PCI硬件进行操作。
一种PCI硬件应用程序兼容运行的装置,所述装置应用于当调用应用程序对PCI硬件进行操作时,包括:
检测器,用于检测当前调用的对PCI硬件进行操作的应用程序的个数;
第一控制器,用于当所述检测器检测得到所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的装置,优选的,还包括:
第二控制器,用于当所述检测器检测得到所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获得所述PCI硬件的数据结构列表,并依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
本发明提供的一种PCI硬件应用程序兼容运行的方法,所述方法应用于当调用应用程序对PCI硬件进行操作时,包括:检测当前调用的对PCI硬件进行操作的应用程序的个数;当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取描述所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。采用本发明的提供的一种PCI硬件应用程序兼容运行的方法,当对PCI硬件进行操作的应用程序的个数为至少两个时,通过服务程序扫描并获取描述PCI硬件的数据结构列表,然后通过向各个应用程序分发实现共享该列表,各个应用程序能够通过所述可以共享的PCI设备硬件数据结构列表对目标PCI硬件设备进行操作,避免应用程序再次扫描导致的异常,使得各个应用程序能够兼容运行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的流程图;
图2是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的第一具体流程图;
图3是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的第二具体流程图;
图4是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的PCI硬件的数据结构;
图5是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的应用程序信息单元的数据结构;
图6是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的第三具体流程图;
图7是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的另一种流程图;
图8是本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的第四具体流程图;
图9是本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的结构示意图;
图10是本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的另一种结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
反射(Reflection)是现代开发语言(如Java和C#)及其相应的运行时库(如JDK和.NET)所支持的一种重要机制。通过反射,可以在运行时获得程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。通过反射即可对每一个类型完全了解。当获得了构造函数的信息时,即使在某一对象的类型在编译时还不知道,也可直接创建该对象。
本发明就是基于反射的上述特点,通过服务程序将PCI硬件的数据结构列表分享给多个应用程序,进而实现多个应用程序对PCI操作的兼容运行。
参见图1,示出了本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的流程图,包括:
步骤S101:检测当前调用的对PCI硬件进行操作的应用程序的个数;
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,多个应用程序和一个应用程序对PCI硬件进行操作的处理方式可以不同,故需要对对PCI硬件进行操作的应用程序的个数进行检测。
步骤S102:当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
实时检测当前调用的对PCI硬件进行操作的应用程序的个数,当对PCI硬件进行操作的应用程序至少为两个时,需要这些应用程序兼容运行,此时启动预设的服务程序,服务程序完成扫描和打开所述PCI硬件的动作,得到PCI硬件的数据结构列表,所述应用程序根据该数据结构列表中的信息得到目标PCI硬件的信息并对目标PCI硬件进行操作。
对所述PCI硬件进行操作的所有的应用程序在同一时刻操作的目标PCI硬件不同,这是由硬件的操作特点决定的,同一时间内对一个硬件只能有一个操作(读或写)。
参见图2示出的第一具体流程图,本步骤可具体包括:
步骤S201:当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
当所述应用程序的个数为至少两个时,启动预设服务程序获取PCI硬件的数据结构列表。
参见图3示出的第二具体流程图,图2中的步骤S201可具体包括:
步骤S301:启动预设服务程序,应用所述服务程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
判断对PCI硬件进行操作的应用程序的个数,当判断结果为对PCI硬件进行操作的应用程序的个数为至少两个时,有多个应用程序对PCI硬件进行操作,需要兼容运行这些应用程序,启动预设的服务程序,所述应用程序通过服务程序获取到可分享的PCI硬件的数据结构列表。
参见图4示出了PCI硬件的数据结构,该数据结构包含的成员变量包括:句柄Handle、身份ID(Identity)和插槽Slot。
每个数据结构列表中包含有多个数据结构,每个数据结构对应一个PCI硬件板卡。
其中,句柄Handle表征硬件板卡资源信息;
在没有打开PCI硬件之前,Handle的数值为Null,在打开之后,其数值为一个整型数,比如十进制的632531或者十六进制的0x9A6D3等。
ID表征所述硬件板卡的身份信息;
所述ID内部包括两个数值:一个是Vendor ID,代表了该板卡的厂商的ID,一个是Device ID,代表了该板卡的类型ID。
实际操作中,一台电脑上的设备中,上述两个ID数值一般不同,应用程序通过这两个ID数值确认某一板卡是否是想要操作的目标PCI硬件板卡。
插槽Slot表征所述硬件板卡在PCI插槽上的物理位置。
插槽表示的是该板卡位于哪个插槽上,即板卡在插槽的具体位置。
Slot本身包括三个变量,其中一个描述了插槽slot,一个描述了总线bus,通过这两个变量就可以准确定位某一块板卡的具体位置。
PCI硬件的物理地址是由Slot所描述的,即该硬件位于哪个插槽上,逻辑地址由Handle决定的,即描述了在操作系统的视角,该PCI硬件应该是第几个设备,应该给其分配哪些内存空间映射等。
扫描(Scan)的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot。
所述服务程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
步骤S302:应用所述服务程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配特定的资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
步骤S202:将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
实际实施中,服务程序是通过一个XML格式的配置文件来管理多个应用程序同时运行。
服务程序的配置文件包含一个列表,列表包含多个应用程序信息单元,每一个应用程序信息单元对应了一个具体的应用程序的相关信息,通过读取这个应用程序信息单元里面的信息,服务程序可以自动生成对这个应用程序的调用入口即公开接口(例如:在服务程序中的一个按钮,点击该按钮可以运行这个应用程序逻辑),并在调用过程中实现对这个应用程序逻辑分发同一份硬件设备资源(PCI硬件的数据结构列表)的工作。
参见图5所示的应用程序信息单元的数据结构,包括4种变量,具体为:
string ExeName,表征应用程序的路径;
string InvokeName,表征应用程序的主界面窗体的类名;
string Description,表征在服务程序中对该应用程序调用入口描述;
bool NeedSetDevices,表征是否需要设置PCI设备列表。
每个应用程序包含有一个公开接口Public void SetDevices(List<PCI_Device>devices)即应用程序的主界面窗体类中的一个公开函数,应用所述服务程序通过反射调用该应用程序的主界面窗体的类名进而调用该公开接口,调用该公开接口实现了分发和共享描述当前所有PCI硬件设备的数据结构列表,调用完成后通过该类型动态生成应用程序界面对象并显示,服务程序通过该公开接口将PCI硬件的数据结构列表发布给该应用程序,同样的所有对PCI硬件进行操作的应用程序均通过各自的公开接口得到服务程序发布的PCI硬件的数据结构列表。
在本发明提供的方法中,多个应用程序同时对PCI硬件进行操作,应用程序不再进行扫描得到描述当前所有PCI硬件的数据结构列表的步骤,而是直接从服务程序处得到描述当前所有PCI硬件设备的数据结构列表。
所有的应用程序获得的是同一个数据结构列表,即,所有的应用程序内部包括的一个PCI硬件列表的变量得到的是相同的内容,指向的是同一个内存空间,实现了所有的应用程序分享同一个描述当前所有PCI硬件设备的数据结构列表,能够分别对其目标PCI硬件进行兼容操作。
服务程序对所述PCI硬件进行扫描并打开后,其对应的数据结构中的Handle变量将获得一个具体的资源号,此时应用系统通过该数据结构中的句柄Handle访问所述PCI硬件板卡,比如,当应用程序调用读写函数前往该Handle代表的设备进行读写操作时,相当于通过操作系统为这个资源号创建的一个通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
实际实施中,当增加新的应用程序时,只需要修改服务程序的配置文件,增加需要同时兼容运行的应用程序对应的应用程序信息单元,则服务程序就会自动生成对要运行的应用程序的调用入口,用户就可以在服务程序上通过该入口运行这些应用程序。
参见图6示出的第三具体流程图,步骤S202中应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作具体包括:
步骤S401:依据目标PCI硬件的ID信息和Slot信息,应用所述应用程序获得所述数据结构列表中对应的数据结构;
在PCI硬件的数据结构列表中包含了全部PCI硬件的信息,在数据结构列表中,每个数据结构对应一个PCI硬件设备,Slot表示目标PCI硬件所在的具体物理位置,应用程序对PCI硬件中的某目标PCI硬件进行操作,应用程序依据目标PCI硬件的ID信息和Slot信息在数据结构列表中得到目标PCI对应的数据结构,该数据结构中包含有句柄Handle,在步骤S302中应用所述服务程序对所述PCI硬件进行打开,操作系统给PCI硬件板卡分配资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
步骤S402:依据所述数据结构中的Handle信息,应用所述应用程序对所述目标PCI硬件进行操作。
应用程序得到目标PCI硬件的信息,该信息中包含有Handle,也是就获得了通往目标PCI硬件的操作通道,此时应用程序就能通过该操作通道访问所述PCI硬件中相应的设备,即对目标PCI硬件设备进行操作。
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。这是因为PCI硬件的读写特性制约的,某一时间点只能有一个应用程序对某个PCI硬件进行操作(包括读操作或是写操作)。
参见图7,示出了本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的另一种流程图,本流程图是在图1的步骤S101之后还包括:
步骤S103:当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
判断对PCI硬件进行操作的应用程序的个数,当判断结果为,对PCI硬件进行操作的应用程序的个数为一个时,启动所述应用程序,该应用程序直接对PCI硬件进行操作。
参见图8示出的第四具体流程图,步骤S103可具体包括:
步骤S501:启动所述应用程序,应用所述应用程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。
所述应用程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
步骤S502:应用所述应用程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
在PCI硬件的数据结构列表中包含了当前全部PCI硬件的信息,应用程序对PCI硬件中的某目标PCI硬件进行操作,在所述PCI硬件的数据结构列表中获取目标PIC硬件的信息,该信息中包含有句柄Handle,对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配特定的资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
步骤S104:依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
当应用程序对所述PCI硬件进行扫描并打开后,操作系统分配给PCI硬件相应的板卡特定的资源号,并创建通道,此时应用系统通过该数据结构中的Handle的访问所述PCI硬件设备,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作的过程与图6所示的第三具体流程图中步骤相同,不再赘述。
由上述可知,本发明提供的一种PCI硬件应用程序兼容运行的方法,包括,检测当前调用的对PCI硬件进行操作的应用程序的个数;当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。当所述应用程序的个数为一个时,启动所述应用程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表;依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。采用本发明的提供的一种PCI硬件应用程序兼容运行的方法,当对PCI硬件进行操作的应用程序的个数为一时,应用程序可直接获取PCI硬件的数据结构列表;当所述个数为至少两个时,服务程序得到PCI硬件的数据结构列表,并将该数据结构列表发布给每个应用程序分享,解决了当多个应用程序同时操作PCI硬件时导致的异常,使得各个应用程序能够兼容运行。
与上述的方法相对应的,本发明实施例中还提供了一种PCI硬件应用程序兼容运行的装置。
参见图9,示出了本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的结构示意图,包括:检测器101和第一控制器102。
其中,所述检测器101用于检测当前调用的对PCI硬件进行操作的应用程序的个数;
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,多个应用程序和一个应用程序对PCI硬件进行操作的处理方式不同,故需要检测器101检测对PCI硬件进行操作的应用程序的个数。
其中,所述第一控制器102用于当所述检测器101检测得到所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
实时检测当前调用的对PCI硬件进行操作的应用程序的个数,当对PCI硬件进行操作的应用程序至少为两个时,需要这些应用程序兼容运行,此时第一控制器102启动预设的服务程序,应用所述服务程序完成扫描和打开所述PCI硬件的动作,得到描述当前所有PCI硬件的数据结构列表,使得所述应用程序根据该数据结构列表中的信息得到目标PCI硬件的信息并对目标PCI硬件进行操作。
PCI硬件的数据结构列表中的每个数据结构包含的成员变量包括:句柄Handle、ID和插槽Slot等。
其中,句柄Handle表征硬件板卡资源信息;
在没有打开PCI硬件之前,Handle的数值为Null,在打开之后,其数值为一个特殊的整型数,比如十进制的632531或者十六进制的0x9A6D3等。
ID表征所述硬件板卡的身份信息;
所述ID内部包括两个数值:一个是Vendor ID,代表了该板卡的厂商的ID,一个是Device ID,代表了该板卡的类型ID。
实际操作中,一台电脑上的设备中,上述两个ID数值一般不同,应用程序通过这两个ID数值确认某一板卡是否是想要操作的目标PCI硬件板卡。
插槽Slot表征所述硬件板卡在PCI插槽上的物理位置。
插槽表示的是该板卡位于哪个插槽上,即板卡在插槽的具体位置。
Slot本身包括三个变量,其中一个描述了插槽slot,一个描述了总线bus,通过这两个变量就可以准确定位某一块板卡的具体位置。
PCI硬件的物理地址是由Slot所描述的,即该硬件位于哪个插槽上,逻辑地址由Handle决定的,即描述了在操作系统的视角,该PCI硬件应该是第几个设备,应该给其分配哪些内存空间映射等。
第一控制器102应用所述服务程序进行扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。
第一控制器102应用所述服务程序进行打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数,其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
第一控制器102得到所述PCI硬件的数据结构列表后,应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
每个应用程序包含有一个公开接口Public void SetDevices(List<PCI_Device>devices)即应用程序的主界面窗体类中的一个公开函数,第一控制器102应用所述服务程序通过反射调用该应用程序的主界面窗体的类名进而调用该公开接口,调用该公开接口实现了分发和共享描述当前所有PCI硬件设备的数据结构列表,调用完成后通过该类型动态生成应用程序界面对象并显示,服务程序通过该公开接口将PCI硬件的数据结构列表发布给该应用程序,同样的所有对PCI硬件进行操作的应用程序均通过各自的公开接口得到服务程序发布的PCI硬件的数据结构列表。
所有的应用程序获得的是同一个数据结构列表,也就是说,所有的应用程序内部包括的一个PCI硬件列表的变量得到的是相同的内容,指向的是同一个内存空间,实现了所有的应用程序分享同一个数据结构列表,能够分别对其目标PCI硬件进行兼容操作。
服务程序对所述PCI硬件进行扫描并打开后,操作系统分配给PCI硬件相应的板卡特定的资源号,并创建通道,此时应用系统通过该数据结构中的句柄Handle访问所述PCI硬件板卡,比如,当应用程序调用读写函数前往该Handle代表的设备进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
参见图10,示出了本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的另一种结构示意图,在图10中还包括:第二控制器103。
所述第二控制器103用于当所述检测器101检测得到所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获得所述描述当前所有PCI硬件的数据结构列表,并依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
当所述检测器101检测得到对PCI硬件进行操作的应用程序的个数为一个时,第二控制器103启动所述应用程序,应用所述应用程序直接对PCI硬件进行操作。
第二控制器103应用所述应用程序进行扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。所述应用程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
第二控制器103应用所述应用程序进行打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
在PCI硬件的数据结构列表中包含了全部PCI硬件的信息,应用程序对PCI硬件中的某目标PCI硬件进行操作,在所述PCI硬件的数据结构列表中获取目标PIC硬件的信息,该信息中包含有句柄Handle,对所述PCI硬件进行打开,操作系统分配给PCI硬件相应的板卡特定的资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
在本发明提供的实施例中,是以PCI硬件为例进行的解释说明,在实际应用中,该硬件应用程序兼容运行的方法和装置也可应用在其他与PCI硬件相类似的硬件领域。
在本发明中提供的一种PCI硬件应用程序兼容运行的方法和装置,是将只有一个应用程序对PCI硬件进行操作和多个应用程序对PCI硬件进行操作的情况分开的,但不限定于此,在实际实施中,也可以将只有一个应用程序对PCI硬件进行操作的情况合并到多个的情况中,只有一个应用程序或多个应用程序对PCI硬件进行操作时,都是先由服务程序扫描获取描述PCI硬件的数据结构列表,再通过反射调用将该数据结构列表发布给应用程序,简化了应用程序。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1.一种PCI硬件应用程序兼容运行的方法,其特征在于,所述方法应用于当调用应用程序对PCI硬件进行操作时,包括:
检测当前调用的对PCI硬件进行操作的应用程序的个数;
当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取描述所述PCI硬件的数据结构列表,并通过反射调用获取所述应用程序的公开接口,通过所述公开接口将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作;其中,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。
2.根据权利要求1所述的PCI硬件应用程序兼容运行的方法,其特征在于,还包括:
当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
3.根据权利要求1或2所述的PCI硬件应用程序兼容运行的方法,其特征在于,所述数据结构列表中的每个数据结构包含的成员变量包括:
表征硬件板卡资源信息的句柄Handle;
表征所述硬件板卡的身份信息的ID;
表征所述硬件板卡在PCI插槽上的位置的插槽Slot。
4.根据权利要求3所述的PCI硬件应用程序兼容运行的方法,其特征在于,当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件包括:
启动预设服务程序,应用所述服务程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述服务程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
5.根据权利要求3所述的PCI硬件应用程序兼容运行的方法,其特征在于,当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件包括:
启动所述应用程序,应用所述应用程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述应用程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
6.根据权利要求3所述的PCI硬件应用程序兼容运行的方法,其特征在于,所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作包括:
依据目标PCI硬件的ID信息和Slot信息,应用所述应用程序获得所述数据结构列表中对应的数据结构;
依据所述数据结构中的Handle信息,应用所述应用程序对所述目标PCI硬件进行操作。
7.一种PCI硬件应用程序兼容运行的装置,其特征在于,所述装置应用于当调用应用程序对PCI硬件进行操作时,包括:
检测器,用于检测当前调用的对PCI硬件进行操作的应用程序的个数;
第一控制器,用于当所述检测器检测得到所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表,并通过反射调用获取所述应用程序的公开接口,通过所述公开接口将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作;其中,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。
8.根据权利要求7所述的PCI硬件应用程序兼容运行的装置,其特征在于,还包括:
第二控制器,用于当所述检测器检测得到所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获得所述PCI硬件的数据结构列表,并依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
CN201210279665.1A 2012-08-07 2012-08-07 一种pci硬件应用程序兼容运行的方法和装置 Active CN102819443B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210279665.1A CN102819443B (zh) 2012-08-07 2012-08-07 一种pci硬件应用程序兼容运行的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210279665.1A CN102819443B (zh) 2012-08-07 2012-08-07 一种pci硬件应用程序兼容运行的方法和装置

Publications (2)

Publication Number Publication Date
CN102819443A CN102819443A (zh) 2012-12-12
CN102819443B true CN102819443B (zh) 2015-07-08

Family

ID=47303568

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210279665.1A Active CN102819443B (zh) 2012-08-07 2012-08-07 一种pci硬件应用程序兼容运行的方法和装置

Country Status (1)

Country Link
CN (1) CN102819443B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107817987B (zh) * 2016-09-13 2021-05-28 腾讯科技(深圳)有限公司 一种硬件配置方法、系统、终端及服务器
CN108205503B (zh) * 2016-12-16 2020-11-06 龙芯中科技术有限公司 硬件驱动兼容方法及终端
CN109542804B (zh) * 2018-11-21 2024-02-09 国网福建省电力有限公司 一种基于pci总线的二次设备硬件板卡自动识别方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706758A (zh) * 2009-10-30 2010-05-12 广西大学 Windows系统下硬件配置相同的多套PCI设备识别方法
CN101957804A (zh) * 2009-07-13 2011-01-26 英业达股份有限公司 远程共享周边元件扩展接口装置的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7631054B2 (en) * 2000-12-07 2009-12-08 International Business Machines Corporation Method and system for generating list of operating systems for a target device
US6820164B2 (en) * 2001-04-17 2004-11-16 International Business Machines Corporation Peripheral component interconnect bus detection in logically partitioned computer system involving authorizing guest operating system to conduct configuration input-output operation with functions of pci devices

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101957804A (zh) * 2009-07-13 2011-01-26 英业达股份有限公司 远程共享周边元件扩展接口装置的方法
CN101706758A (zh) * 2009-10-30 2010-05-12 广西大学 Windows系统下硬件配置相同的多套PCI设备识别方法

Also Published As

Publication number Publication date
CN102819443A (zh) 2012-12-12

Similar Documents

Publication Publication Date Title
US6636901B2 (en) Object-oriented resource lock and entry register
JP5362974B2 (ja) ソフトウェア製品の出荷用仮想化ソフトウェアの使用方法
TWI262443B (en) Method, system and recording medium for automatically configuring data processing system
CN1174307C (zh) 用于自动设备驱动程序配置的方法和系统
CA2319017C (en) Object-oriented global resource conflict resolver
US20150358392A1 (en) Method and system of virtual desktop infrastructure deployment studio
US9184991B2 (en) Method and apparatus for developing service processor solutions
CN110046479B (zh) 一种基于安卓操作系统的链接库文件反调试方法及装置
US10402216B1 (en) Live support integration in a virtual machine based development environment
CN102819443B (zh) 一种pci硬件应用程序兼容运行的方法和装置
US8214825B2 (en) Electronic device and method for installing software
US10761863B2 (en) Mobile application management by run-time insertion of a replacement instrumentation object into a mobile application process
US6141712A (en) Apparatus and method for modeling behavior of expansion boards in a computer system
US8769159B2 (en) Resource reservation for an external device that is not available at startup of a host computer
CN114661375A (zh) 应用集成方法及装置
GB2475787A (en) Accessing remote data or programs via a shell application from a portable memory device running in a virtual machine on a PC
CN104137074A (zh) 多环境计算系统中资源使用的优化
US6161150A (en) System for informing a computer user of a conflict encountered during resource allocation to expansion cards of different types having resource information in different format
CN115145595A (zh) 依赖库的安装方法、装置、服务器、电子设备及存储介质
KR20070061098A (ko) 임베디드 리눅스 커널 및 응용 프로그램의 통합 설정을위한 웹 기반의 개발환경 제공 시스템 및 방법
CN102460386B (zh) 用于在引导过程期间加载文件的方法和装置
CN1493975A (zh) 计算机外部设备的主动配置方法
CN103701496B (zh) 电力线载波设备及其在线升级方法
CN111475226B (zh) 电子装置、微服务调用方法和计算机可读存储介质
EP4343541A1 (en) Peripheral device communication

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: 4 / F, building 1, No.14 Jiuxianqiao Road, Chaoyang District, Beijing 100020

Patentee after: Beijing Jingwei Hengrun Technology Co.,Ltd.

Address before: 100101 Beijing city Chaoyang District Anxiang Beili 11 B block 8 layer

Patentee before: Beijing Jingwei HiRain Technologies Co.,Ltd.

CP03 Change of name, title or address
TR01 Transfer of patent right

Effective date of registration: 20230531

Address after: 100192 5th floor, Zhizhen building, 7 Zhichun Road, Haidian District, Beijing

Patentee after: BEIJING RUNKE GENERAL TECHNOLOGY Co.,Ltd.

Address before: 4 / F, building 1, No.14 Jiuxianqiao Road, Chaoyang District, Beijing 100020

Patentee before: Beijing Jingwei Hengrun Technology Co.,Ltd.

TR01 Transfer of patent right