一种硬件自适应方法和装置转让专利

申请号 : CN202210659514.2

文献号 : CN114756291B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭纳福闫博文

申请人 : 统信软件技术有限公司

摘要 :

本发明实施例公开了一种硬件自适应方法和装置,为了解决非常规配置与常规设备的配置难以兼容的技术问题,方法包括:响应触发获取硬件适配文件接口的操作,从网络服务器获取硬件适配文件;从已获取的硬件适配文件中确定目标硬件适配文件;确定与目标硬件适配文件所对应的待自适应硬件,并获取待自适应硬件的设备信息;将获取到的设备信息与目标硬件适配文件中硬件的设备信息进行匹配;若匹配成功,则从安装包中获取与待自适应硬件相对应的驱动程序,并安装在计算设备的操作系统中。可见,对于特殊型号的硬件设备,匹配到硬件后获取与其对应的硬件适配文件,并根据硬件适配文件对该硬件做特殊操作和配置,解决了非常规配置与主线冲突的问题。

权利要求 :

1.一种硬件自适应方法,在计算设备中执行,所述计算设备与网络服务器通信连接,所述计算设备存储有包括计算设备中部分硬件的驱动程序的安装包和代码模板,所述网络服务器存储有多个硬件适配文件,所述硬件适配文件与待自适应硬件一一对应,所述硬件适配文件包括计算设备中部分硬件的设备信息和硬件将要执行的多个操作,所述方法包括:响应触发获取硬件适配文件接口的操作,从所述网络服务器获取所述硬件适配文件;

从已获取的所述硬件适配文件中确定目标硬件适配文件;

确定与所述目标硬件适配文件所对应的待自适应硬件,并获取所述待自适应硬件的设备信息;

将获取到的设备信息与所述目标硬件适配文件中硬件的设备信息进行匹配;

若匹配成功,则从所述安装包中获取与所述待自适应硬件相对应的驱动程序,并安装在所述计算设备的操作系统中;

控制所述待自适应硬件执行所述目标硬件适配文件的多个操作;

其中,控制所述待自适应硬件执行所述目标硬件适配文件的多个操作的步骤包括:解析所述代码模板的关键字;

确定与所述目标硬件适配文件中各操作相对应的所述关键字;

将与所述目标硬件适配文件的各个操作的目标函数,插入与其对应的所述关键字所在位置处,生成方案代码,所述目标函数中包括验证所述方案代码的合法性的第一函数、执行目标操作的第二函数、验证所述目标操作是否正常执行的第三函数和具有回滚功能的第四函数;

执行所述方案代码,以实现控制所述待自适应硬件执行所述目标硬件适配文件的多个操作;

其中,执行所述方案代码的步骤包括:

执行所述方案代码的第一函数,得到第一返回值;

根据所述第一返回值判定所述方案代码是否合法;

在所述方案代码合法时,执行所述方案代码的第二函数,得到第二返回值;

根据第二返回值判断所述目标操作是否执行完成;

在所述目标操作执行完成时,执行所述方案代码的所述第三函数,得到第三返回值;

根据所述第三返回值检测所述目标操作是否正常执行;

在未正常执行所述方案代码时,确定出错的代码片段;

针对所述出错的代码片段执行所述方案代码的所述第四函数,以回滚所述出错的代码片段。

2.如权利要求1所述的方法,所述方法还包括步骤:将所述方案代码转换为动态连接库,以使得所述计算设备的操作系统中不存在所述方案代码的源代码。

3.如权利要求1或2所述的方法,其中,所述计算设备还存储有所述网络服务器中的部分硬件适配文件,所述方法还包括步骤:获取网络信息;

根据所述网络信息判断是否与所述网络服务器通信连接;

在未与所述网络服务器通信连接时,从本地获取所述硬件适配文件。

4.如权利要求1所述的方法,还包括步骤:

若获取到的设备信息与各所述硬件适配文件中硬件的设备信息未匹配成功,则不安装与所述待自适应硬件相对应的驱动程序。

5.如权利要求1所述的方法,其中,从已获取的所述硬件适配文件中确定目标硬件适配文件的步骤包括:在所述计算设备的用户图形界面显示已获取的所述硬件适配文件;

响应用户选择硬件适配文件的操作,确定所述目标硬件适配文件。

6.如权利要求1所述的方法,其中,所述设备信息包括操作系统信息、桌面管理接口信息、CPU信息、内存信息、磁盘信息、声卡信息、显卡信息、网络信息、相机信息、电源信息、蓝牙信息、外接设备信息、外接设备互连标准信息、USB信息中的一种或多种。

7.一种硬件自适应装置,在计算设备中执行,所述计算设备与网络服务器通信连接,所述计算设备存储有包括计算设备中部分硬件的驱动程序的安装包,所述网络服务器存储有多个硬件适配文件,所述硬件适配文件与待自适应硬件一一对应,所述硬件适配文件包括计算设备中部分硬件的设备信息,所述装置包括:获取模块,适于响应触发获取所述硬件适配文件接口的操作,从所述网络服务器获取所述硬件适配文件;

控制模块,适于从已获取的所述硬件适配文件中确定目标硬件适配文件,还适于确定与所述目标硬件适配文件所对应的待自适应硬件,并获取所述待自适应硬件的设备信息;

安装驱动模块,适于将获取到的设备信息与所述目标硬件适配文件中硬件的设备信息进行匹配,若匹配成功,则从所述安装包中获取与所述待自适应硬件相对应的驱动程序,并安装在所述计算设备的操作系统中;

执行模块,适于控制所述待自适应硬件执行所述目标硬件适配文件的多个操作;

其中,所述执行模块控制所述待自适应硬件执行所述目标硬件适配文件的多个操作的步骤包括:解析代码模板的关键字;

确定与所述目标硬件适配文件中各操作相对应的所述关键字;

将与所述目标硬件适配文件的各个操作的目标函数,插入与其对应的所述关键字所在位置处,生成方案代码,所述目标函数中包括验证所述方案代码的合法性的第一函数、执行目标操作的第二函数、验证所述目标操作是否正常执行的第三函数和具有回滚功能的第四函数;

执行所述方案代码,以实现控制所述待自适应硬件执行所述目标硬件适配文件的多个操作;

其中,所述执行模块执行所述方案代码的步骤包括:执行所述方案代码的第一函数,得到第一返回值;

根据所述第一返回值判定所述方案代码是否合法;

在所述方案代码合法时,执行所述方案代码的第二函数,得到第二返回值;

根据第二返回值判断所述目标操作是否执行完成;

在所述目标操作执行完成时,执行所述方案代码的所述第三函数,得到第三返回值;

根据所述第三返回值检测所述目标操作是否正常执行;

在未正常执行所述方案代码时,确定出错的代码片段;

针对所述出错的代码片段执行所述方案代码的所述第四函数,以回滚所述出错的代码片段。

8.一种计算设备,包括:

至少一个处理器;以及

存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1至6中任一项所述的方法的指令。

9.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1至6中任一项所述的方法。

说明书 :

一种硬件自适应方法和装置

技术领域

[0001] 本发明涉及操作系统安全技术领域,尤其涉及一种强制关闭应用程序的方法、装置、计算设备和可读存储介质。

背景技术

[0002] 硬件设备的驱动程序,也称为驱动程序,是一种可以使计算机和硬件设备之间进行通信的特殊程序,相当于硬件的接口,操作系统需要通过该接口控制硬件设备。硬件自适应,目的是使得计算设备可以正常使用硬件设备,然而通过在操作系统上安装硬件设备对应的驱动程序,计算设备即可正常使用硬件设备。
[0003] 操作系统(例如linux操作系统)的驱动程序是不需要手动安装的,如果是重要的功能(例如),则会将驱动程序直接编译到内核当中,如果是非重要的功能(例如)则会将驱动程序编译为内核模块,需要时由内核调用。对于内核模块,目前的操作系统为了满足对硬件的兼容性,存储了大量不会用到的内核模块,由于内核所占用的内存是不会被换出的,所以链接进内核的内核模块会给整个系统带来一定的性能和内存利用方面的损失。并且由于硬件设备的型号和类型的多样性,有些特殊硬件设备需要做特定的配置和操作才能正常工作,例如配置Bumblebee显卡。然而,这种非常规配置往往与常规设备(例如)难以兼容。
[0004] 因此,期望提供一种硬件自适应方法,以解决非常规配置与常规设备的配置难以兼容、内核中过多内核模块造成内存浪费的问题。

发明内容

[0005] 为此,本发明实施例提供一种硬件自适应方法、装置,以力图解决或至少缓解上面存在的问题。
[0006] 根据本发明实施例的一个方面,提供了一种硬件自适应方法,在计算设备中执行,计算设备与网络服务器通信连接,计算设备存储有包括计算设备中部分硬件的驱动程序的安装包,网络服务器存储有多个硬件适配文件,硬件适配文件与待自适应硬件一一对应,硬件适配文件包括计算设备中部分硬件的设备信息,方法包括:响应触发获取硬件适配文件接口的操作,从网络服务器获取硬件适配文件;从已获取的硬件适配文件中确定目标硬件适配文件;确定与目标硬件适配文件所对应的待自适应硬件,并获取待自适应硬件的设备信息;将获取到的设备信息与目标硬件适配文件中硬件的设备信息进行匹配;若匹配成功,则从安装包中获取与待自适应硬件相对应的驱动程序,并安装在计算设备的操作系统中。
[0007] 可选地,硬件适配文件还包括硬件将要执行的多个操作,本发明提供的硬件自适应方法还包括步骤:控制待自适应硬件执行目标硬件适配文件的多个操作。
[0008] 可选地,每一硬件将要执行的操作对应一个目标函数,计算设备中存储有代码模板,控制待自适应硬件执行所述目标硬件适配文件的多个操作的步骤包括:解析代码模板的关键字;确定与目标硬件适配文件中各操作相对应的关键字;将与目标硬件适配文件的各个操作的目标函数,插入与其对应的关键字所在位置处,生成方案代码;执行方案代码,以实现控制待自适应硬件执行目标硬件适配文件的多个操作。
[0009] 可选地,目标函数中包括验证方案代码的合法性的第一函数、执行目标操作的第二函数、验证目标操作是否正常执行的第三函数和具有回滚功能的第四函数。
[0010] 可选地,执行方案代码的步骤包括:执行方案代码的第一函数,得到第一返回值;根据第一返回值判定方案代码是否合法;在方案代码合法时,执行方案代码的第二函数,得到第二返回值;根据第二返回值判断目标操作是否执行完成;在目标操作执行完成时,执行方案代码的第三函数,得到第三返回值;根据第三返回值检测目标操作是否正常执行;在未正常执行生成代码时,确定出错的代码片段;针对出错的代码片段执行方案代码的第四函数,以回滚出错的代码片段。
[0011] 可选地,本发明提供的硬件自适应方法还包括步骤:将方案代码转换为动态连接库,以使得计算设备的操作系统中不存在方案代码的源代码。
[0012] 可选地,计算设备还存储有网络服务器中的部分硬件适配文件,本发明提供的硬件自适应方法还包括步骤:获取网络信息;根据网络信息判断是否与网络服务器通信连接;在未与网络服务器通信连接时,从本地获取硬件适配文件。
[0013] 可选地,本发明提供的硬件自适应方法还包括步骤:若获取到的设备信息与各硬件适配文件中硬件的设备信息未匹配成功,则不安装与待自适应硬件相对应的驱动程序。
[0014] 可选地,从已获取的硬件适配文件中确定目标硬件适配文件的步骤包括:在计算设备的用户图形界面显示已获取的硬件适配文件;响应用户选择硬件适配文件的操作,确定目标硬件适配文件。
[0015] 可选地,设备信息包括操作系统信息、桌面管理接口信息、CPU信息、内存信息、磁盘信息、声卡信息、显卡信息、网络信息、相机信息、电源信息、蓝牙信息、外接设备信息、外接设备互连标准信息、USB信息中的一种或多种。
[0016] 根据本发明实施例的另一个方面,提供了一种硬件自适应装置,在计算设备中执行,计算设备与网络服务器通信连接,计算设备存储有包括计算设备中部分硬件的驱动程序的安装包,网络服务器存储有多个硬件适配文件,硬件适配文件与待自适应硬件一一对应,硬件适配文件包括计算设备中部分硬件的设备信息,装置包括:获取模块,适于响应触发获取硬件适配文件接口的操作,从网络服务器获取硬件适配文件;控制模块,适于从已获取的硬件适配文件中确定目标硬件适配文件,还适于确定与目标硬件适配文件所对应的待自适应硬件,并获取待自适应硬件的设备信息;安装驱动模块,适于将获取到的设备信息与目标硬件适配文件中硬件的设备信息进行匹配,若匹配成功,则从安装包中获取与待自适应硬件相对应的驱动程序,并安装在计算设备的操作系统中。
[0017] 根据本发明的又一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述方法的指令。
[0018] 根据本发明的另一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的方法。
[0019] 根据本发明实施例的硬件自适应方案,将非必要的驱动程序对应的内核模块编译成安装包,只有当硬件匹配成功才会安装对应的驱动程序对应的内核模块。由于操作系统中只存在必要的驱动程序对应的内核模块,其他内核模块根据实际硬件而选择性安装,所以大大减少操作系统中内核模块的数量,进而减少内核所占用的内存,提高内存资源的利用率。
[0020] 并且,对于特殊型号的硬件设备,匹配到硬件后获取与其对应的硬件适配文件,并根据硬件适配文件对该硬件做特殊操作和配置,解决了非常规配置与主线冲突的问题。
[0021] 上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明实施例的具体实施方式。

附图说明

[0022] 为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
[0023] 图1示出了根据本发明一个实施例的计算设备100的框图;
[0024] 图2示出了根据本发明一个实施例的硬件自适应方法200的流程图;
[0025] 图3示出了根据本发明另一个实施例的硬件自适应方法300的流程图;
[0026] 图4示出了根据本发明一个实施例的执行方案代码的流程图;
[0027] 图5示出了根据本发明一个实施例的硬件自适应装置500的示意图。

具体实施方式

[0028] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0029] 为了解决非常规配置与常规设备的配置难以兼容、内核中过多内核模块造成内存浪费的问题,本发明提供了一种硬件自适应方法,该方法可以实现为应用程序,安装于计算设备100的操作系统中,该方法也可以实现为插件,集成于计算设备100的操作系统中。那么,上述的安装包可以集成在硬件自适应方法所对应的应用程序或插件的安装包中。
[0030] 上述的计算设备100可以实现为服务器,例如应用服务器、Web服务器等;也可以实现为桌面电脑、笔记本电脑、处理器芯片、平板电脑等,但不限于此。图1示出了的计算设备100的物理组件(即,硬件)的框图。在基本配置中,计算设备100包括至少一个处理单元102和系统存储器104。根据一个方面,取决于计算设备的配置和类型,系统存储器104包括但不限于易失性存储(例如,随机存取存储器)、非易失性存储(例如,只读存储器)、闪速存储器、或者这样的存储器的任何组合。根据一个方面,系统存储器104包括操作系统105,操作系统
105集成了本发明提供的硬件自适应功能的应用程序或插件。
[0031] 根据一个方面,操作系统105,例如,适合于控制计算设备100的操作。此外,示例结合图形库、其他操作系统、或任何其他应用程序而被实践,并且不限于任何特定的应用或系统。在图2中通过在虚线108内的那些组件示出了该基本配置。根据一个方面,计算设备100具有额外的特征或功能。例如,根据一个方面,计算设备100包括额外的数据存储设备(可移动的和/或不可移动的),例如磁盘、光盘、或者磁带。这样额外的存储在图1中是由可移动存储设备109和不可移动存储设备110示出的。
[0032] 如在上文中所陈述的,根据一个方面,在系统存储器104中存储了多个程序模块和数据文件。当在处理单元102上执行时,其包括但不限于在图2中所示出的方法200和图3示出的方法300的阶段中的一个或多个阶段。根据一个方面,不限制应用程序的类型,例如应用程序还包括:电子邮件和联系人应用程序、文字处理应用程序、电子表格应用程序、数据库应用程序、幻灯片展示应用程序、绘画或计算机辅助应用程序、网络浏览器应用程序等。
[0033] 根据一个方面,可以在包括分立电子元件的电路、包含逻辑门的封装或集成的电子芯片、利用微处理器的电路、或者在包含电子元件或微处理器的单个芯片上实践示例。例如,可以经由其中在图1中所示出的每个或许多组件可以集成在单个集成电路上的片上系统(SOC)来实践示例。根据一个方面,这样的SOC设备可以包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元、以及各种应用功能,其全部作为单个集成电路而被集成(或“烧”)到芯片基底上。当经由SOC进行操作时,可以经由在单个集成电路(芯片)上与计算设备100的其他组件集成的专用逻辑来对在本文中所描述的功能进行操作。还可以使用能够执行逻辑操作(例如AND、OR和NOT)的其他技术来实践本发明的实施例,所述其他技术包括但不限于机械、光学、流体、和量子技术。另外,可以在通用计算机内或在任何其他任何电路或系统中实践本发明的实施例。
[0034] 根据一个方面,计算设备100还可以具有一个或多个输入设备112,例如键盘、鼠标、笔、语音输入设备、触摸输入设备等。还可以包括输出设备114,例如显示器、扬声器、打印机等。前述设备是示例并且也可以使用其他设备。计算设备100可以包括允许与其他计算设备118,其他计算设备例如网络服务器118‑1,进行通信的一个或多个通信连接116。合适的通信连接116的示例包括但不限于:RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。
[0035] 如在本文中所使用的术语计算机可读介质包括计算机存储介质。计算机存储介质可以包括以任何用于存储信息(例如,计算机可读指示、数据结构、或程序模块)的方法或技术来实现的易失性的和非易失性的、可移动的和不可移动的介质。系统存储器104、可移动存储设备109、和不可移动存储设备110都是计算机存储介质的示例(即,存储器存储)。计算机存储介质可以包括随机存取存储器(RAM) 、只读存储器(ROM) 、电可擦只读存储器(EEPROM)、闪速存储器或其他存储器技术、CD‑ROM、数字通用盘(DVD)或其他光存储、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或者可用于存储信息并且可以由计算机设备100访问的任何其他制品。根据一个方面,任何这样的计算机存储介质都可以是计算设备100的一部分。计算机存储介质不包括载波或其他经传播的数据信号。
[0036] 根据一个方面,通信介质是由计算机可读指令、数据结构、程序模块、或者经调制的数据信号(例如,载波或其他传输机制)中的其他数据实施的,并且包括任何信息传递介质。根据一个方面,术语“经调制的数据信号”描述了具有一个或多个特征集或者以将信息编码在信号中的方式改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频(RF)、红外线的、以及其他无线介质之类的无线介质。
[0037] 在一些实施方式中,为了减少内核中安装大量的非重要的功能所对应的驱动程序,从而减少内核所占用的内存,本发明中,会预先将非重要功能的驱动程序所对应的内核模块,编译为安装包,并将安装包存储在计算设备100中。
[0038] 上述的网络服务器118‑1中存储有多个硬件适配文件,硬件适配文件为相关人员预先配置的,硬件适配文件与待自适应硬件一一对应。在一些实施方式中,硬件适配文件的格式为json格式,用json格式描述硬件适配文件,相比于直接用编程语言更易于维护。
[0039] 每一硬件适配文件中包括计算设备中部分硬件的设备信息、多个操作和解决方案名称。基于解决方案名称即可确定该适配文件所要解决的问题,根据设备信息可确定为了解决问题而需要适配的设备,多个操作即需要适配的设备所要执行的操作。下面给出一个适配文件的示例:
[0040] {
[0041]     "name": "ui_test_1",
[0042]     "match": {
[0043]         "os": {
[0044]             "kernel_version": "5.7.1<=this<=5.10.3",
[0045]             "system_name": "UnionTech OS Desktop",
[0046]             "product_type": "Desktop",
[0047]             "major_version": "this>=30",
[0048]             "minor_version": "this<=1040"
[0049]         },
[0050]         "dmi": {
[0051]             "bios_vendor": "HUAWEI",
[0052]             "bios_version": "1.06",
[0053]             "bios_date": "09/29/2020",
[0054]             "board_name": "NBLL‑WXX9‑PCB",
[0055]             "board_serial": "PM13T020BS006366",
[0056]             "board_vendor": "HUAWEI",
[0057]             "product_name": "NBLL‑WXX9",
[0058]             "product_family": "MagicBook",
[0059]             "product_serial": "FPBPM20B26001130",
[0060]             "product_uuid": "7b730e3c‑720c‑461e‑a491‑ca2b8deed0c8",[0061]             "product_version": "M1010"
[0062]         },
[0063]         "cpu":{
[0064]             "name": "AMD Ryzen 5 4500U with Radeon Graphics",
[0065]             "vendor" : "Advanced Micro Devices [AMD]",
[0066]             "width" : "64"
[0067]         },
[0068]         "memory": {
[0069]             "manufacturer": " ",
[0070]             "capacity": "15811144"
[0071]         },
[0072]         "disk": {
[0073]             "name": "nvme0n1",
[0074]             "serial": "202713463002",
[0075]             "model": "WDC PC SN730 SDBPNTY‑512G‑1027",
[0076]             "size": "512110190592",
[0077]             "root_mount": "true"
[0078]         },
[0079]         "sound": {
[0080]             "name": "Advanced Micro Devices, Inc. [AMD/ATI] Device 1637",
[0081]             "vendor_id": "1002",
[0082]             "product_id": "1637",
[0083]             "slot": "pci"
[0084]         },
[0085]         "graphic": {
[0086]             "product": "Renoir",
[0087]             "vendor": "Advanced Micro Devices, Inc. [AMD/ATI]",
[0088]             "driver": "amdgpu"
[0089]         },
[0090]         "network": {
[0091]             "product": "RTL8822CE 802.11ac PCIe Wireless Network Adapter",
[0092]             "vendor": "Realtek Semiconductor Co., Ltd.",
[0093]             "serial": "80:30:49:c8:79:dd"
[0094]         },
[0095]         "camera": {
[0096]             "name": "",
[0097]             "vendor_id": "0408",
[0098]             "product_id": "1040",
[0099]             "slot": "usb"
[0100]         },
[0101]         "battery": {
[0102]             "name": "BAT1",
[0103]             "model": "HB4692Z9ECW‑22T",
[0104]             "manufacturer": "Desay",
[0105]             "capacity_design": "7230000"
[0106]         },
[0107]         "bluetooth": {
[0108]             "name": "",
[0109]             "vendor_id": "1358",
[0110]             "product_id": "0000",
[0111]             "slot": "usb"
[0112]         },
[0113]         "peripheral": {
[0114]             "name": "Power Button",
[0115]             "vendor_id": "0000",
[0116]             "product_id": "0001"
[0117]         },
[0118]         "pci": {
[0119]             "pci_class": "60000",
[0120]             "pci_id": "1022:144D",
[0121]             "pci_subsys_id": "0000:0000",
[0122]             "pci_slot_name": "0000:00:18.5"
[0123]         },
[0124]         "usb": {
[0125]             "dev_type": "usb_interface",
[0126]             "driver": "hub",
[0127]             "product": "1d6b/2/507",
[0128]             "type": "9/0/1",
[0129]             "interface": "9/0/0"
[0130]         }
[0131]     },
[0132]     "action": {
[0133]         "apply": [{
[0134]             {
[0135]                 "type": "cmdline",
[0136]                 "cmd": "需要执行的命令"
[0137]             },
[0138]             {
[0139]                 "type": "grub",
[0140]                 "arg": "参数",
[0141]                 "mode": "add|delete|query|modify"
[0142]             },
[0143]             {
[0144]                 "type": "service",
[0145]                 "server_name": "服务名称",
[0146]                 "enable": false,
[0147]                 "mode": "add|delete|query|modify"
[0148]             },
[0149]             {
[0150]                 "type": "config",
[0151]                 "path": "配置文件绝对路径",
[0152]                 "mode": "add|delete|query|modify",
[0153]                 "config_key": "配置项",
[0154]                 "config_value": "配置值"
[0155]             }
[0156]         ],
[0157]         "check": [
[0158]             {
[0159]                 "type": "cmdline",
[0160]                 "cmd": "需要执行的命令"
[0161]             },
[0162]             {
[0163]                 "type": "grub",
[0164]                 "arg": "参数",
[0165]                 "mode": "add|delete|query|modify"
[0166]             },
[0167]             {
[0168]                 "type": "service",
[0169]                 "server_name": "服务名称",
[0170]                 "enable": false,
[0171]                 "mode": "add|delete|query|modify"
[0172]             },
[0173]             {
[0174]                 "type": "config",
[0175]                 "path": "配置文件绝对路径",
[0176]                 "mode": "add|delete|query|modify",
[0177]                 "config_key": "配置项",
[0178]                 "config_value": "配置值"
[0179]             }
[0180]         ],
[0181]         "rollback": [
[0182]             {
[0183]                 "type": "cmdline",
[0184]                 "cmd": "需要执行的命令"
[0185]             },
[0186]             {
[0187]                 "type": "grub",
[0188]                 "arg": "参数",
[0189]                 "mode": "add|delete|query|modify"
[0190]             },
[0191]             {
[0192]                 "type": "service",
[0193]                 "server_name": "服务名称",
[0194]                 "enable": false,
[0195]                 "mode": "add|delete|query|modify"
[0196]             },
[0197]             {
[0198]                 "type": "config",
[0199]                 "path": "配置文件绝对路径",
[0200]                 "mode": "add|delete|query|modify",
[0201]                 "config_key": "配置项",
[0202]                 "config_value": "配置值"
[0203]             }
[0204]         ]
[0205] }
[0206] }
[0207] 硬件适配文件示例中的“match”字段即为硬件适配文件中部分硬件信息,硬件信息可以根据实际应用场景进行配置,本发明对此不进行限制。例如,硬件信息包括操作系统信息(即os字段内容)、桌面管理接口信息(即dmi字段内容)、CPU信息(即cpu字段内容)、内存信息(即memory字段内容)、磁盘信息(即disk字段内容)、声卡信息(即sound字段内容)、显卡信息(即graphic字段内容)、网络信息(即network字段内容)、相机信息(即camera字段内容)、电源信息(即battery字段内容)、蓝牙信息(即bluetooth字段内容)、外接设备信息(即peripheral字段内容)、外接设备互连标准信息(即pci字段内容)、USB信息(即usb字段内容)中的一种或多种。每一硬件对应的硬件信息可以相同,也可不同,并且各硬件的适配文件中的硬件信息,包括如上所述的硬件信息中的一种或多种。例如,“match”字段仅包括CPU信息,说明需要对CPU进行适配。
[0208] 适配文件示例中的“name”字段,即为该适配文件的名称,该“name”字段的值为“ui_test_1”,说明当前适配文件是用于测试界面的。
[0209] 适配文件示例中的“action”字段,即为硬件将要执行的多个操作,多个操作可以根据实际应用场景进行设置,本发明对此不进行限制,只要满足每一操作对应一个函数即可。例如,多个操作可以包括verify()、apply()、check()和rollback(),若是对CPU进行适配,那么CPU需要执行verify()、apply()、check()和rollback()这四个函数。
[0210] 各操作下的代码即为该操作对应的目标函数。例如,apply下的代码(如下所示),下面示出的代码,即为apply操作的目标函数。
[0211] [{
[0212]             {
[0213]                 "type": "cmdline",
[0214]                 "cmd": "需要执行的命令"
[0215]             },
[0216]             {
[0217]                 "type": "grub",
[0218]                 "arg": "参数",
[0219]                 "mode": "add|delete|query|modify"
[0220]             },
[0221]             {
[0222]                 "type": "service",
[0223]                 "server_name": "服务名称",
[0224]                 "enable": false,
[0225]                 "mode": "add|delete|query|modify"
[0226]             },
[0227]             {
[0228]                 "type": "config",
[0229]                 "path": "配置文件绝对路径",
[0230]                 "mode": "add|delete|query|modify",
[0231]                 "config_key": "配置项",
[0232]                 "config_value": "配置值"
[0233]             }
[0234]         ]
[0235] 每一操作的目标函数中指定了操作类型,即各操作的目标函数中type字段,type字段的值即为具体的操作类型。操作类型可以根据实际应用场景进行设置,本发明对此不进行限制。例如,操作类型包括cmdline(执行命令)、service(服务的创建、删除、自启动等)、config(配置的增删改查)、file(配置文件的增、删、改、查)等。
[0236] 在计算设备100与网络服务器118‑1无线连接,且通过网络进行无线连接时,由于网络信号容易出现不稳定的情况,在这种情况下,计算设备100无法及时从网络服务器118‑1获取硬件适配文件,这就会对硬件自适应带来影响。为了缓解这种情况的出现,可以预先在计算设备中存储少量的、且必要的硬件适配文件,以便在硬件自适应过程中及时获取到与硬件匹配的硬件适配文件。此处的必要的硬件适配文件,可以理解为使用频率高的硬件适配文件,当然,必要的硬件适配文件并不限于此,还可以根据计算设备中硬件自适应的实际情况进行定义。例如,必要的硬件适配文件可以为网卡驱动的硬件适配文件。
[0237] 需要说明的是,硬件自适应,包括两方面。一方面,是在操作系统上安装硬件设备对应的驱动程序,使得计算设备可以正常使用硬件设备。另一方面,在安装驱动程序的前提下,硬件设备需要执行特定的操作后,计算设备才可正常使用该设备。
[0238] 图2示出了根据本发明一个实施例的硬件自适应方法200的流程图。方法200适于计算设备100中执行,方法200是对应第一方面(即在操作系统上安装硬件设备对应的驱动程序,使得计算设备可以正常使用硬件设备)的硬件自适应方法。方法200包括步骤S201至步骤S209。
[0239] 首先启动硬件自适应的用户图形界面,用户图形界面中包括获取硬件适配文件接口,当用户触发该接口时,响应该操作,执行步骤S201,获取网络信息。在获取网络信息后,执行步骤S202,根据网络信息判断是否与网络服务器通信连接。根据网络信息判断是否与网络服务器通信连接为已有技术,此处不再赘述,但是均在本发明的保护范围之内。
[0240] 在网络未连接时,执行步骤S203,从本地获取硬件适配文件。若安装包集成在硬件自适应方法所对应的应用程序或插件的安装包中,那么从本地获取硬件适配文件,可以理解为从硬件自适应方法所对应的应用程序或插件的安装包中获取硬件适配文件。
[0241] 在网络连接时,执行步骤S204,从网络服务器获取硬件适配文件。具体地,首先生成获取硬件适配文件的请求,并发送至与计算设备100通信连接的网络服务器118‑1,在一个实施方式中,通过调用网络服务器118‑1的RESTful接口向网络服务器118‑1发送获取硬件适配文件的请求。网络服务器118‑1响应获取硬件适配文件的请求,获取所有硬件适配文件,并同样通过RESTful接口将获取的所有硬件适配文件发送至计算设备100。
[0242] 从而,在网络出现异常时,仍可以获取到硬件适配文件,保证了硬件自适应过程的有效执行。并且,采用RESTful接口获取硬件适配文件,接口统一,便于管理和使用。
[0243] 在计算设备100接收到网络服务器118‑1发送的硬件适配文件,或者,计算设备100从本地获取到所存储的所有硬件适配文件后,执行步骤S205,从已获取的硬件适配文件中确定目标硬件适配文件。
[0244] 在一个实施方式中,步骤S205包括:在计算设备的用户图形界面显示已获取的硬件适配文件,响应用户选择硬件适配文件的操作,将用户选中的硬件适配文件作为目标硬件适配文件。
[0245] 例如,在计算设备的用户图形界面显示已获取的硬件适配文件的名称列表,响应用户选择列表中的一个或多个数据项的操作,将已选中的名称所对应的硬件适配文件作为目标硬件适配文件。
[0246] 在另一个实施方式中,步骤S205包括:将获取的所有硬件适配文件作为目标硬件适配文件。此时,即应用所有硬件适配文件的解决方案。
[0247] 确定目标硬件适配文件后,执行步骤S206,确定与目标硬件适配文件所对应的待自适应硬件,并获取待自适应硬件的设备信息。在一些实施方式中,通过/sys/class中的设备文件、lspci命令、lshw命令、dmidecode命令等方式获取设备信息。
[0248] 由于目标硬件适配文件可以为一个或多个,那么获取的待自适应硬件也为一个或多个,从而待自适应硬件的设备信息也为一组或多组,每一组设备信息对应于一个待自适应硬件。
[0249] 获取到自适应硬件的设备信息后,执行步骤S207,将获取到的设备信息与目标硬件适配文件中硬件的设备信息进行匹配,并执行步骤S208,判断获取到的设备信息与目标硬件适配文件中硬件的设备信息(即目标硬件适配文件中的match部分的数据)是否匹配,若是,则执行步骤S209,从安装包中获取与待自适应硬件相对应的驱动程序,并安装在计算设备的操作系统中。若未匹配到,则不安装与待自适应硬件相对应的驱动程序,结束程序的执行。从而保证了只有与目标硬件适配文件匹配的设备才会安装驱动程序。
[0250] 由上述内容可知,本方案通过将非必要的驱动程序对应的内核模块编译成安装包,只有当硬件匹配成功才会安装对应的驱动程序,即安装驱动程序对应的内核模块。由于操作系统中只存在必要的内核模块,其他内核模块根据硬件选择性安装,所以大大减少操作系统中内核模块的数量,从而减少内核所占用的内存,提高计算设备的性能和内存资源的利用率。
[0251] 至此,通过安装驱动程序实现了硬件自适应。每当需要通过安装驱动程序进行硬件自适应时,均需执行步骤S201至步骤S209。
[0252] 图3示出了根据本发明另一个实施例的硬件自适应方法300的流程图。方法300同样适于计算设备100中执行,方法300是对应第二方面(即在安装驱动程序的前提下,硬件设备需要执行特定的操作后,计算设备才可正常使用该设备)的硬件自适应方法。方法300包括步骤S301至步骤S310。其中步骤S301至步骤S309与方法200的步骤S201至步骤S209相同,此处不再赘述。
[0253] 在对方法300进行说明之前,需要说明的是,计算设备中还存储有代码模板,该代码模板为预先创建并存储的,适于根据硬件适配文件生成方案代码,以使得待自适应硬件根据方案代码执行硬件适配文件中的操作。下面给出一个代码模板的示例:
[0254] #include "ActionUtil.h"
[0255] #include "ISolution.h"
[0256] class HardwareName_SolutionImpl : public ISolution
[0257] {
[0258]     bool verify(QString &str) override
[0259]     {
[0260]         bool ret = false;
[0261]         //Verify the validity of the plug‑in
[0262]         return ret;
[0263]     }
[0264]     bool apply() override
[0265]     {
[0266]         bool ret = false;
[0267]         //Apply module replacement area
[0268]         return ret;
[0269]     }
[0270]     bool check() override
[0271]     {
[0272]         bool ret = false;
[0273]         //Check module replacement area
[0274]         return ret;
[0275]     }
[0276]     bool rollback() override
[0277]     {
[0278]         bool ret = false;
[0279]         //Rollback module replacement area
[0280]         return ret;
[0281]     }
[0282] };
[0283] #ifdef __cplusplus
[0284] extern "C"{
[0285] #endif
[0286] ISolution* getInstance()
[0287] {
[0288]     return new HardwareName_SolutionImpl();
[0289] }
[0290] #ifdef __cplusplus
[0291] }
[0292] #endif
[0293] 在步骤S309中安装驱动程序后,继续执行步骤S310,根据代码模板控制待自适应硬件执行目标硬件适配文件的多个操作。
[0294] 在一个实施方式中,步骤S310具体包括:首先解析代码模板的关键字,确定与目标硬件适配文件中各操作相对应的关键字,并将与目标硬件适配文件的各个操作的目标函数,插入到与其对应的关键字所在位置处,从而生成方案代码,并执行方案代码,以实现控制待自适应硬件执行目标硬件适配文件的多个操作。即,实现待自适应硬件执行特定的操作。
[0295] 值得注意的是,生成的方案代码的编程语言可以根据实际应用场景选择,本发明对此不进行限制。例如,生成的方案代码的编程语言为C++。
[0296] 其中,目标函数包括验证方案代码的合法性的第一函数、执行目标操作的第二函数、验证目标操作是否正常执行的第三函数和具有回滚功能的第四函数。第一函数、第二函数、第三函数以及第四函数可以根据实际应用场景进行选择,本发明不进行限制。例如,目标函数包括验证方案代码的合法性的第一函数可以为verify(),执行目标操作的第二函数可以为apply(),验证目标操作是否正常执行的第三函数可以为check(),具有回滚功能的第四函数可以为rollback()。
[0297] 以上述示出的代码模板、编程语言为C++格式、目标函数包括verify()、apply()、check(),和rollback()为例,得到如下的方案代码示例:
[0298] #include "ActionUtil.h"
[0299] #include "ISolution.h"
[0300] class NETWORK_PCIE_R0IN117W_SolutionImpl : public ISolution
[0301] {
[0302]     bool verify(QString &str) override
[0303]     {
[0304]         bool ret = false;
[0305]         ret = str == "f68d27da17d9fd49440b0b8dac130f4f98a2d4c6aca3c9221cdbc8b264b2c8be";
[0306]         if (!ret) {
[0307]             m_lastError = "plugin verify failed";
[0308]             return false;
[0309]         }
[0310]         return ret;
[0311]     }
[0312]     bool apply() override
[0313]     {
[0314]        bool ret = false;
[0315]         ret = Action::execCmdLine("echo \"blacklist acer_wmi\" | tee ‑a /etc/modprobe.d/xiaomi_disable_acer_wmi.conf | update‑initramfs ‑u ‑k all");
[0316]         if (!ret) {
[0317]             m_lastError = "execCmdLine failed";
[0318]             return false;
[0319]         }
[0320]         return ret;
[0321]     }
[0322]     bool check() override
[0323]     {
[0324]         bool ret = false;
[0325]         ret = File::compareFile("/etc/modprobe.d/xiaomi_disable_acer_wmi.conf", "blacklist acer_wmi");
[0326]         if (!ret) {
[0327]             m_lastError = "Invalid check:/etc/modprobe.d/xiaomi_disable_acer_wmi.conf does not exist";
[0328]             return false;
[0329]         }
[0330]         return ret;
[0331]     }
[0332]     bool rollback() override
[0333]     {
[0334]         bool ret = false;
[0335]         ret = Action::execCmdLine("rm ‑f /etc/modprobe.d/xiaomi_disable_acer_wmi.conf | update‑initramfs ‑u ‑k all");
[0336]         if (!ret) {
[0337]             m_lastError = "execCmdLine failed";
[0338]             return false;
[0339]         }
[0340]         return ret;
[0341]     }
[0342] };
[0343] #ifdef __cplusplus
[0344] extern "C"{
[0345] #endif
[0346] ISolution* getInstance()
[0347] {
[0348]     return new NETWORK_PCIE_R0IN117W_SolutionImpl();
[0349] }
[0350] #ifdef __cplusplus
[0351] }
[0352] #endif
[0353] 在一个实施方式中,图4示出了根据本发明一个实施例的执行方案代码的流程图,包括步骤S401至步骤S407。
[0354] 首先在步骤S401中,执行方案代码的、验证方案代码的合法性的第一函数,得到第一返回值。第一返回值包括两个不同的数值,分别为第一数值和第二数值,第一数值不同于第二数值,第一数值表示方案代码合法,第二数值表示方案代码不合法。例如,第一数值可以为1,第二数值可以为0。
[0355] 并执行步骤S402,根据第一返回值判定方案代码是否合法。具体地,在第一返回值为第一数值时,说明方案代码合法时,那么执行步骤S403,执行判定方案代码是否执行完成的第二函数,得到第二返回值。若在第一返回值为第二数值时,说明方案代码不合法时,那么结束程序的执行。
[0356] 第二返回值包括两个不同的数值,分别为第三数值和第四数值,第三数值不同于第四数值,第三数值表示目标操作的目标函数执行完成,第四数值表示目标操作的目标函数未执行完成。例如,第三数值可以为1,第四数值可以为0。
[0357] 接着执行步骤S404,根据第二返回值判断目标操作是否执行完成。具体地,在第二返回值为第三数值时,说明目标操作执行完成,那么继续执行步骤S405,执行方案代码中、验证目标操作是否正常执行的第三函数,得到第三返回值。若第二返回值为第四数值时,说明目标操作未执行完成,那么继续执行步骤S404。
[0358] 第三返回值同样包括两个不同的数值,分别为第五数值和第六数值,第五数值不同于第六数值,第五数值表示目标操作的目标函数正常执行,第六数值表示目标操作的目标函数没有正常执行,即在执行过程中存在异常。同样地,例如,第五数值可以为1,第六数值可以为0。
[0359] 随后执行S406,根据第三返回值判断目标操作是否正常执行。具体地,在第三返回值为第五数值时,说明目标操作的目标函数正常执行,那么结束程序的执行。若第三返回值为第六数值,说明目标操作的目标函数在执行过程中存在异常,未正常执行,那么继续执行S407,获取出错代码片段,并针对出错代码片段执行方案代码中、具有回滚功能的第四函数,以回滚出错的代码片段。
[0360] 从而通过第一函数判断方案代码是否合法、通过第二函数判断方案代码是否执行完成、通过第三函数验证目标操作是否正常执行、当执行出错时通过第四函数对出错代码段进行回滚,从而保证方案代码执行的可靠性,以及在执行出错时对出错代码进行纠错,从而使得方案代码的有效执行。
[0361] 为了方案代码的源文件被恶意修改,从而导致安全隐患,在一个实施方式中,将方案代码生成为动态链接库,这样,即可保证在计算设备的操作系统中,不会存在方案代码的源文件,从而避免方案代码源文件被恶意修改,保证了方案代码源文件的安全性。
[0362] 至此,在安装驱动程序后,通过执行特定的操作实现了硬件自适应。每当需要通过执行特定的操作进行硬件自适应时,均需执行步骤S301至步骤S310。
[0363] 图5示出了根据本发明一个实施例的硬件自适应装置500的结构框图。该硬件自适应装置500包括依次耦接的获取模块510、控制模块520和安装驱动序模块530。
[0364] 获取模块510,适于响应触发获取硬件适配文件接口的操作,从网络服务器获取硬件适配文件。
[0365] 控制模块520,适于从已获取的硬件适配文件中确定目标硬件适配文件,还适于确定与目标硬件适配文件所对应的待自适应硬件,并获取待自适应硬件的设备信息。
[0366] 安装驱动模块530,适于将获取到的设备信息与目标硬件适配文件中硬件的设备信息进行匹配,若匹配成功,则从安装包中获取与待自适应硬件相对应的驱动程序,并安装在计算设备的操作系统中。
[0367] 需要说明的是,硬件自适应装置500的工作原理与上述硬件自适应方法200相似,相关之处可参考对上述硬件自适应方法200的说明,此处不再赘述。
[0368] 由上述内容可知,本发明提供的硬件自适应方案,将非必要的驱动程序对应的内核模块编译成安装包,只有当硬件匹配成功才会安装对应的驱动程序对应的内核模块。由于操作系统中只存在必要的驱动程序对应的内核模块,其他内核模块根据实际硬件而选择性安装,所以大大减少操作系统中内核模块的数量,进而减少内核所占用的内存,提高内存资源的利用率。
[0369] 并且,对于特殊型号的硬件设备,匹配到硬件后获取与其对应的硬件适配文件,并根据硬件适配文件对该硬件做特殊操作和配置,解决了非常规配置与主线冲突的问题。
[0370] 这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD‑ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
[0371] 在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的硬件自适应方法。
[0372] 以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
[0373] 在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0374] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0375] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
[0376] 本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
[0377] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0378] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
[0379] 此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
[0380] 如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0381] 尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。