硬件抽象层复用方法、装置、操作系统和设备与流程

文档序号:17488775发布日期:2019-04-23 20:13阅读:388来源:国知局
硬件抽象层复用方法、装置、操作系统和设备与流程

本发明涉及操作系统技术领域,尤其涉及一种硬件抽象层复用方法、装置、操作系统和设备。



背景技术:

手机等终端设备厂商在开发终端设备时,往往仅针对一种操作系统开发一套硬件抽象层(hardwareabstractionlayer,简称hal)。如果该终端设备中还需支持另一种操作系统,则最高效的方法就是重用即复用这套hal。而往往两个不同的操作系统所基于的基础c库是不同的,这就对复用hal带来了适配难度。

目前,最常使用的适配方案是直接采用libhybris机制加载hal,可以实现基于bionic的安卓操作系统与基于glibc的操作系统复用同一hal,其中,bionic为安卓操作系统的基础c库,glibc为gnu操作系统的基础c库。为使用libhybris机制,首先需要将hal使用到的所有函数和数据结构在两个基础c库上做匹配,即建立两个基础c库中函数、数据结构的映射关系,而且还可能需要在两个基础c库中额外添加或者修改其中的函数。

基于libhybris机制仅能够实现上述特定两种操作系统对hal的复用,局限性较大;而且还需要对两种基础c库做复杂的适配处理,实现难度较大。



技术实现要素:

有鉴于此,本发明实施例提供一种硬件抽象层复用方法、装置、操作系统和设备,用以降低不同操作系统复用同一硬件抽象层的难度。

第一方面,本发明实施例提供一种硬件抽象层复用方法,应用于第一操作系统的第一进程中,包括:

响应于硬件操作指令,调用所述第一操作系统对应的虚拟硬件抽象层中的第一应用程序接口;

通过跨进程通信将所述应用程序接口的调用请求发送至第二操作系统,以使所述第二操作系统中的第二进程根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

第二方面,本发明实施例提供一种硬件抽象层复用装置,应用于第一操作系统的第一进程中,包括:

调用模块,用于响应于硬件操作指令,调用所述第一操作系统对应的虚拟硬件抽象层中的第一应用程序接口;

发送模块,用于通过跨进程通信将所述第一应用程序接口的调用请求发送至第二操作系统,以使所述第二操作系统中的第二进程根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

第三方面,本发明实施例提供一种操作系统,包括:应用程序框架层和虚拟硬件抽象层;

所述应用程序框架层中包括一进程,该进程用于实现如第一方面所述的硬件抽象层复用方法;

所述虚拟硬件抽象层中应用程序接口的配置与另一操作系统对应的硬件抽象层中应用程序接口的配置具有对应关系。所述虚拟硬件抽象层中应用程序接口的实现指示了将对虚拟硬件抽象层中应用程序接口的调用请求通过跨进程通信传输至另一操作系统。该操作系统对应于第一方面中的第一操作系统。

第四方面,本发明实施例提供一种电子设备,该电子设备可以实现为用户终端设备,包括处理器和存储器,所述存储器用于存储支持用户终端设备执行上述第一方面中硬件抽象层复用方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。该电子设备中还可以包括通信接口,用于与其他设备或通信网络通信。

另外,本发明实施例提供了一种计算机存储介质,用于储存该电子设备所用的计算机软件指令,其包含用于执行上述第一方面中硬件抽象层复用方法所涉及的程序。

第五方面,本发明实施例提供一种硬件抽象层复用方法,应用于第一操作系统的第一进程中,包括:

接收第二操作系统中第二进程通过跨进程通信发送的调用请求,所述调用请求是所述第二进程响应于硬件操作指令而调用所述第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的;

根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口,以执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

第六方面,本发明实施例提供一种硬件抽象层复用装置,应用于第一操作系统的第一进程中,包括:

接收模块,用于接收第二操作系统中第二进程通过跨进程通信发送的调用请求,所述调用请求是所述第二进程响应于硬件操作指令而调用所述第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的;

调用模块,用于根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口,以执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

第七方面,本发明实施例提供一种操作系统,包括:应用程序框架层和跨进程通信接口,应用程序框架层中包括一进程,该进程用于实现如第五方面所述的硬件抽象层复用方法。该操作系统对应于第五方面中的第一操作系统。

第八方面,本发明实施例提供一种电子设备,该电子设备可以实现为用户终端设备,比如智能手机等,包括处理器和存储器,所述存储器用于存储支持该电子设备执行上述第五方面中硬件抽象层复用方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。该电子设备中还可以包括通信接口,用于与其他设备或通信网络通信。

另外,本发明实施例提供了一种计算机存储介质,用于储存该电子设备所用的计算机软件指令,其包含用于执行上述第五方面中硬件抽象层复用方法所涉及的程序。

本发明实施例提供的硬件抽象层复用方法、装置、操作系统和设备,在某终端设备中包含有基于不同基础c库的第一操作系统和第二操作系统,初始开发的hal是针对第二操作系统的,称为真实hal。为使得第一操作系统能够复用该真实hal,在第一操作系统侧设置虚拟hal,该虚拟hal中封装的应用程序接口(applicationprograminterface,简称api)的配置与真实hal中封装的api的配置具有对应关系,比如相同,但是该虚拟hal中封装的api的实现与真实hal中封装的api的实现不同,虚拟hal中封装的api实现指示了通过跨进程通信将第一操作系统侧调用的api传输至第二操作系统侧,而真实hal中封装的api实现是实际完成api调用所需执行的相关操作信息。

基于此,当第一操作系统侧响应于用户的操作而触发针对某硬件比如摄像头的硬件操作指令时,会触发位于第一操作系统侧的第一进程调用与该硬件对应的虚拟hal中相应的第一api比如摄像头开启接口,从而,第一进程可以基于该第一api的实现,通过跨进程通信将调用该第一api的调用请求发送至第二操作系统侧,第二操作系统的第二进程收到该调用请求后,调用真实hal中对应的第二api,从而根据该第二api的实现完成硬件操作指令的执行。本方案,仅需在第一操作系统侧设置上述虚拟hal即使得虚拟hal中api配置与真实hal的api配置具有对应关系,并将虚拟hal中的api实现设置为通过跨进程通信将对虚拟hal中某个api的调用传递到对应于真实hal的第二操作系统中,即可使得第一操作系统能够复用第二操作系统侧的真实hal,实现方便,且可以适用于任意不同的操作系统。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种硬件抽象层复用场景示意图;

图2为本发明实施例提供的一种硬件抽象层复用方法的流程图;

图3为本发明实施例提供的另一种硬件抽象层复用方法的流程图;

图4为本发明实施例提供的又一种硬件抽象层复用方法的流程图;

图5为本发明实施例提供的一种硬件抽象层复用方法的交互图;

图6为与图2所示实施例对应的一种硬件抽象层复用装置的结构示意图;

图7为与图2所示实施例对应的一种操作系统的组成示意图;

图8为与图6所示硬件抽象层复用装置对应的电子设备的结构示意图;

图9为与图3或图4所示实施例对应的一种硬件抽象层复用装置的结构示意图;

图10为与图3或图4所示实施例对应的一种操作系统的组成示意图;

图11为与图9所示硬件抽象层复用装置对应的电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。

应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述xxx,但这些xxx不应限于这些术语。这些术语仅用来将xxx区分开。例如,在不脱离本发明实施例范围的情况下,第一xxx也可以被称为第二xxx,类似地,第二xxx也可以被称为第一xxx。

取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。

另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。

图1为本发明实施例提供的一种硬件抽象层复用场景示意图,如图1中所示,假设某终端设备中包含有基于不同基础c库的两个操作系统os_a与os_b,其中,os_a是基于基础c库——libc_a开发的,os_b是基于基础c库——libc_b开发的a。对应于该场景,本发明实施例提供的硬件抽象层复用方法用于实现图1中所示两个操作系统——os_a与os_b对位于os_a侧的hal的复用。

假设初始开发的hal是针对os_a的,为与虚拟hal区别,假设称为真实hal。为使得os_b能够复用该真实hal,在os_b侧设置虚拟hal。具体地,该虚拟hal中封装的api的配置(也可以称为定义)与真实hal中封装的api的配置具有对应关系,其中,优选地,可以设置该虚拟hal中封装的api的配置与真实hal中封装的api的配置相同,但是该虚拟hal中封装的api的实现与真实hal中封装的api的实现不同,虚拟hal中封装的api实现指示了通过跨进程通信将os_b侧调用的api传输至os_a侧,而真实hal中封装的api实现是实际完成api调用所需执行的相关操作信息。

其中,虚拟hal中封装的api的配置与真实hal中封装的api的配置具有对应关系可以表现为一一对应关系,也可以表现为多对一的对应关系。举例来说,假设真实hal中存在某个api配置为function(a,b,c),则虚拟hal中与该api对应的api配置可以为:function(a),function(b),function(c),即形成三对一的对应关系。

其中,由于虚拟hal中api实现的内容涉及到跨进程通信,因此,需要建立如图1中所示的上述两个操作系统间的跨进程通信(ipc)连接:ipcbridge,如图中示意的ipc_a,ipc_b是该通信的两端接口。可选地,该跨进程通信可以预先建立好,以便后续直接使用,也可以在需要时实时建立。

可以理解为,上述跨进程通信的建立,即为在os_a侧建立接口ipc_a,在os_b侧建立接口ipc_b,其中,ipc_a是基于libc_a的,ipc_b是基于libc_b的。

可选地,该跨进程通信连接可以基于操作系统内核kernel中提供的ipc机制实现,如socket,openbinder,但是并不限于这两种实现方式。

另外,本发明实施例中的真实hal和虚拟hal可以认为是针对终端设备中的某个硬件的抽象层,比如摄像头的硬件抽象层:camerahal;或者,传感器的硬件抽象层:sensorhal,等等。

基于上述两个操作系统的设置情况,举例来说,当os_b侧某个相机应用程序响应于用户的操作而需要调用camerahal来操作摄像头时,该相机应用程序可以启动一个进程,该进程可以认为是进程b,该进程b比如调用虚拟camerahal中的某个api,假设该api的配置和实现如下:

该api用于触发对摄像头的开启操作。其中,boolopen(intcameraid)为该api的配置,{}中的内容为该api的实现。cameraid是调用参数,指示需要操作的是哪个摄像头,比如id=0为前置摄像头,id=1为后置摄像头。api_open指示了是调用open这个api,return把ipc_send的返回结果作为open的api结果返回。

可以看出,该api的实现指示了通过跨进程通信(ipc)向os_a侧传递该api的调用。从而,进程b可以实时创建与os_a侧某个预设进程称为进程a间的跨进程通信,并通过建立的跨进程通信将对该api的调用请求发送至进程a。该调用请求中可以携带有api调用相关参数,比如需要调用的api是哪个api的标识信息——api_open,以及需要开启的是哪个摄像头——cameraid,从而,进程a可以根据该调用请求调用真实camerahal中的对应api来完成相机应用程序所需对摄像头进行的操作。假设该对应api在真实camerahal中的配置和实现如下:

其中,open(intcameraid)为该api的配置,{}中的内容为该api的实现。可以看出,该api在真实camerahal中的实现于在虚拟camerahal中的实现不同,在真实camerahal中的实现具体为对相应硬件的操作信息等。

上述举例中,虚拟hal与真实hal中api的配置相同,均为boolopen(intcameraid)。

值得说明的是,上述进程a是与真实camerahal对应的进程,可以将该进程a视为真实camerahal的服务进程,是预先创建的,而进程b可以视为客户端进程,该进程a可以是随着os_a的启动而启动,之后一直监听是否有来自oa_b的客户端进程需要调用真实camerahal中的api。

通过在os_b中设置虚拟hal,且该虚拟hal中api的配置与真实api的配置具有对应关系,比如可以直接复制自真实hal即可形成虚拟hal中的api配置。而虚拟hal中api的实现仅需要提供ipc的发送功能以及提供相关调用参数即可,从而虚拟hal相对于真实hal来说,无需复杂的功能实现逻辑,即无需真正执行对硬件的操作控制,实现简单。

下面结合如下实施例,分别以上述不同操作系统的角度对本发明实施例提供的硬件抽象层复用方法进行介绍。

图2为本发明实施例提供的一种硬件抽象层复用方法的流程图,本实施例提供的该硬件抽象层复用方法在图1所示的第一操作系统中实现,具有由第一操作系统中的第一进程执行。结合图1,假设本实施例中该第一操作系统为os_b,第二操作系统为os_a,第一进程为进程b,第二进程为进程a。如图2所示,该方法包括如下步骤:

201、响应于硬件操作指令,第一操作系统的第一进程调用第一操作系统对应的虚拟硬件抽象层中的第一应用程序接口。

可选地,实际应用中,进程b可以是由os_b侧的应用程序或应用程序框架层启动的某个进程,比如为上述举例中相机应用程序启动的一个进程。可选地,该进程b也可以是与虚拟hal对应的一个专用进程,用于对虚拟hal中api进行调用,此时,该进程b可以供应用程序进行访问。

比如:相机应用程序响应于用户触发的拍照操作指令,访问与摄像头对应的虚拟camerahal对应的进程b,向该第一进程传递相关参数,比如摄像头标识camera0,以及工作模式——拍照。从而,进程b基于该参数调用虚拟camerahal中的拍照api。

202、第一进程通过跨进程通信将应用程序接口的调用请求发送至第二操作系统,以使第二操作系统中的第二进程根据调用请求调用第二操作系统对应的硬件抽象层中的第二应用程序接口执行硬件操作指令。

其中,第一应用程序接口在虚拟hal中的配置与第二应用程序接口在第二操作系统对应的hal即真实hal中的配置具有对应关系。

本实施例中,假设上述对应关系体现为配置相同,从而上述第一api与第二api相同。

如前所述,进程b在调用某个api时,基于该api的实现,将通过跨进程通信将该api的调用请求发送至os_a,以使os_a中的进程a根据该调用请求调用进程b对应的真实hal中的该api以执行硬件操作指令。其中,该api的实现中包含的内容指示了通过跨进程通信将api的调用参数传输至进程a中,该调用参数比如包括该api的标识以及该api对应的硬件标识。进程b可以从中提取出该调用参数,封装在调用请求中发送至进程a。

实际应用中,进程a调用真实hal中进程b需要调用的api来执行上述硬件操作指令,可能会涉及到硬件操作结果的回调即反馈给进程b,也可能不会涉及硬件操作结果的回调。比如,上述api可能仅是实现对比如查询用户终端设备共有几个摄像头,此时将不会有硬件操作结果的回调;再比如,上述api可能是实现触发摄像头进行录像,此时,会有硬件操作结果的回调,即将摄像头拍得的视频回调至第一进程。

因此,在涉及到硬件操作结果回调的情形下,进程b还需接收进程a反馈的硬件操作结果。

可选地,该硬件操作结果可以包括:硬件数据,该硬件数据由执行硬件操作指令的硬件即与真实hal对应的硬件产生,比如上述录像视频;或者,该硬件操作结果为硬件数据在共享内存中的存储地址;或者,该硬件操作结果为操作失败提示信息。

可选地,为了避免进程b与进程a间需要传输过大的数据量使得所需传输时间过长,从而使得对真实hal和虚拟hal的过长占用时间,影响其他需要调用真实hal、虚拟hal的进程的调用,进程a可以根据硬件数据的数据量的大小确定是直接向进程b反馈该硬件数据。比如,当该硬件数据的数据量小于预设阈值时,直接反馈至进程b,反之,将该硬件数据存入共享内存中,从而仅将该硬件数据在共享内存中的存储地址反馈给进程b,使得进程b从该共享内存中获取该硬件数据。其中,共享内存是预设的两个操作系统可以共用的存储空间。

值得说明的是,上述操作失败提示信息可以视为是一种特殊的硬件操作结果,该操作失败提示信息是指进程a在接收到进程b发送的调用请求之后,在基于该调用请求调用真实hal中相应api前,若识别出需调用的该api具有独占操作属性,进而确定该真实hal对应的硬件处于忙碌状态时向进程b发送的。当该硬件处于忙碌状态时,说明有其他进程正在调用该真实hal来操作该硬件,则此时进程a无法调用该真实hal中的api,从而向第一进程反馈操作失败提示信息。其中,关于上述独占操作属性的说明将在后续实施例中详细介绍。

综上,本发明实施例提供的硬件抽象层复用方法,仅需在第一操作系统侧设置具有如下特征的虚拟hal,即可以实现第一操作系统对第二操作系统对应的真实硬件抽象层的复用:虚拟hal中设置的api的配置与真实hal中api配置具有对应关系l,并将虚拟hal中的api实现设置为通过跨进程通信将对虚拟hal中某个api的调用传递到对应于真实hal的第二操作系统中。该方案,实现方便,且可以适用于任意不同的操作系统。

图3为本发明实施例提供的另一种硬件抽象层复用方法的流程图,本实施例提供的该硬件抽象层复用方法由第一操作系统中的第一进程来执行。假设本实施例中的第一操作系统是图1所示的os_a,第二操作系统是图1所示的os_b,第一进程为图1所示的进程a,第二进程为图1所示的进程b,从而,如图3所示,该方法可以包括如下步骤:

301、第一进程接收第二操作系统中第二进程通过跨进程通信发送的调用请求,调用请求是第二进程响应于硬件操作指令而调用第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的。

302、第一进程根据调用请求调用第一操作系统对应的硬件抽象层中的第二应用程序接口,以执行硬件操作指令。

其中,第一应用程序接口在虚拟hal中的配置与第二应用程序接口在第一操作系统os_a对应的硬件抽象层即真实hal中的配置具有对应关系。

本实施例中,假设上述对应关系体现为第一应用程序接口在虚拟hal中的配置与第二应用程序接口在真实hal中的配置相同,以下基于该假设进行说明。

其中,上述调用请求中可以携带有进程b所要调用的api的标识以及需要操作的硬件的标识等信息,从而进程a可以据此调用真实hal中相应的api。

进程a可以是预先设置在os_a侧的一个进程,在os_a启动时即存在。该进程a负责os_b中的进程对os_a所对应的真实hal的调用,以便os_b可以复用os_a侧的真实hal。

进程a执行上述步骤的具体过程可以参见前述实施例中的相关说明,在此不赘述。

图4为本发明实施例提供的又一种硬件抽象层复用方法的流程图,与图3所示实施例一样,本实施例提供的该硬件抽象层复用方法可以由第一操作系统中的第一进程来执行。假设本实施例中的第一操作系统是图1所示的os_a,第二操作系统是图1所示的os_b,第一进程为图1所示的进程a,第二进程为图1所示的进程b,从而,如图4所示,该方法可以包括如下步骤:

401、第一进程接收第二操作系统中第二进程通过跨进程通信发送的调用请求,调用请求是第二进程响应于硬件操作指令而调用第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的。

402、第一进程根据调用请求确定需要调用第一操作系统对应的硬件抽象层中的第二应用程序接口,若识别出第二应用程序接口具有独占操作属性,则查看硬件抽象层对应的硬件的状态。

403、若硬件的状态表示硬件处于空闲状态,则第一进程根据调用请求调用第一操作系统对应的硬件抽象层中的第二应用程序接口,以执行硬件操作指令。

404、第一进程将硬件的状态置为忙碌状态。

405、若硬件执行硬件操作指令而产生的硬件数据的数据量小于预设阈值,则第一进程将硬件数据发送至第二进程;若硬件数据的数据量大于或等于预设阈值,则第一进程将硬件数据存入共享内存中,并将硬件数据在共享内存中的存储地址发送至第二进程。

由于进程b发送的调用请求中会携带有进程b在虚拟hal中所调用的第一api的标识,从而,进程a可以基于真实hal中api配置与虚拟hal中api配置见的对应关系,确定在真实hal中与进程b所需调用的第一api对应的第二api。

在一可选实施例中,进程a在接收到上述调用请求后,可以随即调用真实hal中的相应的第二api。但是,在一些实际应用场景中,当进程a需要调用真实hal中的该第二api来对该真实hal所对应的硬件进行某种操作时,可能还有os_a中的其他进程之前已经调用该真实hal中的某个api正在对该硬件进行操作。而如果该硬件在同一时间仅能够被一个进程操作,即如果该硬件属于独占硬件,则此时不应该让进程a调用真实hal中的该api。举例来说,假设某个进程正在控制摄像头进行拍照操作,则另一个进程就不能同时使用该摄像头了。

因此,为了避免不同进程对同一真实hal的同时调用,即避免不同进程对同一硬件的同时从操作,进程a还提供了互斥机制,该互斥机制简单来说就是当真实hal当前被某个进程调用时,进程a会将该真实hal所对应硬件的状态置为忙碌状态,反之置为空闲状态,以避免多个进程对该真实hal的同时调用。其中,该忙碌状态是指该硬件被某个进程占用,因此,该忙碌状态也指被占用状态,相应地,空闲状态也可以指未被占用状态。

从而,为实现上述互斥功能,进程a在基于进程b的调用请求调用真实hal中第二api之前,可以先识别该第二api是否具有独占操作属性,若识别出该第二api具有独占操作属性,则查看真实hal所对应硬件的状态,如果该硬件的状态表示该硬件处于空闲状态,则进程a此时便可以根据进程b的调用请求调用真实hal中第二api以执行硬件操作指令;而若该硬件的状态表示该硬件处于忙碌状态,则进程a则向进程a发送操作失败提示信息,此时说明该硬件正被其他进程操作。相反地,若识别出该第二api不具有独占操作属性,则说明此时即使有其他进程正在调用真实hal来操作该硬件,进程a所调用的第二api的执行也不会影响到该其他进程的正常进行,此时,进程a也可以调用真实hal中第二api以执行硬件操作指令。

本实施例中,上述第二api的独占操作属性,也可以称为排他操作属性,其含义可以理解为:如果允许不同进程同时调用该第二api对硬件进行某种操作,则该第二api不具有独占操作属性,相反地,如果不允许不同进程同时调用该第二api对硬件进行某种操作,则该第二api具有独占操作属性。举例来说,假设该第二api能够实现对摄像头的开启操作,则由于实际上某个进程已经开启摄像头的情况下,不允许另一进程再次开启摄像头,所以用于实现摄像头开启功能的该第二api具有独占操作属性。再比如,假设该第二api用于实现终端设备中包含的摄像头个数的查询功能,则由于实际上是可以允许多个进程同时查询摄像头个数的,所以该第二api不具有独占操作属性。

可选地,可以根据真实hal中该第二api的配置来识别该第二api是否具有独占操作属性。比如,可以在该第二api的配置中设置某个字段,该字段的不同取值用于表示该第二api是否具有独占操作属性,比如00表示不具有独占操作属性,01表示具有独占操作属性。

在一可选实施例中,进程a可以在每接收到进程b发送的调用请求后,若识别出该调用请求在真实hal中所对应的api具有独占操作属性,则随即进行硬件状态的查询。但是,在另一可选实施例中,进程a也可以仅在识别出需要调用的是具有独占操作属性的某种特定api时,才查看硬件的状态,以减少查询操作。因此,进程a在接收到进程b发送的调用请求后,若识别出该调用请求在真实hal中所对应的第二api具有独占操作属性,并且该第二api是用于实现对硬件的开启操作的,此时才查看该硬件的状态。以摄像头应用为例来说,一般地,通过摄像头进行拍照的过程中,进程b可能需要依次调用开启摄像头、开启预览、拍照、关闭摄像头这几个api。进程b在虚拟hal中调用开启摄像头的api时,进程a会接收到进程b发送的该开启摄像头的api对应的调用请求,进而,进程a识别出该api具有独占操作属性且用于实现摄像头的开启操作,则查询摄像头的状态,假设此时摄像头处于空闲状态,则进程a调用真实hal中对应的开启摄像头的api对摄像头执行开启操作,并将摄像头的状态置为忙碌状态,此时,可选地,进程a也可以记录下将摄像头置为忙碌状态的进程为进程b。之后,可选地,进程a向进程b反馈开启成功指示,从而,进程b继续调用虚拟hal中开启预览的api。此时,进程a在接收到该开启预览的api对应的调用请求后,即使识别出真实hal中该开启预览的api具有独占操作属性,也可以不进行摄像头状态的查询,因为进程b还并未结束对摄像头的操作。直到进程a接收到进程b对关闭摄像头的api的调用请求,识别出该关闭摄像头的api具有独占操作属性,且用于实现对摄像头的关闭操作,此时,进程a将摄像头的状态置为空闲状态,此时进程b对摄像头的操作结束。

因此,进程a若识别出第二api具有独占操作属性,并且第二api用于实现对硬件的关闭操作,则将硬件的状态置为空闲状态。另外,实际应用中,对真实hal的调用,除了存在进程a需要调用真实hal的情形外,还可能存在os_a侧某应用程序启动的某个进程,假设称为第三进程需要调用真实hal的情形。此时,第三进程在调用真实hal前,需要向进程a查询该真实hal对应的硬件的状态,以在该硬件处于空闲状态时对真实hal进行调用。因此,进程a还可以接收os_a中第三进程通过跨进程通信发送的用于查询真实hal对应的硬件的状态的查询请求,并将硬件的状态发送给第三进程,以使第三进程根据该状态确定能否调用真实hal。

如前述实施例中所述,为了避免对真实hal的过长占用时间,进程a可以根据调用第二api而执行硬件操作指令时硬件所产生的硬件数据的数据量大小确定是直接将该硬件数据反馈给进程b,还是将该硬件数据在共享内存中的存储地址反馈至进程b。

综上,在具有真实hal的os_a侧提供进程a,以监听来自os_b的对真实hal的调用请求,以便辅助完成os_b对真实hal的复用;另外,进程a还提供互斥机制,以避免多个进程对独占硬件所对应的该真实hal的同时调用。

图5为本发明实施例提供的一种硬件抽象层复用方法的交互图,结合图1,本实施例中该第一操作系统为os_b,第二操作系统为os_a,第一进程为进程b,第二进程为进程a。并且假设虚拟hal中api配置与真实hal中api配置相同。如图5所示,可以包括如下步骤:

501、响应于硬件操作指令,第一操作系统的第一进程调用第一操作系统对应的虚拟硬件抽象层中的应用程序接口。

502、第一进程通过跨进程通信将应用程序接口的调用请求发送至第二操作系统中的第二进程。

503、第二进程识别出该应用程序接口具有独占操作属性,查看真实硬件抽象层对应的硬件的状态。

504、若硬件处于空闲状态,则第二进程根据调用请求调用第二操作系统对应的真实硬件抽象层中的所述应用程序接口,以执行硬件操作指令。

505、第二进程将硬件的状态置为忙碌状态。

506、第二进程接收第二操作系统中第三进程通过跨进程通信发送的用于查询真实hal对应的硬件的状态的查询请求。

507、第二进程将指示硬件处于忙碌状态的查询响应发送给第三进程。

508、第三进程放弃调用真实hal。

509、第二进程将硬件执行硬件操作指令而产生的硬件数据发送至第一进程。

以下将详细描述本发明的一个或多个实施例的硬件抽象层复用装置。本领域技术人员可以理解,这些硬件抽象层复用装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。

图6为与图2所示实施例对应的一种硬件抽象层复用装置的结构示意图,如图6所示,该装置包括:调用模块11、发送模块12、接收模块13。

调用模块11,用于响应于硬件操作指令,调用所述第一操作系统对应的虚拟硬件抽象层中的第一应用程序接口。

发送模块12,用于通过跨进程通信将所述应用程序接口的调用请求发送至第二操作系统,以使所述第二操作系统中的第二进程根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口执行所述硬件操作指令。

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

可选地,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置相同。

可选地,该装置还包括:接收模块13。

接收模块13,用于接收所述第二进程反馈的硬件操作结果。

其中,所述硬件操作结果包括:

硬件数据,所述硬件数据由执行所述硬件操作指令的硬件产生;或者所述硬件数据在共享内存中的存储地址;或者操作失败提示信息;其中,所述硬件数据和所述存储地址是所述第二进程根据所述硬件数据的数据量大小确定是否发送的;所述操作失败提示信息是所述第二进程在确定所述硬件忙碌时发送的。

图6所示装置可以执行图2的方法,本实施例未详细描述的部分,可参考对图2所示实施例的相关说明。该技术方案的执行过程和技术效果参见图2所示实施例中的描述,在此不再赘述。

图7为与图2所示实施例对应的一种操作系统的组成示意图,如图7所示,该操作系统可以是图1所示的os_b,该操作系统中包括:应用程序框架层和虚拟硬件抽象层。

其中,所述应用程序框架层中包括一进程,该进程用于实现如图2所示实施例中所述的硬件抽象层复用方法。该进程可以是图2所示实施例中的进程b。

参见前述实施例中的介绍,所述虚拟硬件抽象层中应用程序接口的配置与另一操作系统对应的硬件抽象层中应用程序接口的配置具有对应关系。所述虚拟硬件抽象层中应用程序接口的实现指示了将对虚拟硬件抽象层中应用程序接口的调用请求通过跨进程通信传输至另一操作系统。

由于虚拟硬件抽象层中应用程序接口的实现涉及到跨进程通信,在一可选实施例中,该跨进程通信可以基于操作系统的内核中提供的跨进程通信机制比如socket实现,因此,可选地,该操作系统中还可以包括如图7所示的内核。

在一个可能的设计中,图6所示硬件抽象层复用装置的结构可实现为一电子设备,该电子设备为用户终端设备,比如智能手机、平板电脑、pc机等,如图8所示,该用户终端设备可以包括:处理器21和存储器22。其中,所述存储器22用于存储支持用户终端设备执行上述各所示实施例中提供的硬件抽象层复用方法的程序,所述处理器21被配置为用于执行所述存储器22中存储的程序。

所述程序包括一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器21执行时能够实现如下步骤:

响应于硬件操作指令,调用所述第一操作系统对应的虚拟硬件抽象层中的第一应用程序接口;

通过跨进程通信将所述应用程序接口的调用请求发送至第二操作系统,以使所述第二操作系统中的第二进程根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

可选地,所述处理器21还用于执行前述图2所示方法步骤中的全部或部分步骤。

其中,所述用户终端设备的结构中还可以包括通信接口23,用于用户终端设备与其他设备或通信网络通信。

另外,本发明实施例提供了一种计算机存储介质,用于储存用户终端设备所用的计算机软件指令,其包含用于执行上述图2所示方法实施例中硬件抽象层复用方法所涉及的程序。

图9为与图3或图4所示实施例对应的一种硬件抽象层复用装置的结构示意图,如图9所示,该装置包括:接收模块31、调用模块32。

接收模块31,用于接收第二操作系统中第二进程通过跨进程通信发送的调用请求,所述调用请求是所述第二进程响应于硬件操作指令而调用所述第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的。

调用模块32,用于根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口,以执行所述硬件操作指令。

其中,其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

可选地,该装置还包括:查询模块33,设置模块34。

查询模块33,用于若识别出所述第二应用程序接口具有独占操作属性,则查看所述硬件抽象层对应的硬件的状态。

相应地,调用模块32具体用于:若查询模块33查出所述状态表示所述硬件处于空闲状态,则根据所述调用请求调用所述第二应用程序接口,以执行所述硬件操作指令。

设置模块34,用于在所述调用模块32的触发下,将所述硬件的状态置为忙碌状态。

可选地,所述查询模块33具体用于:若识别出所述第二应用程序接口具有独占操作属性,并且所述第二应用程序接口用于实现对所述硬件的开启操作,则查看所述硬件的状态。

可选地,所述调用模块32具体用于:若识别出所述第二应用程序接口具有非独占操作属性,则根据所述调用请求调用所述第二应用程序接口,以执行所述硬件操作指令。

可选地,所述装置还包括:发送模块35。

发送模块35,用于将所述硬件操作指令对应的硬件操作结果反馈给所述第一进程。

可选地,该发送模块35具体用于:

若所述硬件执行所述硬件操作指令而产生的硬件数据的数据量小于预设阈值,则将所述硬件数据作为所述硬件操作结果发送至所述第一进程;

若所述硬件数据的数据量大于或等于所述预设阈值,则将所述硬件数据存入共享内存中,并将所述硬件数据在所述共享内存中的存储地址发送至所述第一进程。

可选地,所述发送模块35还用于:

若所述状态表示所述硬件处于忙碌状态,则向所述第一进程发送操作失败提示信息。

可选地,所述接收模块31还用于:接收所述第二操作系统中第三进程通过跨进程通信发送的查询请求,所述查询请求用于查询所述硬件的状态。

所述发送模块35还用于:将所述硬件的状态发送给所述第三进程,以使所述第三进程根据所述状态确定能否调用所述硬件抽象层。

图9所示装置可以执行图3或图4所示实施例的方法,本实施例未详细描述的部分,可参考对图3或图4所示实施例的相关说明。该技术方案的执行过程和技术效果参见图3或图4所示实施例中的描述,在此不再赘述。

图10为与图3或图4所示实施例对应的一种操作系统的组成示意图,如图10所示,该操作系统可以是图1所示的os_a,该操作系统中包括:应用程序框架层和跨进程通信接口。

其中,所述应用程序框架层中包括一进程,该进程用于实现如图3或图4所示实施例中所述的硬件抽象层复用方法。该进程可以是图2所示实施例中的进程a。

参见前述实施例中的介绍,可选地,该操作系统中还可以包括硬件抽象层。该硬件抽象层中应用程序接口的配置与另一操作系统即图7所示操作系统对应的虚拟硬件抽象层中应用程序接口的配置具有对应关系。

上述跨进程通信接口,用于上述进程可以通过该跨进程通信接口接收另一操作系统发送的调用请求。

在一可选实施例中,该跨进程通信接口可以基于操作系统的内核中提供的跨进程通信机制比如socket实现,因此,可选地,该操作系统中还可以包括如图10所示的内核。

在一个可能的设计中,图9所示硬件抽象层复用装置的结构可实现为一电子设备,该电子设备为用户终端设备,如图11所示,该用户终端设备可以包括:处理器41和存储器42。其中,所述存储器42用于存储支持用户终端设备执行上述各所示实施例中提供的硬件抽象层复用方法的程序,所述处理器41被配置为用于执行所述存储器42中存储的程序。

所述程序包括一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器41执行时能够实现如下步骤:

接收第二操作系统中第二进程通过跨进程通信发送的调用请求,所述调用请求是所述第二进程响应于硬件操作指令而调用所述第二操作系统对应的虚拟硬件抽象层中的第一应用程序接口触发的;

根据所述调用请求调用所述第二操作系统对应的硬件抽象层中的第二应用程序接口,以执行所述硬件操作指令;

其中,所述第一应用程序接口在所述虚拟硬件抽象层中的配置与所述第二应用程序接口在所述硬件抽象层中的配置具有对应关系。

可选地,所述处理器41还用于执行前述图3或图4所示方法步骤中的全部或部分步骤。

其中,所述用户终端设备的结构中还可以包括通信接口43,用于用户终端设备与其他设备或通信网络通信。

另外,本发明实施例提供了一种计算机存储介质,用于储存用户终端设备所用的计算机软件指令,其包含用于执行上述图3或图4所示方法实施例中硬件抽象层复用方法所涉及的程序。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程硬件抽象层复用设备的处理器以产生一个机器,使得通过计算机或其他可编程硬件抽象层复用设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程硬件抽象层复用设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程硬件抽象层复用设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1