系统的访问方法、装置、电子设备及存储介质与流程

文档序号:30589830发布日期:2022-07-01 19:17阅读:60来源:国知局
系统的访问方法、装置、电子设备及存储介质与流程

1.本发明涉及计算机系统技术领域,尤其涉及一种系统的访问方法、装置、电子设备及存储介质。


背景技术:

2.计算机系统如linux系统,随着系统版本的改变,其内核提供的编程接口和内核符号也在不断变化,为了保证驱动程序适配,内核添加了版本控制机制,使得编译的驱动程序需要和当前内核版本完全匹配才允许被加载使用,及:不同linux版本需要编写相应的驱动程序适配,导致驱动开发的工作量很大。现有技术中,虽然可以将驱动程序中访问内核资源的内核符号定义成指针,在驱动初始化时让这些指针重新指向真实内核符号,但是如果内核符号的定义发生变化而强行绑定符号指针会导致内核崩溃,此外,该方案对内核结构体成员变量的访问无法实现通用。


技术实现要素:

3.针对现有技术中的问题,本发明实施例提供一种系统的访问方法、装置、电子设备及存储介质。
4.具体地,本发明实施例提供了以下技术方案:
5.第一方面,本发明实施例提供了一种驱动适配装置,包括:
6.驱动程序交互接口,用于接收驱动程序发送的访问系统资源的访问请求,并将目标执行结果转发给所述驱动程序,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到所述系统中;
7.驱动适配模块,用于基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,以及将所述系统处理所述目标访问请求的执行结果转换为适配于所述驱动程序的所述目标执行结果;
8.系统交互接口,用于将所述目标访问请求转发至所述系统,并接收所述系统处理所述目标访问请求的所述执行结果。
9.进一步地,所述驱动适配模块,具体用于:
10.根据所述系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过所述目标转换程序实现所述访问请求由所述驱动系统使用的通用编程接口至所述系统的内核提供的编程接口的转换。
11.第二方面,本发明实施例提供了一种系统的访问方法,包括:
12.接收驱动程序发送的访问系统资源的访问请求,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到系统中;
13.基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统;
14.接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配
于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
15.进一步地,在接收驱动程序发送的访问系统资源的访问请求之前,还包括将所述驱动程序加载到所述系统中的步骤,具体包括:
16.判断获知所述驱动程序有效时,将所述驱动程序加载到所述系统并在所述系统的内核空间中布局所述驱动程序的代码区域和数据区域;
17.将所述驱动程序的代码和数据分别加载到所述代码区域和所述数据区域,并将所述驱动程序使用的通用编程接口进行链接适配,以便所述驱动程序通过所述驱动程序使用的通用编程接口访问所述系统资源。
18.进一步地,在将所述驱动程序加载到所述系统中之前,还包括:
19.编译所述驱动程序,得到驱动程序文件,以便向所述系统的内核空间中加载所述驱动程序文件。
20.进一步地,所述基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,包括:
21.根据所述系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过所述目标转换程序实现所述访问请求由所述驱动系统使用的通用编程接口至所述系统的内核提供的编程接口的转换。
22.进一步地,还包括:
23.获得多个系统版本的系统的内核提供的编程接口;
24.基于所述多个系统版本的系统的内核提供的编程接口,生成所述通用编程接口,且所述通用编程接口与所述编程接口之间的转换程序是一一对应的。
25.进一步地,所述系统为linux系统。
26.第三方面,本发明实施例还提供了一种系统的访问装置,包括:
27.驱动加载器,用于将驱动程序加载到所述系统中;
28.适配器,用于接收所述驱动程序发送的访问系统资源的访问请求,并基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统,以及接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
29.第四方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的系统的访问方法的步骤。
30.第五方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述的系统的访问方法的步骤。
31.第六方面,本发明实施例还提供了一种计算机程序产品,所计算机程序产品包括有计算机程序,该计算机程序被处理器执行时实现如第一方面所述的系统的访问方法的步骤。
32.由上面技术方案可知,本发明实施例提供的系统的访问方法、装置、电子设备及存储介质,在使用一套统一的通用编程接口编写一个通用的驱动程序后,可以通过预先设定
的一套适配流程,使得该通用的驱动程序能够加载并适配到不同版本的系统中使用,不需要针对不同版本的系统编写多个适配的驱动程序,由此,降低了驱动程序的开发成本,节约了驱动程序的开发时间。
附图说明
33.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1为本发明一实施例提供的系统的访问方法的流程图;
35.图2为本发明一实施例提供的系统的访问方法的驱动程序加载的流程图;
36.图3为本发明一实施例提供的系统的访问方法的驱动程序访问系统的内核资源的流程图;
37.图4为本发明一实施例提供的系统的访问方法的通信交互示意图;
38.图5为本发明一实施例提供的系统的访问装置的结构框图;
39.图6为本发明一实施例提供的驱动适配装置的结构框图;
40.图7为本发明一实施例提供的电子设备的结构示意图。
具体实施方式
41.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.图1示出了本发明实施例提供的系统的访问方法的流程图。如图1所示,本发明实施例提供的系统的访问方法,包括如下步骤:
43.步骤101:接收驱动程序发送的访问系统资源的访问请求,其中,驱动程序是通过通用编程接口编写的,驱动程序预先加载到系统中。在本发明的一个实施例中,可以通过预先设计好的驱动适配器(简称为适配器)执行步骤101的步骤,其中,驱动适配器是为对驱动程序提供的统一的资源访问接口,同时可处理不同系统版本的差异,使用资源转发的方式保证驱动程序本身是通用的。
44.在本发明的具体示例中,驱动程序是利用预先提供的通用编程接口编写得到的,通用编程接口可以预先定义得到。以linux系统为例,通常来说,不同版本的linux系统,其系统内核提供的编程接口和内核符号存在差异,因此,可以分析整理linux不同版本的编程接口和内核符号的差异,进而,基于linux不同版本的编程接口和内核符号的差异,抽象并定义出一套统一的通用编程接口,这样,可以基于这一套统一的通用编程接口,进行linux系统的驱动程序的编写,即:针对不同版本的linux系统,均可以通过这一套统一的通用编程接口编写的驱动程序进行系统的内核资源的访问。
45.而现有技术中,由于不同版本的linux系统的系统内核提供的编程接口存在差异,需要基于不同版本的linux系统的系统内核提供的编程接口进行驱动程序的编写,当linux
系统的版本很多时,需要编写很多的驱动程序,显然资源和人力成本较高,而发明的实施例中,不需要关注linux系统的版本,只需要通过提供的一套统一的通用编程接口编写一个驱动程序,由此,资源和人力成本得到显著的改善。
46.作为一个具体的示例,驱动程序需要加载到系统中。同样以linux系统为例,现有技术中,由于不同版本的linux系统使用的驱动程序不同,因此,系统内核添加了版本控制机制,使得编译的驱动程序文件需要和当前的系统内核的版本匹配才允许被加载使用,造成了驱动程序开发的工作量和适配工作量很大。而本技术中,区别于现有技术中的加载方式,可以通过一套加载流程将一个驱动程序加载到不同版本的linux系统的系统内核中。
47.具体来说,如图2所示,在接收驱动程序发送的访问系统资源的访问请求之前,包括将所述驱动程序加载到系统中的步骤,具体包括:判断获知所述驱动程序有效时,将所述驱动程序加载到所述系统并在所述系统的内核空间中布局所述驱动程序的代码区域和数据区域;将所述驱动程序的代码和数据分别加载到所述代码区域和所述数据区域,并将所述驱动程序使用的通用编程接口进行链接适配,以便所述驱动程序通过所述驱动程序使用的通用编程接口访问所述系统资源。换言之,加载过程包括几个步骤,其中,步骤1:判断驱动程序文件是否有效,如果无效则拒绝加载,如果有效继续进行下面的流程;步骤2:根据驱动程序文件的格式将所述驱动程序加载到所述系统并在系统内核空间布局驱动程序文件的代码区域和数据区域;步骤3:将驱动程序文件中用到的编程接口链接到适配器上,以便驱动程序文件能够通过适配器调用系统的资源访问请求;步骤4:调用驱动程序文件的初始化函数,以便驱动程序文件开始工作。
48.在上述示例中,驱动程序文件的加载可以通过预先设定的驱动加载器执行。
49.在以上描述中,驱动程序文件是通过对驱动程序编译后得到的,因此,在本发明的一个具体示例中,在将所述驱动程序加载到所述系统中之前,还包括:编译所述驱动程序,得到驱动程序文件,以便向所述系统的内核空间中加载所述驱动程序文件。其中,编译工作可以通过预先设定的驱动编译系统进行,即:驱动编译系统可以将使用通用编程接口编写编写的驱动程序编译成可以被驱动加载器加载的驱动程序文件。
50.步骤102:基于系统的系统版本,将访问请求转换为适配于系统版本的目标访问请求,并将目标访问请求转发至系统。
51.具体来说,根据所述系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过所述目标转换程序实现所述访问请求由所述驱动系统使用的通用编程接口至所述系统的内核提供的编程接口的转换。即:驱动适配器可以根据系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过目标转换程序实现访问请求由驱动系统使用的通用编程接口至系统的内核提供的编程接口的转换。
52.驱动适配器需要预先设计好,具体来说,可预先获得多个系统版本的系统的内核提供的编程接口;然后基于所述多个系统版本的系统的内核提供的编程接口,生成所述通用编程接口,且所述通用编程接口与所述编程接口之间的转换程序是一一对应的,从而得到驱动适配器。以linux系统为例,假设存在5个版本的linux系统,linux系统版本1的内核提供驱动程序的编程接口1、linux系统版本2的内核提供驱动程序的编程接口2、linux系统版本3的内核提供驱动程序的编程接口3、linux系统版本4的内核提供驱动程序的编程接口4、linux系统版本5的内核提供驱动程序的编程接口5。可以收集到这5个版本对应的编程接
口,然后,将这5个版本对应的编程接口分别与通用编程接口建立转换关系,封装为5个转换程序。进而,能够基于系统的系统版本,将访问请求转换为适配于系统版本的目标访问请求,并将目标访问请求转发至系统,例如:检测到的linux系统版本为linux系统版本1,此时,可以调用对应于linux系统版本1的转换程序,实现驱动程序使用的通用编程接口与linux系统版本1的内核提供的编程接口之间的转换,同样地,其它版本的linux系统,只需要调用相应的转换程序即可。
53.步骤103:接收系统处理目标访问请求的执行结果,并将执行结果转换为适配于驱动程序的目标执行结果,将目标执行结果转发给驱动程序。
54.具体来说,如图3所示,驱动程序使用通用驱动请求访问linux内核资源,向适配器提交访问请求;适配器收到请求后,将请求的内核资源转换成当前linux版本可用的资源格式,并调用linux内核的函数,完成请求转发过程;linux内核处理请求并返回资源请求的结果给适配器;适配器将结果转换成通用的驱动程序可识别的资源格式转交给通用的驱动程序,进而,只需要编写一个驱动程序,便可以适配多种版本的linux系统。
55.根据本发明实施例的系统的访问方法,在使用一套统一的通用编程接口编写一个通用的驱动程序后,可以通过预先设定的一套适配流程,使得该通用的驱动程序能够加载并适配到不同版本的系统中使用,不需要针对不同版本的系统编写多个适配的驱动程序,由此,降低了驱动程序的开发成本,节约了驱动程序的开发时间。
56.在以上描述中,驱动适配器、驱动程序、驱动加载器以及linux内核的通信关系如图4所示,即:分析整理linux不同版本差异并抽象出一套统一的驱动开发接口(即:通用编程接口),这样让编写的驱动不再依赖各个linux版本的特有的编程接口;实现一个驱动编译系统,用来生成驱动程序文件;分别在不同linux版本上实现定义的通用编程接口与不同linux版本的特有的编程接口之间的转换关系,实现一个驱动适配器;实现一个驱动加载器,用来加载驱动程序到内核;使用通用编程接口编写驱动程序;使用驱动编译系统将驱动程序编译成驱动程序文件;使用驱动加载器将驱动程序文件加载到linux内核空间,并链接到驱动适配器上,从而可以通过预先设定的一套适配流程,使得该通用的驱动程序能够加载并适配到不同版本的系统中使用,提升驱动程序的开发效率。
57.图5示出了本发明实施例提供的系统的访问装置的结构示意图。如图5所示,本实施例提供的系统的访问装置,包括:驱动加载器510和适配器520,其中:
58.驱动加载器510,用于将驱动程序加载到所述系统中;
59.适配器520,用于接收所述驱动程序发送的访问系统资源的访问请求,并基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统,以及接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
60.基于上述各实施例的内容,在本实施例中,驱动加载器用于在接收驱动程序发送的访问系统资源的访问请求之前,判断获知所述驱动程序有效时,将所述驱动程序加载到所述系统并在所述系统的内核空间中布局所述驱动程序的代码区域和数据区域;将所述驱动程序的代码和数据分别加载到所述代码区域和所述数据区域,并将所述驱动程序使用的通用编程接口进行链接适配,以便所述驱动程序通过所述驱动程序使用的通用编程接口访
问所述系统资源。
61.基于上述各实施例的内容,在本实施例中,还包括:驱动编译器(图5中没有示出),驱动编译器用于在驱动加载器510将所述驱动程序加载到所述系统中之前,编译所述驱动程序,得到驱动程序文件,以便向所述系统的内核空间中加载所述驱动程序文件。
62.基于上述各实施例的内容,在本实施例中,适配器520,用于:根据所述系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过所述目标转换程序实现所述访问请求由所述驱动系统使用的通用编程接口至所述系统的内核提供的编程接口的转换。
63.基于上述各实施例的内容,在本实施例中,适配器520,用于:获得多个系统版本的系统的内核提供的编程接口;基于所述多个系统版本的系统的内核提供的编程接口,生成所述通用编程接口,且所述通用编程接口与所述编程接口之间的转换程序是一一对应的。
64.基于上述各实施例的内容,在本实施例中,所述系统为linux系统。
65.根据本发明实施例的系统的访问装置,在使用一套统一的通用编程接口编写一个通用的驱动程序后,可以通过预先设定的一套适配流程,使得该通用的驱动程序能够加载并适配到不同版本的系统中使用,不需要针对不同版本的系统编写多个适配的驱动程序,由此,降低了驱动程序的开发成本,节约了驱动程序的开发时间。
66.由于本发明实施例提供的系统的访问装置,可以用于执行上述实施例所述的系统的访问方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
67.在本实施例中,需要说明的是,本发明实施例的装置中的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
68.如图6所示,为本发明实施例的驱动适配装置的结构框图。该驱动适配装置,包括:驱动程序交互接口610、驱动适配模块620和系统交互接口630,其中:
69.驱动程序交互接口610,用于接收驱动程序发送的访问系统资源的访问请求,并将目标执行结果转发给所述驱动程序,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到所述系统中;
70.驱动适配模块620,用于基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,以及将所述系统处理所述目标访问请求的执行结果转换为适配于所述驱动程序的所述目标执行结果;
71.系统交互接口630,用于将所述目标访问请求转发至所述系统,并接收所述系统处理所述目标访问请求的所述执行结果。
72.在本发明的一个实施例中,驱动适配模块620,具体用于:根据所述系统版本从预置的一一对应于多个系统版本的转换程序中调用目标转换程序,以通过所述目标转换程序实现所述访问请求由所述驱动系统使用的通用编程接口至所述系统的内核提供的编程接口的转换。
73.在以上实施例中,驱动适配装置的具体功能与上述实施例中的适配器520的功能类似,具体实现过程请参见对适配器520的描述。
74.基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图7,所述电子设备具体包括如下内容:处理器701、存储器702、通信接口703和通信总线704;
75.其中,所述处理器701、存储器702、通信接口703通过所述通信总线704完成相互间的通信;
76.所述处理器701用于调用所述存储器702中的计算机程序,所述处理器执行所述计算机程序时实现上述系统的访问方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:接收驱动程序发送的访问系统资源的访问请求,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到系统中;基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统;接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
77.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
78.基于相同的发明构思,本发明又一实施例提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述系统的访问方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:接收驱动程序发送的访问系统资源的访问请求,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到系统中;基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统;接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
79.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
80.基于相同的发明构思,本发明又一实施例提供了一种计算机程序产品,所计算机程序产品包括有计算机程序,该计算机程序被处理器执行时实现上述系统的访问方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:接收驱动程序发送的访问系统资源的访问请求,其中,所述驱动程序是通过通用编程接口编写的,所述驱动程序预先加载到系统中;基于所述系统的系统版本,将所述访问请求转换为适配于所述系统版本的目标访问请求,并将所述目标访问请求转发至所述系统;接收所述系统处理所述目标访问请求的执行结果,并将所述执行结果转换为适配于所述驱动程序的目标执行结果,将所述目标执行结果转发给所述驱动程序。
81.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
82.此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
83.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
84.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的流量审计方法。
85.此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
86.此外,在本发明中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
87.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1