CN114968384B - 一种功能调用方法和装置 - Google Patents

一种功能调用方法和装置 Download PDF

Info

Publication number
CN114968384B
CN114968384B CN202210434167.3A CN202210434167A CN114968384B CN 114968384 B CN114968384 B CN 114968384B CN 202210434167 A CN202210434167 A CN 202210434167A CN 114968384 B CN114968384 B CN 114968384B
Authority
CN
China
Prior art keywords
module
manager
calling
interface
target
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
CN202210434167.3A
Other languages
English (en)
Other versions
CN114968384A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN114968384A publication Critical patent/CN114968384A/zh
Application granted granted Critical
Publication of CN114968384B publication Critical patent/CN114968384B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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

一种功能调用方法和装置
本申请要求于2020年8月31日提交中国专利局、申请号为202010895994.3、发明名称为“一种处理方法及移动设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及系统内部交互方法,更具体地,本申请涉及一种功能调用方法和装置。
背景技术
现代操作系统通常会创建两个或两个以上地址空间,这些地址空间可被用于运行不同的程序以保证系统安全性。其中,可直接访问物理地址的地址空间被称为“内核空间”,内核空间通常用于运行操作系统内核和驱动程序。除此之外的地址空间可被称为“用户空间”,用户空间可用于运行应用程序。
设备驱动程序(简称驱动程序)用于管理设备,实现各种功能,驱动程序只能运行在内核态。随着设备的功能越来越丰富,驱动程序也变得越来越复杂。实际上并不是所有产品都需要全部的设备功能,其中有些功能是需要的,有些功能是不需要的,对于不需要的功能所对应的驱动程序则可以被删除掉,该删除操作通常被称为驱动的裁剪。
随着外设、操作外设使用的协议复杂化,驱动程序也随着变得越来越复杂。若将每个驱动编写成内核模块,则操作系统中包含多个内核模块,每个内核模块可以通过特定方法向用户空间提供一个或多个接口,如图1中的某一接口为“InterfaceFunX”,该接口通过调用一系列内部方法,如图1中任一方法“InnerFuncX”来完成相应的功能。当两个或两个以上内核模块间存在交互时,会导致代码之间相互耦合,比如驱动A1需要调用驱动A2时,会调用驱动A2中的接口“InterfaceFunc”,因此接口“InterfaceFunc”对于驱动A1而言存在依赖。又比如接口“InterfaceFunA”可以直接调用方法“InnerFunc1”和方法“InnerFunc2”,则接口A与方法1和方法2之间也存在相互耦合的关系。
当对驱动进行裁剪时,一般只能裁剪那些不被其他接口所依赖的接口、方法。对于那些有依赖的接口、方法,如果被才减掉,就会导致在编译、链接时出现错误,导致未被裁剪掉的驱动程序发生异常,所以在越来越复杂的驱动程序之间,会产生构建难、裁剪难、维护难、部署难的问题。
发明内容
本申请提供了一种功能调用方法和装置,用于克服驱动程序复杂化带来的构建难、裁剪难、维护难、部署难的技术问题。具体地,本申请公开了以下技术方案:
第一方面,本申请提供了一种功能调用方法,该方法应用于包含至少一个驱动程序的系统,且每个所述驱动程序被拆分成至少一个相互独立的功能模块,每个所述功能模块都被注册到相应的模块管理器,所述方法包括:
模块管理器接收第一模块发送的第一请求消息,所述第一请求消息中包括第一功能服务的标识;根据所述第一功能服务的标识在模块注册表中查找目标模块,所述模块注册表中包括所述第一功能服务的标识与目标模块的对应关系,所述目标模块用于为所述第一模块提供第一功能服务;模块管理器根据所述目标模块获得目标模块的调用接口;向所述第一模块发送所述目标模块的调用接口。
本方法,预先将系统的驱动模块拆分成更小粒度的功能模块,拆分后的功能模块之间互相独立,彼此之间没有耦合,然后通过同步消息、异步消息、单程消息方式进行通讯,使得各个功能模块之间通过调用接口来访问或者获取其他功能模块的相关功能。
此外,由于拆分后的各个功能模块互相独立,功能代码只依赖由模块管理器提供的功能模块访问接口,所以功能模块可以被任意裁剪。即使一个功能模块要访问的其他功能模块被裁剪掉了,也可以在请求目标功能模块管理器失败后作出响应处理,不会出现编译、链接和运行时的异常,克服了驱动构建难、裁剪难、维护难的问题。
结合第一方面,在第一方面的一种可能的实现方式中,根据所述第一功能服务的标识在模块注册表中查找目标模块,包括:根据所述第一功能服务的标识在模块注册表中查找能够提供所述第一功能服务的功能模块,确定所述能够提供所述第一功能服务的功能模块为所述目标模块。
结合第一方面,在第一方面的另一种可能的实现方式中,获得目标模块的调用接口,包括:确定所述目标模块所在的目标模块管理器;根据所述目标模块管理器的位置和所述第一模块管理器的位置确定调用模式,根据所述调用模式,以及调用模式和调用接口之间的对应关系确定所述目标模块的调用接口。
其中,所述调用模式包括:相同地址空间调用和不同地址空间调用。
结合第一方面,在第一方面的又一种可能的实现方式中,第一模块对应的模块管理器为第一模块管理器,该第一模块管理器的位置在内核空间或者用户空间中;当所述目标模块管理器的位置与所述第一模块管理器的位置为相同的地址空间时,所述调用模式为相同地址空间调用;确定所述目标模块的调用接口,包括:在所述调用模式为相同地址空间调用时,所述目标模块的调用接口包括:直接访问目标模块地址的方法和所述目标模块的地址。
结合第一方面,在第一方面的又一种可能的实现方式中,当所述目标模块管理器的位置与所述第一模块管理器的位置为不同的地址空间时,所述调用模式为用户空间调用内核空间,或者,内核空间调用用户空间;确定所述目标模块的调用接口,包括:
在所述调用模式为用户空间调用内核空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述内核空间接口的调用,以及调用所述内核空间接口所需的接口数据。
在所述调用模式为内核空间调用用户空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述用户空间接口的调用,以及调用所述用户空间接口所需的接口数据。
结合第一方面,在第一方面的又一种可能的实现方式中,当所述第一模块管理器的位置在第一用户空间,所述目标模块管理器的位置在第二用户空间时,所述调用模式为跨用户之间的地址空间调用,确定所述目标模块的调用接口,包括:在所述调用模式为跨用户之间的地址空间调用时,所述目标模块的调用接口包括:使用操作系统进程间的方法发起对所述第二用户空间接口的调用,以及调用所述第二用户空间接口所需的接口数据。
结合第一方面,在第一方面的又一种可能的实现方式中,所述获得目标模块的调用接口之前,还包括:判断所述第一模块在第一模块管理器中是否已经注册;如果否,且所述第一模块管理器是内核空间的模块管理器,则注册并保存所述第一模块的相关信息,所述第一模块的相关信息包括:第一模块的标识、第一模块所包含的所有功能,以及每个所述功能所对应的功能标识。
本实现方式,第一模块将其对应的标识、包含的功能以及功能标识等信息注册到模块管理器中,从而为后续第一模块的功能的调用做准备,并且可通过注册,模块管理器实现对所有功能的集中管理。
结合第一方面,在第一方面的又一种可能的实现方式中,还包括:如果所述第一模块管理器是用户空间的模块管理器,则将所述第一模块的相关信息注册到所述内核模块的模块管理器;当接收到所述内核空间的模块管理器发送的指示时,确定所述第一模块在所述内核空间的模块管理器中注册成功。本实现方式通过将功能模块的相关功能上报给内核空间的模块管理器,来实现内核空间与用户空间某一模块功能的调用。
第二方面,本申请还提供了一种模块管理器,所述模块管理器由系统将至少一个驱动程序拆分成至少一个相互独立的功能模块时生成,所述模块管理器中注册有至少一个功能模块的相关信息,所述模块管理器包括:
接收单元,用于接收第一模块发送的第一请求消息,所述第一请求消息中包括第一功能服务的标识;处理单元,用于根据所述第一功能服务的标识在模块注册表中查找目标模块,以及获得目标模块的调用接口,所述模块注册表中包括所述第一功能服务的标识与目标模块的对应关系,所述目标模块用于为所述第一模块提供第一功能服务;发送单元,用于向所述第一模块发送所述目标模块的调用接口。
结合第二方面,在第二方面的一种可能的实现方式中,所述处理单元,还用于根据所述第一功能服务的标识在模块注册表中查找能够提供所述第一功能服务的功能模块,确定所述能够提供所述第一功能服务的功能模块为所述目标模块。
结合第二方面,在第二方面的另一种可能的实现方式中,所述处理单元还用于:确定所述目标模块所在的目标模块管理器;根据所述目标模块管理器的位置和所述第一模块管理器的位置确定调用模式;根据所述调用模式,以及调用模式和调用接口之间的对应关系确定所述目标模块的调用接口。
结合第二方面,在第二方面的又一种可能的实现方式中,所述第一模块对应的模块管理器为第一模块管理器,所述第一模块管理器的位置在内核空间或者用户空间中;当所述目标模块管理器的位置与所述第一模块管理器的位置为相同的地址空间时,所述调用模式为相同地址空间调用;所述处理单元,还用于在所述调用模式为相同地址空间调用时,确定所述目标模块的调用接口包括直接访问目标模块地址的方法和所述目标模块的地址。
结合第二方面,在第二方面的又一种可能的实现方式中,当所述目标模块管理器的位置与所述第一模块管理器的位置为不同的地址空间时,所述调用模式为用户空间调用内核空间,或者,内核空间调用用户空间;所述处理单元,还用于在所述调用模式为用户空间调用内核空间时,确定所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述内核空间接口的调用,以及调用所述内核空间接口所需的接口数据;在所述调用模式为内核空间调用用户空间时,确定所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述用户空间接口的调用,以及调用所述用户空间接口所需的接口数据。
结合第二方面,在第二方面的又一种可能的实现方式中,当所述第一模块管理器的位置在第一用户空间,所述目标模块管理器的位置在第二用户空间时,所述调用模式为跨用户之间的地址空间调用;
所述处理单元,还用于在所述调用模式为跨用户之间的地址空间调用时,确定所述目标模块的调用接口包括:使用操作系统进程间的方法发起对所述第二用户空间接口的调用,以及调用所述第二用户空间接口所需的接口数据。
结合第二方面,在第二方面的又一种可能的实现方式中,所述处理单元,还用于在获得目标模块的调用接口之前,判断所述第一模块在第一模块管理器中是否已经注册;如果否,且所述第一模块管理器是内核空间的模块管理器,则注册并保存所述第一模块的相关信息,所述第一模块的相关信息包括:第一模块的标识、第一模块所包含的所有功能,以及每个所述功能所对应的功能标识。
结合第二方面,在第二方面的又一种可能的实现方式中,所述处理单元,还用于如果所述第一模块管理器是用户空间的模块管理器,则将所述第一模块的相关信息注册到所述内核模块的模块管理器;以及,当通过所述接收单元接收到所述内核空间的模块管理器发送的指示时,确定所述第一模块在所述内核空间的模块管理器中注册成功。
第三方面,本申请还提供了一种能力调用方法,包括至少一个功能模块和至少一个模块管理器,所述至少一个功能模块由系统的至少一个驱动程序拆分后生成,所述模块管理器中注册所述至少一个功能模块的相关信息;所述方法包括:
第一模块向第一模块管理器发送第一请求消息,第一请求消息中包括第一功能服务的标识;所述第一模块管理器接收所述第一请求消息,根据所述第一功能服务的标识在模块注册表中查找目标模块,获得目标模块的调用接口,并向所述第一模块发送所述目标模块的调用接口,所述模块注册表中包括所述第一功能服务的标识与目标模块的对应关系;第一模块接收目标模块的调用接口,利用所述目标模块的调用接口向所述目标模块请求第一功能服务。
第四方面,本申请还提供一种驱动拆分方法,可以将操作系统中的驱动拆分成至少一个独立的功能模块,具体地,该方法包括:获取第一内核模块所包含的接口集,所述第一内核模块所包含的接口集中包括至少一个接口;获取所述接口集中的每个接口所能够调用的方法以及各个方法之间的调用关系;根据每个接口所能够调用的方法和所述调用关系生成第一层级结构;判断所述第一层级结构中是否存在相重复的方法函数,如果存在,则对重复的方法函数进行删减得到第二层级结构。
可选的,所述第一层级结构又可称为“调用树”。
结合第四方面,在第四方面的一种可能的实现方式中,判断所述第一层级结构中是否存在相重复的方法函数,包括:判断所述第一层级结构两个或两个以上的接口中是否存在调用相同的方法函数。
具体地,判断第一功能模块中的每一层的方法函数在其他接口的功能模块中是否存在相同的方法函数,包括:
首先,判断第一功能模块中的每个方法函数在业务调用过程中被调用平均次数n,如果有两个或两个以上方法函数相同,则选择被调用平均次数n较大的一个作为保留的方法函数,删除n较小值的功能模块中的方法函数。
其次,如果两个或两个以上的方法函数中被调用的平均次数n相同,则判断每个方法函数在每个功能模块中的调用状态,所述调用状态包括必然调用和条件调用;其中必然调用的优先级高于条件调用。
如果两个或两个以上的方法函数中只有一个方法函数的状态是必然调用,其余的方法函数的状态均为条件调用,则确定该必然调用状态所对应的方法函数为需要保留的方法函数,其余的条件调用状态的方法函数则需要被删除。
另外,还包括:如果两个或两个以上的方法函数存在相同的状态,比如都是必然调用或条件调用,则根据被调用的方法函数所在业务的优先级来确定是否保留;具体地,将优先级高的业务作为保留的业务,将优先级较低的作为删除的方法函数。
可选的,所述被拆分的驱动可以位于用户空间,也可以位于内核空间。
第五方面,本申请还提供一种功能模块的部署方法,用于将某一功能模块从一个空间移动到另一空间,比如将内核模块移动到用户空间中,具体地,该方法包括:
在用户空间部署第一进程,第一进程为一个用户态进程或用户空间进程;将内核模块中的第一功能模块部署在第一进程所对应的功能模块中,同时在所述第一进程的功能模块中添加一个新的模块管理器,用于管理和调用所述第一功能模块的全部或部分功能;删除所述内核空间中的所述第一功能模块,以及所述内核空间的目标模块管理器中调用所述第一功能模块的所有功能。
可选的,在以下任意一种场景时,按照上述第六方面的方法执行功能模块的搬移,具体地。场景包括:
当第二用户空间中功能模块C想要调用第一内核模块中的功能A1或功能A2时;或者,
当第二用户空间中功能模块C想要调用第一用户空间中的功能B1时;或者,
当第一内核模块中功能模块A想要调用第一用户空间中的功能B1时;或者,
当第一内核模块中功能模块A想要调用第二用户空间中的功能C1时。
本方面,当一个功能模块需要从用户空间移动到内核空间,或者,从内核空间移动到用户空间时,由于经过拆分和部署后,各个功能模块之间互相不再具有依赖关系,只依赖于各个模块管理器提供的调用接口,并且使用相同的参数,所以功能模块之间的功能调用可以完全不感知这个变化。利用每个功能模块的模块管理器可以在不修改功能模块代码的情况下,将功能模块的部署位置进行灵活迁移。
第六方面,本申请还提供了一种模块管理装置,该设备包括处理器和存储器,其中,处理器与存储器耦合,存储器用于存储计算机程序指令;处理器用于执行存储器中存储的所述指令,以使得该模块管理装置执行前述第一方面及第一方面各种实现方式中的方法。
具体地,所述处理器用于接收第一模块发送的第一请求消息,所述第一请求消息中包括第一功能服务的标识;所述处理器还用于根据所述第一功能服务的标识在模块注册表中查找目标模块,根据所述目标模块获得目标模块的调用接口;以及向所述第一模块发送所述目标模块的调用接口;其中,所述模块注册表中包括所述第一功能服务的标识与目标模块的对应关系,所述目标模块用于为所述第一模块提供第一功能服务。
此外,所述模块管理装置中还包括接口电路,所述接口电路用于实现该设备与外部的其它模块之间的通信。
可选的,所述处理器和存储器可以集成在一个处理芯片或者芯片电路。
第七方面,本申请还提供了一种计算机可读存储介质,该存储介质中存储有指令,使得当指令在计算机或处理器上运行时,可以用于执行前述第一方面以及第三方面中的方法。
另外,本申请还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,当该指令被计算机或处理器执行时,可实现前述第一方面以及第一方面各种实现方式中的方法。
需要说明的是,上述第二方面至第七方面的各种实现方式的技术方案所对应的有益效果与前述第一方面以及第一方面的各种实现方式的有益效果相同,具体参见上述第一方面以及第一方面的各种实现方式中的有益效果描述,不再赘述。
附图说明
图1为本申请提供的一种内核空间的结构示意图;
图2为本申请实施例提供的一种终端设备的结构示意图;
图3为本申请实施例提供的一种内核空间中接口和方法函数之间调用关系的示意图;
图4为本申请实施例提供的一种拆分成多个功能模块的结构示意图;
图5为本申请实施例提供的一种功能调用方法的信令流程图;
图6为本申请实施例提供的一种多个功能模块之间功能调用的示意图;
图7为本申请实施例提供的一种功能模块注册的流程图;
图8为本申请实施例提供的一种获得调用接口的流程图;
图9为本申请实施例提供的一种请求功能服务和获得调用接口流程图;
图10为本申请实施例提供的一种层级结构的示意图;
图11为本申请实施例提供的另一种层级结构的示意图;
图12为本申请实施例提供的一种功能模块移动的结构示意图;
图13为本申请实施例提供的一种模块管理器的结构示意图;
图14为本申请实施例提供的一种终端设备操作系统的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,下面结合附图对本申请实施例中的技术方案作进一步详细的说明。在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的应用场景进行说明。
本申请的技术方案可应用于一种终端设备,技术方案涉及对终端设备内操作系统中的驱动程序进行裁剪和部署。
图2示出了一种终端设备的结构示意图。该终端设备可以包括处理器110和存储器120,此外,还可以包括:传感器模块130,音频模块140,移动通信模块150,无线通信模块160,天线1,天线2,显示屏170,摄像头180,USB接口190,电源管理模块191等。
其中,传感器模块130可以包括压力传感器130A,陀螺仪传感器130B,触摸传感器130C,另外,传感器模块130中还可以包括加速度传感器,温度传感器,环境光传感器等。
音频模块140包括扬声器140A,受话器140B,麦克风140C。此外还包括耳机接口等。
应理解,本实施例示意的结构并不构成对终端设备的具体限定。在本申请另一些实施例中,可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理模块,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-networkprocessing unit,NPU)等。其中不同的处理模块可以是独立的器件,也可以集成在一个或多个处理器中。
处理器110可以是终端设备的神经中枢和指挥中心。处理器110可以根据指令操作码和时序信号,产生操作控制信号,完成读取指令和执行指令的操作。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器120中直接调用,避免重复存取,减少了处理器110的等待时间,提高了系统的效率。
可选的,处理器110为一种处理芯片或处理电路。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(Inter-Integrated circuit,I2C)接口,集成电路内置音频(Inter-Integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
其中,USB接口190是符合USB标准规范的接口,具体可以是Mini USB接口,MicroUSB接口,USB Type C接口等。USB接口190可以用于连接外部设备,比如充电器等。
电源管理模块191用于连接电池与处理器110。电源管理模块191为处理器110,存储器120,显示屏170,摄像头180和无线通信模块160等供电。在一些实施例中,电池可以设置在电源管理模块191中。另外,可选的,还可以包括充电管理模块,所述充电管理模块用于从充电器接收充电输入,以及为电池充电的同时,还可以通过电源管理模块191为终端设备供电。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。天线1和天线2用于发射和接收电磁波信号。终端设备中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noiseamplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器140A,受话器140B等)输出声音信号,或通过显示屏170显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供无线局域网(Wireless Local Area Networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160还可以从处理器110接收待发送的信号,并对其进行调频,放大处理,然后经天线2转为电磁波发射出去。
在一些实施例中,终端设备的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得终端设备可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(Global System For Mobile Communications,GSM),通用分组无线服务(General Packet Radio Service,GPRS),码分多址接入(Code DivisionMultiple Access,CDMA),宽带码分多址(Wideband Code Division Multiple Access,WCDMA),时分码分多址(Time-Division Code Division Multiple Access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(globalnavigation satellite system,GLONASS)和北斗卫星导航系统(Beidou navigationsatellite system,BDS)等。
终端设备可通过GPU,显示屏170,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏170和应用处理器。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏170用于显示应用界面、窗口、控件等。显示屏170包括显示面板。所述显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organiclight-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED),柔性发光二极管(flexlight-emitting diode,FLED),MiniLED,Micro-OLED,量子点发光二极管(quantum dotlight emitting diodes,QLED)等。在一些实施例中,终端设备可以包括至少一个显示屏170。
摄像头180,可用于拍摄并获取图像。在一些实施例中,终端设备可以包括1个或N个摄像头180,N>1且为正整数。
存储器120可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器120可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,比如存储内核空间和用户空间等。存储数据区可存储终端设备使用过程中所创建的数据等。
此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器110通过运行存储在存储器120的指令,来执行终端设备的各种功能应用以及界面处理。
另外,还可以包括:外部存储卡,例如Micro SD卡,用于扩展终端设备的存储能力。所述外部存储卡可通过外部存储器接口与处理器110连接,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
在传感器模块130中,压力传感器130A用于感受压力信号,可以将压力信号转换成电信号。陀螺仪传感器130B可以用于获取终端设备的运动姿态。触摸传感器130C,也称“触控器件”。触摸传感器130C可以设置于显示屏170,由触摸传感器130C与显示屏170组成触摸屏。触摸传感器130C用于检测作用于其上或附近的滑动手势触摸操作。
本实施例中,所述终端设备可以是一种便携式设备,比如智能终端、手机、笔记本电脑、平板电脑、个人计算机(personal computer,PC)、个人数字助理(personal digitalassistant,PDA),可折叠终端、具备无线通讯功能的可穿戴设备(例如智能手表或手环)、用户设备(user device)或用户设备(user equipment,UE)、智能家居设备(如电视机),车载电脑,游戏机,以及增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等,本申请的实施例对终端设备的具体设备形态不做限定。另外,上述各种终端设备中包括但不限于搭载苹果(IOS)、安卓(Android)、微软(Microsoft)或者其他操作系统。
在上述任一操作系统中,定义运行在内核地址空间的程序为内核态、或称为内核空间。运行在用户地址空间的程序为用户态、或称为用户空间。其中,内核态或内核空间可以直接或通过物理地址访问设备。用户态或用户空间中的程序无法直接访问设备,所以只能通过系统调用切换到内核态后,调用驱动程序提供的接口来访问设备。运行在用户态的程序如果发生异常,则可能会导致该个用户进程崩溃。
本实施例以Linux系统为例,在Linux系统中,每个驱动可以看成是一个或多个内核模块,其中每个内核模块由驱动程序编写而成,每个内核模块可以通过编译生成二进制。这些内核模块的二进制可以直接链接在操作系统内核中,也可以链接成独立的内核模块文件(比如.ko文件)。如果驱动直接链接在操作系统的内核中,则将会直接随操作系统一起加载,此时,.ko文件也可以在运行时由操作系统随时加载。但无论才用何种方式加载,内核模块都只能部署在内核空间中,不能部署在用户空间。
另外,每个内核模块可以通过特定方法(如设备节点、netlink等)向用户空间提供一个或多个接口,这些接口通过调用一系列内部方法完成其功能。
当两个内核模块间存在交互时,通常在代码中直接声明被调用者方法,然后直接调用。如图3所示,一内核空间中包括两个内核模块,分别是内核模块1和内核模块2,当内核模块1想调用内核模块2中的一个接口时,通常会在代码中声明。
声明如下:
extern void InterfaceFunc(...)//在其他地方编写了一个接口为“InterfaceFunc”;
call InterfaceFunc(...)//当程序运行到此处时,调用在其他地方编写的接口“InterfaceFunc”。
其中,InterfaceFunc:表示内核模块向内核空间提供的接口;InnerFunc:表示利用上述接口调用的方法。箭头“→”表示调用关系,箭头尾部指向的方法或接口需要调用箭头指向的方法或接口,比如接口InterfaceFuncA调用接口InterfaceFuncB,接口InterfaceFuncA调用方法InnerFunc1或者方法InnerFunc2。
上述以箭头指向的方式可以表示接口与方法的调用的关系,使得接口与接口,或接口与方法,或方法与方法之间直接耦合。当需要裁剪掉某些接口或者方法时,比如图3中填充的内容代表需要裁剪的内容,包括接口InterfaceFuncB、接口InterfaceFuncC和方法InnerFunc3,直接裁剪将会导致具有耦合关系的InterfaceFuncA和InnerFunc2由于找不到被调用的接口/方法而引发错误。此外,在裁剪前具有依赖关系的不同接口和方法在部署时也会有一定困难,比如构建难、裁剪难、维护难、部署难等。
本实施例为了提高裁剪效率、降低部署难度,将操作系统中的各个驱动拆分成至少一个相互独立的功能模块,比如将内核模块1拆分成功能模块A、功能模块B,将内核模块2拆分成功能模块C,如图4所示,并且为拆分后的每个功能模块提供一个或多个功能接口,并且通过新增模块模块管理器来对拆分后的各个功能模块进行管理,使得拆分后的每个功能模块中的方法或功能能够被其他模块调用。比如当功能模块A需要调用功能模块B的功能时,执行以下方法步骤,如图5所示,该方法包括:
101:第一模块向第一模块管理器发送第一请求消息,对应地,第一模块管理器接收第一模块发送的第一请求消息。其中,第一模块管理器为第一模块所在地的模块管理器,用于管理第一模块的请求消息以及对第一模块的功能调用。
所述第一请求消息用于请求提供第一功能服务,该第一请求消息中包括第一功能服务的标识(ID)。参见图4,拆分后的内核空间中包括功能模块A、功能模块B和功能模块C,所述第一模块可以为功能模块A、B或C中的任意一个,所述第一模块管理器为内核空间的模块管理器。当第一模块为功能模块A,其功能模块A请求第一模块管理器提供功能B1时,所述第一请求消息中携带功能模块B的标识ID。类似的,当第一模块为功能模块B,且请求功能C1时,第一请求消息中携带功能模块C的标识ID。
102:第一模块管理器接收该第一请求消息后,根据所述第一功能服务的标识ID在模块注册表中查找目标模块,所述目标模块能够为所述第一模块提供第一功能服务。
其中,所述模块注册表由第一模块管理器预先获取并存储在第一模块管理器本地,该模块注册表中包括至少一个功能服务的标识ID与模块编号,以及每个模块所能够提供的功能服务之间的对应关系。参见表1,示出了一种功能服务的标识ID与模块编号、模块功能之间的对应关系。
表1、模块注册表
功能服务的标识ID 模块编号 模块功能
标识ID1 功能模块A 功能A1、功能A2
标识ID2 功能模块B 功能B1
标识ID3 功能模块C 功能C1
…… …… ……
在一示例中,若第一模块请求提供功能模块B的功能B1,则第一模块管理器根据第一请求消息中携带的功能服务的标识ID2,在表1所示的模块注册表中查找能够提供功能B1的功能模块,本示例中,仅功能模块B具备功能B1,则确定该目标模块为功能模块B。
可选的,如果第一请求消息中携带的功能服务的标识是ID1,则确定该目标模块为功能模块A;如果携带的功能服务的标识是ID3,则确定目的模块为功能模块C。
其中,该模块注册表的生成过程见后续实施例的描述。应理解,上述模块注册表中还可以包括其他更多或更少的内容,本实施例对此不予限制。
103:第一模块管理器获取目标模块的调用接口。
其中,所述目标模块的调用接口为所述目标模块向所述第一模块提供第一功能服务的接口。该调用接口可以是组装接口,进一步地,该组装接口可以在请求模块时组装,也可以在模块注册或同步时组装,本实施例对比不做限制。
可选的,在步骤103之前还包括:第一模块管理器先对所述目标模块进行权限检查,当检查权限合格后再执行步骤103,获取所述目标模块的调用接口。如果检查该目标设备的权限不合格,则第一模块发起的第一请求消息失败,结束流程。本实施例对权限检查的具体过程不予限制。
在步骤103中,具体包括:
103-1:第一模块管理器确定目标模块所在的目标模块管理器。具体地,第一模块管理器根据目标模块的访问地址确定该目标模块的位置,然后根据该目标模块的位置查找其位于哪一个模块管理器之内,则该查找到的模块管理器为所述目标模块管理器。
103-2:第一模块管理器根据所述目标模块管理器的位置和所述第一模块管理器的位置确定所述目标模块的调用接口。
其中,目标模块管理器的位置可预先获知,比如第一模块管理器预先获取操作系统中所有模块管理的位置信息(比如访问地址);或者,在数据同步时获得目标模块管理的地址。第一模块管理器的位置在本地已知。
第一模块管理器根据目标模块管理器和第一模块管理器的位置先确定调用模式,然后根据调用模式和调用接口之间的对应关系,确定所述目标模块的调用接口。
103-3:第一模块管理器获取所述调用接口。
在步骤103-2中,目标模块管理器的位置和第一模块管理器的位置包含以下两种关系:
1、目标模块管理器和第一模块管理器位于同一空间,比如均位于用户空间,或内核空间;
2、目标模块管理器和第一模块管理器位于不同的空间,比如一个位于用户空间,一个位于内核空间。
进一步地,在第“1”种情况中,具体包括:目标模块管理器和第一模块管理器均位于同一内核空间,比如内核空间1;或者,目标模块管理器和第一模块管理器均位于同一用户空间,比如用户空间1;或者,目标模块管理器和第一模块管理器分别属于两个不同的用户空间,比如第一模块管理器位于用户空间1,目标模块管理器位于用户空间2。在上述第“2”种情况中,具体包括:目标模块管理器和第一模块管理器分别位于不同的空间,比如第一模块管理器位于用户空间1,目标模块管理器位于内核空间1;或者反之,目标模块管理器位于用户空间1,第一模块管理器位于内核空间1。
具体地,上述各种可能的情况参见表2,
表2、模块管理器部署位置关系表
Figure BDA0003612202790000111
在前述的关系“1”中对应两种调用模式,分部是:相同地址空间调用和跨用户之间的地址空间调用。在前述关系“2”中对应另外两种调用模式,分别是:用户空间调用内核空间和内核空间调用用户空间。
第一模块管理器在根据表2所示的位置关系确定当前的调用模式后,再根据调用模式与调用接口之间的对应关系,确定所述目标设备的调用接口。其中,所述调用模式与调用接口之间的对应关系如表3所示。
表3、调用模式与调用接收的对应关系表
Figure BDA0003612202790000112
由表3可见,调用接口包括调用方法和使用该调用方法所需的接口数据。具体地,在相同地址空间调用模式下,目标模块的调用方法为直接访问对方(目标模块)地址,接口的数据为对方地址。例如在图4中,第一模块为功能模块A,目标模块为功能模块B,则根据功能模块A和功能模块B的部署位置,确定调用模块属于“相同地址空间调用”,则根据预设的表3的对应关系,得到目标模块的调用接口包括直接访问功能模块B,以及功能模块B的地址。
在另一示例中,当目标模块管理器的位置与第一模块管理器的位置为不同的地址空间时,所述调用模式为用户空间调用内核空间,或者,内核空间调用用户空间;上述步骤103-3中获取所述目标模块的调用接口,包括:
在调用模式为用户空间调用内核空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述内核空间接口的调用,以及调用所述内核空间接口所需的接口数据;
在调用模式为内核空间调用用户空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述用户空间接口的调用,以及调用所述用户空间接口所需的接口数据。
例如如图6所示,所述第一模块为功能模块B,目标模块为内核空间中的功能模块A时,根据用户空间1中的第一模块管理器的位置和内核空间中的目标模块管理器的位置确定该调用模式为“用户空间调用内核空间”,或者称“用户态调用内核态”,进而根据预设对应关系确定目标模块的调用接口包括:使用操作系统提供的IOCTL、Netlink等手段发起系统调用,从而调用内核态的接口;该调用方法中需要使用IOCTL、Netlink等手段所需的数据,比如文件句柄、方法识别ID等。
其中,IOCTL(input/output control)是设备驱动程序中对设备的I/O通道进行管理的函数。Netlink是一种进程间通信(Inter Process Communication,IPC)机制,它是一种用于内核与用户空间通信的机制,同时它也用于进程间通信。
在又一示例中,当第一模块管理器的位置在第一用户空间,所述目标模块管理器的位置在第二用户空间时,所述调用模式为“跨用户之间的地址空间调用”,此时,确定所述目标模块的调用接口,包括:在所述调用模式为跨用户之间的地址空间调用时,所述目标模块的调用接口包括使用操作系统进程间的方法发起对所述第二用户空间接口的调用,以及调用所述第二用户空间接口所需的接口数据。其中,所述操作系统进程间的方法包括但不限于基于套接字(socket)、管道(pipe)、IPC等。
比如用户空间1调用用户空间2的功能,则对应的目标模块的调用接口包括:基于socket、pipe、IPC等通信机制实现能力调用,所需的接口数据包括socket ID、管道名、IPC地址等信息。
需要说明的是,本实施例仅例举了上述不同调用模式下的调用方法,以及调用方法所需的接口数据,包括但不限于上述所示的调用方法和接口数据,还可以采用其他调用方法和接口数据,只要能够对目标模块的能力调用,为请求的第一模块提供第一功能服务即可,本实施例对此不一一举例。
此外,在上述步骤103中的另一种实现方式是,第一模块管理器直接获得所述目标模块的调用接口,该调用接口可以是在模块注册阶段完成的组装,具体地过程在注册流程中介绍,且各个功能模块注册到模块管理器的同时还需要进行模块同步。
参见图5,上述方法还包括:
104:第一模块管理器将所述目标模块的调用接口发送给第一模块。对应地,第一模块接收第一管理器发送的目标模块的调用接口。
105:第一模块利用该目标模块的调用接口向目标模块请求所述第一功能服务。
106:目标模块接收第一模块的请求后启动第一功能服务相关的进程,并输出第一服务响应。
107:目标模块向第一模块发送该第一服务响应。
本实施例,第一模块获取模块管理器反馈的目标模块的调用接口,并利用该调用接口完成对目标模块的功能调用。
本方法,预先将系统的驱动模块拆分成更小粒度的功能模块,拆分后的功能模块之间互相独立,彼此之间没有耦合,然后通过同步消息、异步消息、单程消息方式进行通讯,使得各个功能模块之间通过调用接口来访问或者获取其他功能模块的相关功能。
此外,由于拆分后的各个功能模块互相独立,功能代码只依赖由模块管理器提供的功能模块访问接口,所以功能模块可以被任意裁剪。即使一个功能模块要访问的其他功能模块被裁剪掉了,也可以在请求目标功能模块管理器失败后作出响应处理,不会出现编译、链接和运行时的异常,克服了驱动构建难、裁剪难、维护难的问题。
下面对上述步骤102中“模块注册表”的生成过程进行说明。本实施例以第一模块的功能注册到第一模块管理器为例进行说明,如图7所示,第一模块注册过程包括:
201:第一模块管理器获取当前要注册的模块的模块标识,比如第一模块的标识。
202:第一模块管理器根据所述第一模块的标识判断第一模块是否已经注册。具体地,判断所述第一模块的标识ID是否与本地统计和存储的多个模块ID中的一个ID相同。
203:如果是,则报错返回、注册失败,因为有两个模块要使用相同的模块标识ID注册,而每一个功能模块只能使用唯一的标识ID。
204:如果否,则判断第一模块管理器是否是内核空间的模块管理器。通常内核空间只有一个模块管理器。
205:如果是内核空间的模块管理器,则根据第一模块的标识ID(比如模块编号)、第一模块所包含的所有功能,以及每个功能所对应的功能标识(比如功能A1、A2、B1)等相关信息生成模块注册表,并将该模块注册表存储在第一模块管理器的存储介质中。
206:如果否,即第一模块管理器不是在内核空间的模块管理器,则向内核空间的模块管理器发送第一模块管理器中所包含的所有方法/函数(包含所述第一模块的标识ID、第一模块所包含的所有功能,以及每个所述功能所对应的功能标识)。其中,内核空间的模块管理器称为第二模块管理器。
第二模块管理器接收来自第一模块管理器的所有方法/函数功能后,根据第一模块管理器的相关信息完成对第一模块的注册,并生成模块注册表。另外,第二模块管理器还向第一模块管理器反馈注册成功或者失败的指示。
207:第一模块管理器判断是否接收到第二模块管理器发送的注册成功的指示。
如果是,则确定第二模块管理器完成了对第一模块的注册,且注册成功。并将第一模块的相关信息、模块注册表等存储在本地,具体过程同步骤205。
208:如果第一模块管理器接收到第二模块管理器发送的注册失败的指示时,确定当前对第一模块的方法功能的注册失败。
本方法,将拆分后的各个功能模块所具备的方法功能注册到模块管理器中,并在模块管理器中建立模块注册表,从而为查找能够为请求方提供相应功能的目的模块提供依据。
应理解,其他模块管理器的注册方法可参考图7所示的方法流,本实施例对其他模块管理器的注册过程不详细赘述。
可选的,在上述注册流程中,方法还包括:对各个功能模块的接口进行组装,得到各个功能模块的调用接口,以便在查找到其中的一个功能模块作为目标模块时,提供该目标模块的调用接口。
一种具体的实现方式是,在注册模块时,或者,用户空间的模块管理器从内核空间的模块管理器同步到新的模块时,或者,内核空间的模块管理器在接收到用户空间的模块管理器注册到用户空间的请求时,可采用以下方法组装得到调用接口,参见图8,本实施例以发起注册请求的模块管理器为第一模块管理器来说明,方法包括:
步骤204:判断第一模块管理器是否是内核空间的模块管理器,之后还包括:
如果该第一模块管理器是内核空间的模块管理器,则判断请求从目标模块获取的功能服务的目标模块管理器是否与第一模块管理器处于相同的地址空间,即判断目标模块管理器是否也是内核空间的模块管理器,如果是,则表示第一模块管理器和目标模块管理器为同一个模块管理器,且都是内核模块的模块管理器,此时组装相同地址空间的调用接口。
如果否,则表示目标模块管理器是用户空间的的模块管理器,与第一模块管理器是处于不同的地址空间,目标模块处于用户空间,第一模块处于内核空间,内核态调用用户态功能,此时目标模块的调用接口为组装用户空间的调用接口。
在上述步骤204中,如果判断第一模块管理器是用户空间的模块管理器,则进一步地判断第一模块管理器与目标模块管理器是否处于相同的地址空间,如果是,则说明目标模块管理器与第一模块管理器位于同一地址的用户空间,属于同一用户空间的能力调用,此时目标模块的调用接口为组装相同地址空间的调用接口。
如果目标模块管理器与第一模块管理器的地址空间不同,则进一步地判断该目标模块管理器是否处于其他用户空间的地址空间,如果是,则表示目标模块管理器与第一模块管理器都位于用户空间,但是属于不同的用户地址空间,则组装跨用户空间的调用接口。如果否,则表示目标模块管理器不在用户空间,而是位于内核空间,则用户态调用内核态的情形,此时目标模块的调用接口为组装内核空间的调用接口。
将上述各种情况的调用接口组成完成后,以便在图5所示的步骤103中使用,第一模块管理器获取目标模块的调用接口。
本方法在注册阶段,对各个功能模块的模块管理器进行接口组装,以便在调用接口功能的流程中使用,从而提高调用接口获取的效率,节省调用时间。
在一种具体的实施方式中,下面结合上述注册流程和接口组装过程对本实施例的上述步骤103进行说明。参见图9,第一模块请求调用其他模块的功能,并获得该功能的调用接口的过程如下:
301:第一模块通过其所在的模块管理器(假设第一模块管理器)发送请求,该请求用于获取一个功能服务。
302:第一模块管理器判断其所在位置是否在用户空间。
303:如果是,即第一模块管理器位于用户空间,则判断第一模块在第一模块管理器中是否已经注册。具体判断过程与前述步骤202相同。
例如在图6的示例中,第一模块为功能模块B,功能模块B向第一模块管理器发送请求,第一模块管理器接收该请求后判断其部署在用户空间1,则第一模块管理器判断功能模块B是否已经存在。如果不存在,则执行步骤304;如果存在,则执行步骤306。
304:如果否,即未注册,则向内核空间的模块管理器做模块同步。
比如第一模块管理器向内核空间的目标模块管理器发送同步请求,将第一模块管理器中功能模块B的所有功能方法上报给目标模块管理器。同理地,目标模块管理器也将内核模块1、内核模块2的所有功能方法发送给第一模块管理器,从而完成两个模块管理器的数据同步。
305:判断第一模块在第一模块管理器中是否已经注册成功。
306:如果是,则查找目标模块,并对目标模块的权限进行检查,判断所述目标模块是否具有权限。具体地查找目标模块的过程参见前述步骤102,此处不再赘述。
另外,在步骤305中,如果判断第一模块未注册成功,则未找到对应的目标模块,查找失败。
307:接步骤306,当对目标模块的权限检查合格时,判断是否组装了目标模块的调用接口。具体的组装过程可参见前述图8和对应实施例的描述,此处不再赘述。
308:如果在步骤307中判断组装了调用接口,则获取并保存该调用接口。
309:第一模块管理器获取该保存的调用接口,并反馈该调用接口给第一模块。
另外,如果步骤307中未组装调用接口,则查找或组装相应的调用接口,然后再向第一模块反馈该调用接口。
本方法只依赖由模块管理器提供的模块访问接口,可实现了模块间的解耦,即使请求访问的功能模块不存在,也可以在向模块管理器请求失败后作出相应处理,避免了拆分前硬性的依赖关系。
下面对上述实施例的步骤101之前,将操作系统中的每个驱动拆分成至少一个相互独立的功能模块的过程进行说明。
如图3所示,为内核空间的两个内核模块未拆分时的方法调用关系,如图4所示,为将内核模块拆分后的多个功能模块。具体地,从图3到图4的拆分过程可以通过以下方法来实现。本实施例以对内核空间的内核模块1(即驱动A1)进行拆分来举例,该方法包括:
第一步:获取内核模块1所包含的接口集,所述接口集包括至少一个接口,本示例中,内核模块1的接口集包括:第一接口(InterfaceFuncA)和第二接口(InterfaceFuncB)。
第二步:获取所述接口集中的每个接口所能够调用的方法以及各个方法之间的调用关系。
具体地,通过分析“语法树”分析,分别得到InterfaceFuncA和InterfaceFuncB所能够调用的所有方法,本示例中,通过“语法树”分析,InterfaceFuncA所能够调用的方法有:方法1(InnerFunc1)、方法2(InnerFunc2)和方法3(InnerFunc3)。InterfaceFuncB所能够调用的方法有:方法2(InnerFunc2)和方法3(InnerFunc3)。
第三步:根据每个接口所能够调用的方法和所述调用关系生成第一层级结构。
其中,第一层级结构又可称为“调用树”。
如图10所示,采用层级结构部署,以每个接口模块为单位,按照从上到下依次为包含的接口、调用树第一层、调用树第二层,以此类推。其中,将第一接口InterfaceFuncA所能够调用的功能划分为“功能模块A”,将第二接口InterfaceFuncB所能够调用的功能划分为“功能模块B”。其中,调用树第一层包含了上述接口InterfaceFuncA和InterfaceFuncB能够直接调用的方法。比如,InterfaceFuncB只能够直接调用InnerFunc3,则将InnerFunc3划分在调用树第一层;而InnerFunc3可以直接调用InnerFunc2,则将该InnerFunc3划分在调用树第二层。
同理地,InterfaceFuncA能够直接调用方法InnerFunc1和InnerFunc2,则这两个方法被划分在调用树第一层;InnerFunc2能够调用InnerFunc3,所以将InnerFunc3划分在调用树第二层。
应理解,上述第一层级结构还可以通过其他方式来表示,比如利用“二叉树的树状结构”表示,本实施例对上述每个接口所能够调用的方法和调用关系的表现形式不予限定。
第四步:如果所述第一层级结构中存在相重复的方法函数,则对重复的方法函数进行删减,得到第二层级结构。
具体地,判断第一层级结构两个或两个以上的接口中是否存在调用相同的方法函数,如果存在,则对相同的方法函数进行删除,只保留其中的一个方法函数,从而裁剪功能模块时,同一个方法函数被两个或两个以上的接口调用,进而互相影响。
在一种可能的实现方式中,判断功能模块B中的每一层的方法函数在其他接口的功能模块中是否存在相同的方法函数,比如判断功能模块B中的每一层的方法函数在功能模块A中是否存在相同的方法函数。经判断,功能模块B的调用树第一层的方法函数InnerFunc3与功能模块A中的调用树第二层InnerFunc3相同。功能模块B的调用树第二层的方法函数InnerFunc2,与功能模块A中的调用树第一层的方法函数InnerFunc2相同,所以需要对重复的方法函数“InnerFunc2”和“InnerFunc3”做删除,只在一个功能模块中保留“InnerFunc2”和“InnerFunc3”。
拆分原则,按照下面的三种参数进行逐次判断,具体包括:
(1)判断当前功能模块中的一个方法函数在业务调用过程中被调用平均次数n,选择被调用平均次数n较大的一个作为保留的方法函数,删除n较小值的功能模块中的方法函数;
(2)如果被调用的平均次数n相同,则判断该方法函数在每个功能模块中的调用状态,所述调用状态包括必然调用和条件调用,且必然调用的优先级高于条件调用。如果其中一个方法函数的状态是必然调用,其他的调用状态是条件调用,则确定该必然调用状态所对应的方法函数为需要保留的方法函数,其余的条件调用状态的方法函数则需要被删除。
(3)如果被检测的相同方法函数的调用状态相同,或者有两个或两个以上的方法函数具有相同的调用状态,比如两个方法函数都处于必然调用状态,则根据每个方法函数被调用的业务的优先级来确定是否保留。
比如,功能模块B的调用树第二层的方法函数InnerFunc2被调用的业务重要程度或优先级高于功能模块A中的调用树第一层的方法函数InnerFunc2,则确定保留功能模块B的方法函数InnerFunc2,删除功能模块B中的InnerFunc2。
示例性地,按照上述拆分原则对图10所示的第一层级结构做拆分,得到第二层级结构,如图11所示。功能模块B的接口InterfaceFuncB包含能够直接调用的方法函数InnerFunc3,被删除掉的方法函数InnerFunc2则可通过向功能模块A的接口InterfaceFuncA2来请求调用。同理地,对于功能模块A,当需要调用方法函数InnerFunc3时,需要向功能模块B的接口InterfaceFuncB请求调用。
第五步:根据第二层级结构部署互相独立的功能模块,完成对驱动程序的拆分和部署。
本实施例中,按照图11所示的第二层级机构部署功能模块,得到上述如图4所示的内核模块1。
应理解,上述拆分驱动的过程不仅仅用于内核空间,还适用于用户空间。具体地,用户空间的驱动程序的拆分和部署过程可以与前述内核模块1的拆分过程相同,本实施例对此不再赘述。
本实施例提供的拆分和部署方法,使得各个驱动程序之间调用关系解耦,部署后各个功能模块可以任意裁剪,不会出现编译、链接和运行时的异常情况。
另外,上述实施例的方法还包括:将内核空间的功能模块从内核空间移动到用户空间。
比如将图6所示的内核模块2的功能搬移到用户空间,一种可能的实施方式包括:
S1:在用户空间部署第一进程,第一进程为一个用户态进程或用户空间进程;
S2:将内核模块2的功能模块C部署在第一进程所对应的功能模块中,同时在第一进程的功能模块中添加一个新的模块管理器,用于管理和调用功能模块C的全部或部分功能;
S3:删除原内核空间中的功能模块C以及内核空间的目标模块管理器中调用所述功能模块C的所有功能。因为该部分功能已经搬移到新的模块管理器中,所以相应的功能要从目标模块管理器中删除。
如图12所示,为将图6所示的功能模块C从内核空间移动到用户空间后的示意图,另外,部署完成后还包括:新的模块管理器与原目标模块管理器之间做模块同步,待同步完成后各个模块管理器会根据请求方和被请求方的部署位置,自动组装并返回不同的模块的调用接口。
并且以下任意一种场景的技术方案与前述实施例的方法步骤相同,可参见上述图5、图7至图9中实施例的方法流程,其中所述以下任意一种场景包括:
当用户空间2中功能模块C想要调用内核模块1中的功能A1或功能A2时;
当用户空间2中功能模块C想要调用用户空间1中的功能B1时;
当内核模块1中功能模块A想要调用用户空间1中的功能B1时;
当内核模块1中功能模块A想要调用用户空间2中的功能C1时。
由于这些接口具有相同的调用参数,所以使用这些接口的功能模块并不会感知到这些接口的差异。当功能模块从内核空间迁移到用户空间时,实现了不用修改功能模块的一行代码,就能将内核模块移动到用户空间,实现将功能模块在内核空间和用户空间的灵活部署。
本实施例中,当一个功能模块需要从用户空间移动到内核空间,或者,从内核空间移动到用户空间时,由于经过拆分和部署后,各个功能模块之间互相不再具有依赖关系,只依赖于各个模块管理器提供的调用接口,并且使用相同的参数,所以功能模块之间的功能调用可以完全不感知这个变化。利用每个功能模块的模块管理器可以在不修改功能模块代码的情况下,将功能模块的部署位置进行灵活迁移。
下面介绍与上述方法实施例对应的装置实施例。
图13为本申请实施例提供的一种模块管理器的结构示意图。所述模块管理器由系统将至少一个驱动程序拆分成至少一个相互独立的功能模块时生成,所述模块管理器中注册有至少一个功能模块的相关信息,并且该模块管理器可以实现前述实施例中的功能调试方法。
具体地,如图13所示,所述模块管理器包括:接收单元1301、处理单元1302、发送单元1303。此外,所述模块管理器还可以包括存储单元等其他的单元或模块。比如存储单元等,本实施例对此不予限制。
其中,接收单元1301,用于接收第一模块发送的第一请求消息,所述第一请求消息中包括第一功能服务的标识;处理单元1302,用于根据所述第一功能服务的标识在模块注册表中查找目标模块,以及获得目标模块的调用接口,所述模块注册表中包括所述第一功能服务的标识与目标模块的对应关系,所述目标模块用于为所述第一模块提供第一功能服务;发送单元1303,用于向所述第一模块发送所述目标模块的调用接口。
可选的,在本实施例的一种具体的实现方式中,处理单元1302,还用于根据所述第一功能服务的标识在模块注册表中查找能够提供所述第一功能服务的功能模块,确定所述能够提供所述第一功能服务的功能模块为所述目标模块。
可选的,在本实施例的又一种具体的实现方式中,处理单元1302,还用于确定所述目标模块所在的目标模块管理器;根据所述目标模块管理器的位置和所述第一模块管理器的位置确定调用模式;根据所述调用模式,以及调用模式和调用接口之间的对应关系确定所述目标模块的调用接口。
可选的,在本实施例的又一种具体的实现方式中,所述第一模块对应的模块管理器为第一模块管理器,所述第一模块管理器的位置在内核空间或者用户空间中;当所述目标模块管理器的位置与所述第一模块管理器的位置为相同的地址空间时,所述调用模式为相同地址空间调用。处理单元1302,还用于在所述调用模式为相同地址空间调用时,确定所述目标模块的调用接口包括直接访问目标模块地址的方法和所述目标模块的地址。
可选的,在本实施例的又一种具体的实现方式中,当所述目标模块管理器的位置与所述第一模块管理器的位置为不同的地址空间时,所述调用模式为用户空间调用内核空间,或者,内核空间调用用户空间。
处理单元1302,还用于在所述调用模式为用户空间调用内核空间时,确定所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述内核空间接口的调用,以及调用所述内核空间接口所需的接口数据;在所述调用模式为内核空间调用用户空间时,确定所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述用户空间接口的调用,以及调用所述用户空间接口所需的接口数据。
可选的,在本实施例的又一种具体的实现方式中,当所述第一模块管理器的位置在第一用户空间,所述目标模块管理器的位置在第二用户空间时,所述调用模式为跨用户之间的地址空间调用,处理单元1302,还用于在所述调用模式为跨用户之间的地址空间调用时,确定所述目标模块的调用接口包括:使用操作系统进程间的方法发起对所述第二用户空间接口的调用,以及调用所述第二用户空间接口所需的接口数据。
可选的,在本实施例的又一种具体的实现方式中,处理单元1302,还用于在获得目标模块的调用接口之前,判断所述第一模块在第一模块管理器中是否已经注册;如果否,且所述第一模块管理器是内核空间的模块管理器,则注册并保存所述第一模块的相关信息,所述第一模块的相关信息包括:第一模块的标识、第一模块所包含的所有功能,以及每个所述功能所对应的功能标识。
可选的,在本实施例的又一种具体的实现方式中,处理单元1302,还用于如果所述第一模块管理器是用户空间的模块管理器,则将所述第一模块的相关信息注册到所述内核模块的模块管理器;以及,当通过所述接收单元接收到所述内核空间的模块管理器发送的指示时,确定所述第一模块在所述内核空间的模块管理器中注册成功。
另外,在具体硬件实现中,本实施例还提供了一种电子设备,该电子设备可以是一种终端设备,比如智能手机、笔记本电脑、平板电脑、PC、可折叠终端等,可用于实现前述实施例中的功能调用方法。
在本实施例中,当该电子设备作为一种终端设备时,可以实现前述实施例中图5,图7至图9所示的方法步骤。
当该电子设备为终端设备时,其结构组成与前述图2所示的终端设备的结构相同。包含:处理器110、存储器120和至少一个接口等部件,其中,如图13所示的模块管理器中,所述接收单元1301、处理单元1302、发送单元1303的功能可以由终端设备的处理器110和至少一个接口等实现;存储单元的功能可以由终端设备的存储器120实现。
此外,本申请实施例还提供了一种功能调用系统,如图14所示,该系统包括第一模块1401、第一模块管理器1402和目标模块1403。其中,第一模块1401为请求调用某一功能的模块,被调用某一功能的模块为目标模块1403,第一模块管理器1402为第一模块1401的模块管理器。
其中,第一模块1401和目标模块1403的结构可以与前述图2所示的终端设备的结构相同,也可以不相同,本实施例对每个模块的结构和具体形态不予限定。
此外,本实施例提供的系统还用于对操作系统的驱动进行拆分,拆分成至少一个互相独立的功能模块,以及由不同的模块管理器管理拆分后的功能模块,从而实现模块间的功能调用。
本实施例提供的功能调用系统,预先将系统的驱动模块拆分成更小粒度的功能模块,拆分后的功能模块之间互相独立,彼此之间没有耦合,然后通过同步消息、异步消息、单程消息方式进行通讯,使得各个功能模块之间通过调用接口来访问或者获取其他功能模块的相关功能。
此外,由于拆分后的各个功能模块互相独立,功能代码只依赖由模块管理器提供的功能模块访问接口,所以功能模块可以被任意裁剪。即使一个功能模块要访问的其他功能模块被裁剪掉了,也可以在请求目标功能模块管理器失败后作出响应处理,不会出现编译、链接和运行时的异常,克服了驱动构建难、裁剪难、维护难的问题。
此外,本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的功能调用方法的部分或全部步骤。所述的存储介质包括但不限于磁碟、光盘、只读存储记忆体(read only memory,ROM)或随机存储记忆体(random access memory,RAM)等。
在上述实施例中,可以全部或部分通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令,例如配对指令、传输指令,在计算机加载和执行所述计算机程序指令时,全部或部分地产生按照本申请上述各个实施例所述方法流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
此外,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。

Claims (10)

1.一种功能调用方法,其特征在于,应用于包含至少一个驱动程序的系统,且每个所述驱动程序被拆分成至少两个相互独立的功能模块,每个所述功能模块都被注册到相应的模块管理器,所述方法包括:
第一模块管理器接收第一模块发送的第一请求消息,所述第一请求消息中包括第一功能服务的标识;
所述第一模块管理器根据所述第一功能服务的标识在模块注册表中查找目标模块,所述模块注册表中包括所述第一功能服务的标识与所述目标模块的对应关系,所述目标模块用于为所述第一模块提供所述第一功能服务;
所述第一模块管理器获得所述目标模块的调用接口;
所述第一模块管理器向所述第一模块发送所述目标模块的调用接口,其中,所述第一模块属于所述至少两个相互独立的功能模块中的一个功能模块,所述目标模块属于所述至少两个相互独立的功能模块中的另一个功能模块,所述调用接口用于供所述第一模块向所述目标模块请求所述第一功能服务。
2.根据权利要求1所述的方法,其特征在于,所述第一模块管理器根据所述第一功能服务的标识在模块注册表中查找目标模块,包括:
所述第一模块管理器根据所述第一功能服务的标识在模块注册表中查找能够提供所述第一功能服务的功能模块,确定所述能够提供所述第一功能服务的功能模块为所述目标模块。
3.根据权利要求1或2所述的方法,其特征在于,所述第一模块管理器获得目标模块的调用接口,包括:
所述第一模块管理器确定所述目标模块所在的目标模块管理器;
所述第一模块管理器根据所述目标模块管理器的位置和所述第一模块管理器的位置确定调用模式;
所述第一模块管理器根据所述调用模式,以及调用模式和调用接口之间的对应关系确定所述目标模块的调用接口。
4.根据权利要求3所述的方法,其特征在于,所述第一模块对应的模块管理器为第一模块管理器,所述第一模块管理器的位置在内核空间或者用户空间中;
当所述目标模块管理器的位置与所述第一模块管理器的位置为相同的地址空间时,所述调用模式为相同地址空间调用;
确定所述目标模块的调用接口,包括:
在所述调用模式为相同地址空间调用时,所述目标模块的调用接口包括:直接访问目标模块地址的方法和所述目标模块的地址。
5.根据权利要求4所述的方法,其特征在于,当所述目标模块管理器的位置与所述第一模块管理器的位置为不同的地址空间时,所述调用模式为用户空间调用内核空间,或者,内核空间调用用户空间;
确定所述目标模块的调用接口,包括:
在所述调用模式为用户空间调用内核空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述内核空间的接口的调用,以及调用所述内核空间的接口所需的接口数据;
在所述调用模式为内核空间调用用户空间时,所述目标模块的调用接口包括:使用操作系统提供的方法发起对所述用户空间的接口的调用,以及调用所述用户空间的接口所需的接口数据。
6.根据权利要求4所述的方法,其特征在于,当所述第一模块管理器的位置在第一用户空间,所述目标模块管理器的位置在第二用户空间时,所述调用模式为跨用户之间的地址空间调用,
确定所述目标模块的调用接口,包括:
在所述调用模式为跨用户之间的地址空间调用时,所述目标模块的调用接口包括:使用操作系统进程间的方法发起对所述第二用户空间的接口的调用,以及调用所述第二用户空间的接口所需的接口数据。
7.根据权利要求1、2、5、6任一项所述的方法,其特征在于,所述第一模块管理器获得目标模块的调用接口之前,还包括:
所述第一模块管理器判断所述第一模块在第一模块管理器中是否已经注册;
如果否,且所述第一模块管理器是内核空间的模块管理器,则所述第一模块管理器注册并保存所述第一模块的相关信息,所述第一模块的相关信息包括:第一模块的标识、第一模块所包含的所有功能,以及每个所述功能所对应的功能标识。
8.根据权利要求7所述的方法,其特征在于,还包括:
如果所述第一模块管理器是用户空间的模块管理器,则所述第一模块管理器将所述第一模块的相关信息注册到所述内核空间的模块管理器;
当接收到所述内核空间的模块管理器发送的指示时,确定所述第一模块在所述内核空间的模块管理器中注册成功。
9.一种模块管理装置,其特征在于,包括:处理器和存储器,所述处理器与所述存储器耦合;
所述存储器,用于存储计算机程序指令;
所述处理器,用于执行所述存储器中存储的指令,使得所述模块管理装置执行如权利要求1至8中任一项所述的方法。
10.一种可读存储介质,其特征在于,所述可读存储介质存储有程序,当程序被一个或多个处理器执行时,实现如权利要求1至8中任一项所述的方法。
CN202210434167.3A 2020-08-31 2020-12-30 一种功能调用方法和装置 Active CN114968384B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN2020108959943 2020-08-31
CN202010895994 2020-08-31
CN202011627521.1A CN114116246A (zh) 2020-08-31 2020-12-30 一种功能调用方法和装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202011627521.1A Division CN114116246A (zh) 2020-08-31 2020-12-30 一种功能调用方法和装置

Publications (2)

Publication Number Publication Date
CN114968384A CN114968384A (zh) 2022-08-30
CN114968384B true CN114968384B (zh) 2023-04-04

Family

ID=80360515

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202011627521.1A Pending CN114116246A (zh) 2020-08-31 2020-12-30 一种功能调用方法和装置
CN202210434167.3A Active CN114968384B (zh) 2020-08-31 2020-12-30 一种功能调用方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202011627521.1A Pending CN114116246A (zh) 2020-08-31 2020-12-30 一种功能调用方法和装置

Country Status (1)

Country Link
CN (2) CN114116246A (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117222983A (zh) * 2022-04-12 2023-12-12 华为技术有限公司 一种测试方法和控制装置
CN115291877A (zh) * 2022-10-10 2022-11-04 深圳市明源云客电子商务有限公司 业务开发方法、装置、终端设备及计算机可读存储介质
CN115866046A (zh) * 2022-11-30 2023-03-28 北京安天网络安全技术有限公司 一种服务调用系统、电子设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104360889B (zh) * 2014-12-08 2017-11-10 中科创达软件股份有限公司 一种驱动程序加载方法及装置
CN104639335B (zh) * 2015-01-30 2018-03-09 国家计算机网络与信息安全管理中心 智能网卡驱动的二次开发系统及其方法
CN110532106B (zh) * 2019-07-16 2023-01-13 华为技术有限公司 进程间的通讯方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN114968384A (zh) 2022-08-30
CN114116246A (zh) 2022-03-01

Similar Documents

Publication Publication Date Title
EP4002108B1 (en) Application start method and electronic device
CN114968384B (zh) 一种功能调用方法和装置
CN111625431B (zh) 一种日志信息生成方法、装置及电子设备
WO2021027630A1 (zh) 补丁方法、相关装置及系统
CN114461239B (zh) 软件升级系统和软件升级方法
US20240111595A1 (en) Application deployment method, distributed operating system, electronic device, and storage medium
CN114741256B (zh) 传感器监听方法、装置及终端设备
CN115309431B (zh) 一种参数更新方法、可读介质和电子设备
US20230350738A1 (en) Method for Reusing Shared Library and Electronic Device
CN116795435A (zh) 兼容性管控方法及相关设备
CN116136826A (zh) 内存访问方法、芯片、电子设备及计算机可读存储介质
CN115278642A (zh) 获取sim卡的信息的方法、电子设备及终端设备
CN116679895B (zh) 一种协同业务的调度方法、电子设备及协同系统
WO2024083114A1 (zh) 一种软件分发方法、电子设备及系统
CN117082480B (zh) 基于蓝牙通信的数据处理方法、设备及存储介质
WO2023109607A1 (zh) 应用界面跨设备显示方法、设备系统
CN117632534A (zh) 一种进程间通信方法与电子设备
CN117931384A (zh) 一种业务访问的方法、系统、电子设备及存储介质
CN116009742A (zh) 一种跨设备文件显示方法、设备及系统
CN117857646A (zh) 数据网络共享方法、电子设备及存储介质
CN117971335A (zh) 一种展示方法、电子设备及介质
CN117786706A (zh) 访问控制方法及电子设备
CN116991532A (zh) 一种虚拟机窗口的显示方法、电子设备及系统
CN118075393A (zh) 一种显示方法和电子设备
CN117156023A (zh) 一种电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant