CN114077460A - 软件操作***调用Android动态库HAL接口的方法、设备及介质 - Google Patents
软件操作***调用Android动态库HAL接口的方法、设备及介质 Download PDFInfo
- Publication number
- CN114077460A CN114077460A CN202111672017.8A CN202111672017A CN114077460A CN 114077460 A CN114077460 A CN 114077460A CN 202111672017 A CN202111672017 A CN 202111672017A CN 114077460 A CN114077460 A CN 114077460A
- Authority
- CN
- China
- Prior art keywords
- operating system
- android
- hal
- software operating
- library
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 189
- 238000004806 packaging method and process Methods 0.000 claims abstract description 45
- 230000006870 function Effects 0.000 claims description 175
- 238000002955 isolation Methods 0.000 claims description 58
- 238000005538 encapsulation Methods 0.000 claims description 24
- 230000000977 initiatory effect Effects 0.000 claims description 2
- 238000004590 computer program Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 239000011664 nicotinic acid Substances 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000011230 binding agent Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 125000001475 halogen functional group Chemical group 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Telephone Function (AREA)
Abstract
本发明涉及计算机技术领域,具体提供一种软件操作***调用Android动态库HAL接口的方法、设备及介质,旨在解决如何使软件操作***兼容Android动态库HAL接口的问题。为此目的,本发明的方法包括:在基于Android HAL的设备上运行软件操作***时可以控制软件操作***的软件进程调用软件操作***的封装库,并在封装库初始化时调用预设的兼容链接器,进而基于兼容链接器调用Android HAL的封装库中的函数方法function,以完成软件操作***对Android动态库HAL接口的调用。通过预设的兼容链接器实现了软件操作***对Android HAL的封装库中函数方法function的调用,基于这个兼容链接器实现了软件操作***对Android动态库HAL接口的接口兼容,保证软件操作***能够正常地运行在基于Android HAL的设备上。
Description
本发明是在申请号为202110373360.6,发明名称为《Linux***调用Android HAL动态库的方法、装置及存储介质》的优先权的基础上的继续申请,其全部内容通过引用结合在本发明中。
技术领域
本发明涉及计算机技术领域,具体提供一种软件操作***调用Android动态库HAL接口的方法、设备及介质。
背景技术
Android是一种基于Linux内核的操作***(Operating System),其广泛应用于手机和平板电脑(Tablet PC)等移动设备。Android的***架构从上到下主要是***应用层(System Apps)、框架层(Framework)、硬件抽象层(Hardware Abstraction Layer,HAL)和Linux内核层(Linux Kernel)。其中,硬件抽象层为Android提供了虚拟硬件平台,其可以对Linux内核层进行封装并向上提供接口,屏蔽Android底层的实现细节。Android硬件抽象层HAL的接口(Android HAL接口)主要包括动态库直通式(Passthrough)HAL接口(Android动态库HAL接口)和Binder跨进程式接口(Android HIDL接口)等。
目前由于Android广泛应用于不同类型的移动设备,导致一部分硬件设备供应商仅提供适用于Android的硬件驱动程序,同时由于其他软件操作***如基于Linux内核的操作***无法兼容Android HAL接口,导致其他软件操作***无法在基于Android HAL的移动设备上正常运行,从而极大地限制了其他软件操作***在这类移动设备上的应用前景。
相应地,本领域需要一种软件操作***调用Android HAL接口的方案来解决上述问题。
发明内容
为了克服上述缺陷,提出了本发明,以提供解决或至少部分地解决如何使除Android以外其他软件操作***兼容Android HAL接口,以使这些软件操作***能够在基于Android HAL的设备上正常运行的技术问题的软件操作***调用Android动态库HAL接口的方法、设备及介质。
在第一方面,提供一种软件操作***调用Android动态库HAL接口的方法,应用于运行在基于Android HAL的设备上的软件操作***,所述方法包括:
当软件操作***的软件进程调用所述软件操作***的封装库中任意一个函数方法function时,控制所述软件进程调用所述软件操作***的封装库,并在所述封装库初始化时调用预设的兼容链接器;
基于所述兼容链接器调用所述Android HAL的封装库中对应的函数方法function,以完成软件操作***对Android动态库HAL接口的调用。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,当所述Android HAL的封装库中的函数方法function在运行时需要调用所述设备加载的Android的C基础库中的其他目标函数方法function时,“基于所述兼容链接器调用所述Android HAL的封装库中的函数方法function”的步骤进一步包括:
判断所述Android的C基础库中的所述其他目标函数方法function与所述软件操作***的C基础库中的所述其他目标函数方法function是否存在冲突;
若存在冲突,则基于所述兼容链接器调用所述软件操作***的C基础库中的所述其他目标函数方法function;
若不存在冲突,则基于所述兼容链接器调用所述Android的C基础库中的所述其他目标函数方法function。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,“基于所述兼容链接器调用所述软件操作***的C基础库中的所述其他目标函数方法function”的步骤具体包括:
基于所述兼容链接器并通过Hook方式调用所述软件操作***的C基础库中的所述其他目标函数方法function。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,“控制所述软件进程调用所述软件操作***的封装库”的步骤具体包括:
控制所述软件进程通过链接动态库的方式调用所述软件操作***的封装库;
和/或,
所述Android HAL的封装库中的函数方法function是所述Android HAL的封装库从所述设备加载的Android的C基础库中调用到的函数方法function;
和/或,
所述软件操作***是Linux操作***,所述Linux操作***的封装库是LinuxOpenGLES封装库,所述Android HAL的封装库是Android HAL OpenGLES封装库。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,在“控制所述软件进程调用所述软件操作***的封装库”的步骤之前,所述方法还包括:
对所述软件操作***与所述Android HAL进行资源隔离,以使所述软件操作***与所述Android HAL在所述设备上分别独立运行。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,“对所述软件操作***与所述Android HAL进行资源隔离”的步骤具体包括:
基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,“基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL”的步骤具体包括:
在启动所述设备时,若首个用户态进程是Android HAL进程,则启动所述AndroidHAL并在所述Android HAL启动完成后基于NameSpace机制创建隔离容器;
在所述隔离容器内启动所述软件操作***,以在所述隔离容器内运行所述软件操作***。
在上述软件操作***调用Android动态库HAL接口的方法的一个技术方案中,“基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL”的步骤具体包括:
在启动所述设备时,若首个用户态进程是软件进程,则启动所述软件操作***的非核心服务并在所述非核心服务启动完成后基于NameSpace机制创建隔离容器;
在所述隔离容器内启动所述Android HAL,以在所述隔离容器内运行所述AndroidHAL;
在所述Android HAL启动完成后继续启动所述软件操作***的核心服务。
在第二方面,提供一种计算机设备,该计算机设备包括处理器和存储装置,所述存储装置适于存储多条程序代码,所述程序代码适于由所述处理器加载并运行以执行上述软件操作***调用Android动态库HAL接口的方法的技术方案中任一项技术方案所述的软件操作***调用Android动态库HAL接口的方法。
在第三方面,提供一种计算机可读存储介质,该计算机可读存储介质其中存储有多条程序代码,所述程序代码适于由处理器加载并运行以执行上述软件操作***调用Android动态库HAL接口的方法的技术方案中任一项技术方案所述的软件操作***调用Android动态库HAL接口的方法。
本发明上述一个或多个技术方案,至少具有如下一种或多种有益效果:
在实施本发明的技术方案中,软件操作***调用Android动态库HAL接口的方法可以应用于运行在基于Android HAL的设备上的软件操作***,其中,软件操作***指的是除Android以外其他的软件操作***如基于Linux内核的操作***。由于Android的C基础库(如Bionic库)与软件操作***的C基础库(如Glibc库)不兼容,导致使用软件操作***的C基础库的编译出的程序不能正常地动态链接到Android的C基础库,因此,当基于AndroidHAL的设备的Android HAL接口采用的是Android动态库HAL接口时软件操作***将无法正常地调用Android动态库HAL接口。对此,根据本发明实施例的方法,在基于Android HAL的设备上运行软件操作***时可以控制软件操作***的软件进程调用软件操作***的封装库,并在封装库初始化时调用预设的兼容链接器,进而基于兼容链接器调用Android HAL的封装库中的函数方法function,以完成软件操作***对Android动态库HAL接口的调用。也就是说,当软件操作***想要调用某个函数方法function时,可以直接调用软件操作***自己的封装库,这个封装库初始化时会调用预设的兼容链接器,进而通过这个兼容链接器再调用Android HAL的封装库中的函数方法function,使得软件操作***通过调用自己的封装库的某个函数方法function,真正调用到Android HAL的封装库中的函数方法function。其中,Android HAL的封装库中的这个函数方法function是Android HAL的封装库从Android的C基础库调用到的。可见,通过预设的兼容链接器实现了软件操作***对Android HAL的封装库中函数方法function的调用,基于这个兼容链接器实现了软件操作***对Android动态库HAL接口的接口兼容,保证软件操作***能够正常地运行在基于Android HAL的设备上,克服了现有技术中由于软件操作***无法兼容Android动态库HAL接口,导致软件操作***无法在基于Android HAL的设备上正常运行的缺陷。
附图说明
参照附图,本发明的公开内容将变得更易理解。本领域技术人员容易理解的是:这些附图仅仅用于说明的目的,而并非意在对本发明的保护范围组成限制。其中:
图1是根据本发明的一个实施例的软件操作***调用Android动态库HAL接口的方法的主要步骤流程示意图;
图2是根据本发明的另一个实施例的软件操作***调用Android动态库HAL接口的方法的主要操作流程示意图;
图3是根据本发明的一个实施例的对软件操作***与Android HAL进行资源隔离的方法的主要操作流程示意图;
图4是根据本发明的另一个实施例的对软件操作***与Android HAL进行资源隔离的方法的主要操作流程示意图。
具体实施方式
下面参照附图来描述本发明的一些实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非旨在限制本发明的保护范围。
在本发明的描述中,“模块”、“处理器”可以包括硬件、软件或者两者的组合。一个模块可以包括硬件电路,各种合适的感应器,通信端口,存储器,也可以包括软件部分,比如程序代码,也可以是软件和硬件的组合。处理器可以是中央处理器、微处理器、数字信号处理器或者其他任何合适的处理器。处理器具有数据和/或信号处理功能。处理器可以以软件方式实现、硬件方式实现或者二者结合方式实现。非暂时性的计算机可读存储介质包括任何合适的可存储程序代码的介质,比如磁碟、硬盘、光碟、闪存、只读存储器、随机存取存储器等等。
这里先解释本发明涉及到的一些术语。
软件操作***指的是基于计算机编程语言编写的操作***(operating system),即计算机管理控制程序。在本实施例中软件操作***可以是除Android以外其他的操作***。在一个实施方式中软件操作***可以是Linux操作***,该Linux操作***指的是基于Linux内核的操作***,即Linux***。
Android动态库HAL接口指的是Android硬件抽象层HAL的接口(Android HAL接口)中的动态库直通式(Passthrough)HAL接口。而调用Android HAL动态库实际上就是调用Android动态库HAL接口。
NameSpace机制指的是一种基于Linux内核的资源隔离机制,每个NameSpace(容器)下的资源对于其他NameSpace下的资源都是透明,不同NameSpace可以同时存在相同进程号的进程,由于这些进程属于不同的NameSpace,因此不会产生冲突。在用户态每个用户只能看到属于自己的NameSpace中的进程。其中,用户态(user mode)指的是进程在执行用户自己的程序代码时的运行状态,此时处理器在特权级最低的用户代码中运行;相应的,内核态指的是进程陷入Linux内核的程序代码时的运行状态,此时处理器处于特权级最高的内核代码中运行。
C基础库指的是基于C语言(计算机编程语言)的基础库,即基础C库,该基础库内包含使操作***运行必不可少的函数方法function。Android的C基础库包含使Android运行必不可少的函数方法function,软件操作***如Linux操作***的C基础库包含使软件操作***运行必不可少的函数方法function。Android的C基础库包括但不限于:Bionic。当软件操作***是Linux操作***时Linux操作***的C基础库包括但不限于:Glibc。
函数方法function指的是一段可以通过名字或符号进行调用程序代码,这段程序代码能够传递和/或处理数据。此外,函数方法function也可以描述成符号function或直接描述成function。
软件进程(process)是软件操作***程序的执行实体。当软件操作***是Linux操作***时软件进程可以是Linux进程。
参阅附图1,图1是根据本发明的一个实施例的软件操作***调用Android动态库HAL接口的方法的主要步骤流程示意图,该方法可以应用于运行在基于Android HAL的设备上的软件操作***,该设备指的是能够加载并运行计算机程序代码的设备,该设备包括但不限于计算机设备、手机和平板电脑等。如图1所示,本发明实施例中的软件操作***调用Android动态库HAL接口的方法主要包括下列步骤S101和步骤S102。
步骤S101:当软件操作***的软件进程调用软件操作***的封装库中任意一个函数方法function时,控制软件操作***的软件进程调用软件操作***的封装库,并在封装库初始化时调用预设的兼容链接器。
由于Android的C基础库(如Bionic库)与软件操作***的C基础库(如Glibc库)不兼容,导致使用软件操作***的C基础库的编译出的程序(软件进程)不能正常地动态链接到Android的C基础库,因此,当基于Android HAL的设备的Android HAL接口采用的是Android动态库HAL接口时软件操作***将无法正常地调用Android动态库HAL接口。也就是说,当软件操作***运行在基于Android HAL的设备上时,软件操作***无法直接调用Android HAL的封装库中的函数方法function。而在本实施例中当软件操作***想要调用Android HAL的封装库中的目标函数方法function时,可以控制软件操作***直接调用软件操作***自己的封装库中与这个目标函数方法function对应的函数方法function,这个封装库初始化时会调用预设的兼容链接器,进而通过这个兼容链接器再调用Android HAL的封装库中的目标函数方法function,从而使得软件操作***在调用软件操作***的封装库中任意一个函数方法function时可以基于兼容链接器真正调用到Android HAL的封装库中对应的函数方法function。例如,当Linux操作***需要调用Android HAL接口中的Android动态库HAL接口与设备的硬件进行通信比如与设备的音频器件进行通信获取音频数据时可以控制Linux进程调用Linux操作***的封装库,通过调用这个封装库去调用预设的兼容链接器,进而基于兼容链接器与设备的音频器件进行通信获取音频数据。
兼容链接器会生成符号地址映射表,这个符号地址映射表包含了软件进程想要调用的函数方法function的方法地址,通过查询这个符号地址映射表就可以获得这个方法地址,而这个方法地址能够指向Android HAL的封装库中的函数方法function。也就是说,兼容链接器通过上述方法指定的模式打开Android HAL的封装库,调用Android HAL的封装库中对应的函数方法function。
软件操作***的封装库是软件操作***的动态库,在一个实施方式中可以控制软件进程通过链接动态库的方式调用软件操作***的封装库。在本实施方式中可以采用软件技术领域中常规的链接动态库的方式去调用软件操作***的封装库,在此不对链接动态库的方式进行具体说明。
步骤S102:基于兼容链接器调用Android HAL的封装库中对应的函数方法function,以完成软件操作***对Android动态库HAL接口的调用。
由于兼容链接器生成的符号地址映射表包含了软件进程想要调用的函数方法function的方法地址,而这个方法地址能够指向Android HAL的封装库中的函数方法function,因此,基于这个方法地址就可以从Android HAL的封装库中调用到相应的函数方法function,从而使得软件操作***通过调用自己封装库的某个函数方法function,真正调用到Android HAL的封装库中相应的函数方法function,完成对Android动态库HAL接口的调用。在本实施例中Android HAL的封装库中的函数方法function可以是Android HAL的封装库从设备加载的Android的C基础库中调用到的函数方法function。
基于上述步骤S101至步骤S102,通过预设的兼容链接器实现了软件操作***对Android HAL的封装库中函数方法function的调用,基于这个兼容链接器实现了软件操作***对Android动态库HAL接口的接口兼容,保证软件操作***能够正常地运行在基于Android HAL的设备上,克服了现有技术中由于软件操作***无法兼容Android动态库HAL接口,导致软件操作***无法在基于Android HAL的设备上正常运行的缺陷。
下面对步骤S102作进一步说明。
在上述步骤S102的一个实施方式中,如果Android HAL的封装库中的函数方法function在运行时不需要调用设备加载的Android的C基础库中的其他目标函数方法function,那么在基于兼容链接器调用Android HAL的封装库中的函数方法function时,可以直接调用Android HAL的封装库中的这个函数方法function;如果Android HAL的封装库中的函数方法function在运行时需要调用设备加载的Android的C基础库中的其他目标函数方法function,那么在基于兼容链接器调用Android HAL的封装库中的函数方法function时,可以通过下列步骤11至步骤13去调用上述需要调用的其他目标函数方法function:
步骤11:判断Android的C基础库中的上述其他目标函数方法function与软件操作***的C基础库中的上述其他目标函数方法function是否存在冲突;如果存在冲突,则转至步骤12;如果不存在冲突则转至步骤13。
冲突指的是Android的C基础库中的目标函数方法function与软件操作***的C基础库中的目标函数方法function的方法实现存在差异。如果在同一进程中,Android HAL和软件操作***调用各自C基础库中的目标函数方法function,会导致进程崩溃,从而导致软件操作***无法在设备上正常运行。例如,Android的C基础库和Linux操作***的C基础库中的线程局部存储(Thread Local Storage,TLS)在内存位置上存在差异,会导致这两个线程局部存储存在冲突。
步骤12:基于兼容链接器调用软件操作***的C基础库中的目标函数方法function。在一个实施方式中可以基于兼容链接器并通过Hook方式调用软件操作***的C基础库中的上述其他目标函数方法function。Hook是一种修改链接器链接封装库的方式,通过Hook可以修改兼容链接器链接封装库的行为,使得兼容链接器能够调用软件操作***的C基础库中的目标函数方法function。
步骤13:基于兼容链接器调用Android的C基础库中的目标函数方法function。
通过上述步骤11至步骤13,当Android的C基础库中的目标函数方法function与软件操作***的C基础库中的目标函数方法function存在冲突时可以使软件操作***调用自己C基础库中的目标函数方法function,避免在调用Android的C基础库中的目标函数方法function导致进程崩溃,无法正常运行。
参阅附图2,以Linux APP(基于Linux操作***的应用程序)需要调用Android HALOpenGLES封装库中的某个函数方法function为例,对Linux操作***调用Android动态库HAL接口的方法进行具体说明。
通过Linux APP的Linux进程调用Linux OpenGLES封装库,Linux OpenGLES封装库在初始化时会调用兼容链接器,兼容链接器调用Android HAL OpenGLES封装库中的函数方法function,同时兼容链接器会将调用到的函数方法function返回至Linux OpenGLES封装库,使得Linux进程能够真正调用到Android HAL OpenGLES封装库中的这个函数方法function。
当这个函数方法function在运行时需要调用Android的C基础库中的其他目标函数方法function时如果Linux操作***的C基础库(Linux Glibc)与用Android的C基础库(Android Bionic)中的这个目标函数方法function存在冲突,则可以基于兼容链接器从Linux Glibc中调用目标函数方法function,同时兼容链接器会将调用到的目标函数方法function返回至Linux OpenGLES封装库;如果不存在冲突,则可以基于兼容链接器从Android Bionic中调用目标函数方法function,同时兼容链接器会将调用到的目标函数方法function返回至Linux OpenGLES封装库。
此外,Linux APP需要调用Linux操作***的C基础库中的某个函数方法function时Linux进程可以直接调用Linux Glibc中的函数方法function。
进一步,在根据本发明的另一个软件操作***调用Android动态库HAL接口的方法的实施例中,该软件操作***调用Android动态库HAL接口的方法不仅可以包括上述步骤S101至步骤S102,在执行上述步骤S101和步骤S102之前还可以包括步骤S100,通过执行步骤S100可以对软件操作***与Android HAL进行资源隔离以使软件操作***与AndroidHAL在设备上分别独立运行。其中,资源隔离包括但不限于:运行环境隔离和文件隔离等。通过对软件操作***与Android HAL进行资源隔离,可以保证在基于Android HAL的设备上运行软件操作***时软件操作***与Android HAL不会产生冲突与相互干扰,从而保证软件操作***的正常运行。
在本实施例的一个实施方式中可以通过更改根目录的方式对软件操作***与Android HAL进行资源隔离,例如使用chroot(change root directory)命令更改软件操作***或Android HAL的根目录,以实现对软件操作***与Android HAL的资源隔离。而在本实施例的另一个实施方式中可以基于NameSpace机制创建隔离容器并在隔离容器内运行软件操作***或Android HAL,即将一个***(软件操作***或Android HAL)放在隔离容器内运行,将另一个***(Android HAL或软件操作***)放在隔离容器以外运行,即使在软件操作***和Android HAL中同时运行相同进程号的进程,由于一个***的进程是在隔离容器内运行,因此软件操作***和Android HAL也不会产生冲突,二者均可以正常运行。
设备的启动过程主要包括BootLoader引导阶段、Linux内核启动阶段和软件/Android HAL启动阶段。其中,BootLoader引导阶段和Linux内核启动阶段分别与常规的Android启动方法中的BootLoader引导阶段和Linux内核启动阶段相同,而本实施方式与常规的Android启动方法的主要区别在于软件/Android HAL启动阶段。在本实施方式中,当Linux内核启动阶段完成后首个内核态进程转换成用户态进程进入软件/Android HAL启动阶段,在软件/Android HAL启动阶段中可以基于NameSpace机制创建隔离容器并在隔离容器内启动软件操作***或Android HAL,以便在隔离容器内运行软件操作***或AndroidHAL。
在一个实施方式中如果首个用户态进程是Android HAL进程,则可以基于NameSpace机制创建隔离容器并通过下列步骤21至步骤22在隔离容器内启动并运行软件操作***:
步骤21:在启动设备时,若首个用户态进程是Android HAL进程,则启动AndroidHAL并在Android HAL启动完成后基于NameSpace机制创建隔离容器(容器Service)。在本实施方式中可以采用计算机技术领域中常规的Android HAL启动方法对Android HAL进行启动,例如挂载Android的基础文件***、system分区、vendor分区等,同时启动AndroidService Manager、Android HAL Service、Android Native Service等服务。
步骤22:在隔离容器内启动软件操作***,以在隔离容器内运行软件操作***。在本实施方式中同样可以采用计算机技术领域中常规的软件启动方法在隔离容器内启动软件操作***。参阅附图3,若软件操作***是Linux操作***,那么在隔离容器内启动Linux操作***包括但不限于:挂载Linux操作***的基础文件***、Dbus等,同时启动LinuxService等服务。
通过上述步骤21至步骤22,可以在隔离容器内启动并运行软件操作***,实现对Android HAL与软件操作***的资源隔离。
在一个实施方式中如果首个用户态进程是Linux进程,则可以基于NameSpace机制创建隔离容器并通过下列步骤31至步骤33在隔离容器内启动并运行Android HAL:
步骤31:在启动设备时,若首个用户态进程是软件进程,则启动软件操作***的非核心服务并在非核心服务启动完成后基于NameSpace机制创建隔离容器。
在本实施方式中可以采用计算机技术领域中常规的软件启动方法对软件操作***进行启动,但由于软件操作***的核心服务需要在设备完成硬件初始化之后进行启动,因此,在本实施例中可以先启动软件操作***的非核心服务,在完成Android HAL启动后再启动软件操作***的核心服务,以保证软件操作***能够成功启动,正常运行。参阅附图4,若软件操作***是Linux操作***,则可以启动Linux操作***的非核心服务LinuxService并在非核心服务Linux Service启动完成后基于NameSpace机制创建隔离容器,即基于容器Service创建Android容器。
步骤32:在隔离容器内启动Android HAL,以在隔离容器内运行Android HAL。在本实施方式中可以采用计算机技术领域中常规的Android HAL启动方法对Android HAL进行启动,例如挂载Android的基础文件***、system分区、vendor分区等,同时启动AndroidService Manager、Android HAL Service、Android Native Service等服务。
步骤33:在Android HAL启动完成后继续启动软件操作***的核心服务。
通过上述步骤31至步骤33,可以在隔离容器内启动并运行Android HAL,实现对Android HAL与软件操作***的资源隔离。
需要指出的是,尽管上述实施例中将各个步骤按照特定的先后顺序进行了描述,但是本领域技术人员可以理解,为了实现本发明的效果,不同的步骤之间并非必须按照这样的顺序执行,其可以同时(并行)执行或以其他顺序执行,这些变化都在本发明的保护范围之内。
本领域技术人员能够理解的是,本发明实现上述一实施例的方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存取存储器、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括电载波信号和电信信号。
进一步,本发明还提供了一种计算机设备。在根据本发明的一个计算机设备实施例中,计算机设备包括处理器和存储装置,存储装置可以被配置成存储执行上述方法实施例的软件操作***调用Android动态库HAL接口的方法的程序,处理器可以被配置成用于执行存储装置中的程序,该程序包括但不限于执行上述方法实施例的软件操作***调用Android动态库HAL接口的方法的程序。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机设备可以是包括各种电子设备形成的控制装置设备。
进一步,本发明还提供了一种计算机可读存储介质。在根据本发明的一个计算机可读存储介质实施例中,计算机可读存储介质可以被配置成存储执行上述方法实施例的软件操作***调用Android动态库HAL接口的方法的程序,该程序可以由处理器加载并运行以实现上述软件操作***调用Android动态库HAL接口的方法。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机可读存储介质可以是包括各种电子设备形成的存储装置设备,可选的,本发明实施例中计算机可读存储介质是非暂时性的计算机可读存储介质。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。
Claims (10)
1.一种软件操作***调用Android动态库HAL接口的方法,其特征在于,应用于运行在基于Android HAL的设备上的软件操作***,所述方法包括:
当软件操作***的软件进程调用所述软件操作***的封装库中任意一个函数方法function时,控制所述软件进程调用所述软件操作***的封装库,并在所述封装库初始化时调用预设的兼容链接器;
基于所述兼容链接器调用所述Android HAL的封装库中对应的函数方法function,以完成软件操作***对Android动态库HAL接口的调用。
2.根据权利要求1所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,当所述Android HAL的封装库中的函数方法function在运行时需要调用所述设备加载的Android的C基础库中的其他目标函数方法function时,“基于所述兼容链接器调用所述Android HAL的封装库中的函数方法function”的步骤进一步包括:
判断所述Android的C基础库中的所述其他目标函数方法function与所述软件操作***的C基础库中的所述其他目标函数方法function是否存在冲突;
若存在冲突,则基于所述兼容链接器调用所述软件操作***的C基础库中的所述其他目标函数方法function;
若不存在冲突,则基于所述兼容链接器调用所述Android的C基础库中的所述其他目标函数方法function。
3.根据权利要求2所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,“基于所述兼容链接器调用所述软件操作***的C基础库中的所述其他目标函数方法function”的步骤具体包括:
基于所述兼容链接器并通过Hook方式调用所述软件操作***的C基础库中的所述其他目标函数方法function。
4.根据权利要求1所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,“控制所述软件进程调用所述软件操作***的封装库”的步骤具体包括:
控制所述软件进程通过链接动态库的方式调用所述软件操作***的封装库;
和/或,
所述Android HAL的封装库中的函数方法function是所述Android HAL的封装库从所述设备加载的Android的C基础库中调用到的函数方法function;
和/或,
所述软件操作***是Linux操作***,所述Linux操作***的封装库是Linux OpenGLES封装库,所述Android HAL的封装库是Android HAL OpenGLES封装库。
5.根据权利要求1至4中任一项所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,在“控制所述软件进程调用所述软件操作***的封装库”的步骤之前,所述方法还包括:
对所述软件操作***与所述Android HAL进行资源隔离,以使所述软件操作***与所述Android HAL在所述设备上分别独立运行。
6.根据权利要求5所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,“对所述软件操作***与所述Android HAL进行资源隔离”的步骤具体包括:
基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL。
7.根据权利要求6所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,“基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL”的步骤具体包括:
在启动所述设备时,若首个用户态进程是Android HAL进程,则启动所述Android HAL并在所述Android HAL启动完成后基于NameSpace机制创建隔离容器;
在所述隔离容器内启动所述软件操作***,以在所述隔离容器内运行所述软件操作***。
8.根据权利要求6所述的软件操作***调用Android动态库HAL接口的方法,其特征在于,“基于NameSpace机制创建隔离容器并在所述隔离容器内运行所述软件操作***或所述Android HAL”的步骤具体包括:
在启动所述设备时,若首个用户态进程是软件进程,则启动所述软件操作***的非核心服务并在所述非核心服务启动完成后基于NameSpace机制创建隔离容器;
在所述隔离容器内启动所述Android HAL,以在所述隔离容器内运行所述AndroidHAL;
在所述Android HAL启动完成后继续启动所述软件操作***的核心服务。
9.一种计算机设备,包括处理器和存储装置,所述存储装置适于存储多条程序代码,其特征在于,所述程序代码适于由所述处理器加载并运行以执行权利要求1至7中任一项所述的软件操作***调用Android动态库HAL接口的方法。
10.一种计算机可读存储介质,其中存储有多条程序代码,其特征在于,所述程序代码适于由处理器加载并运行以执行权利要求1至7中任一项所述的软件操作***调用Android动态库HAL接口的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2022/138657 WO2023124968A1 (zh) | 2021-04-07 | 2022-12-13 | 软件操作***调用Android动态库HAL接口的方法、设备及介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2021103733606 | 2021-04-07 | ||
CN202110373360.6A CN113190280A (zh) | 2021-04-07 | 2021-04-07 | Linux***调用Android HAL动态库的方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114077460A true CN114077460A (zh) | 2022-02-22 |
CN114077460B CN114077460B (zh) | 2024-03-26 |
Family
ID=76974916
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110373360.6A Pending CN113190280A (zh) | 2021-04-07 | 2021-04-07 | Linux***调用Android HAL动态库的方法、装置及存储介质 |
CN202111672017.8A Active CN114077460B (zh) | 2021-04-07 | 2021-12-31 | 软件操作***调用Android动态库HAL接口的方法、设备及介质 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110373360.6A Pending CN113190280A (zh) | 2021-04-07 | 2021-04-07 | Linux***调用Android HAL动态库的方法、装置及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (2) | CN113190280A (zh) |
WO (1) | WO2023124968A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115016856A (zh) * | 2022-02-23 | 2022-09-06 | 北京字节跳动网络技术有限公司 | 多***兼容方法及装置、电子设备、存储介质 |
WO2023124968A1 (zh) * | 2021-04-07 | 2023-07-06 | 北京字节跳动网络技术有限公司 | 软件操作***调用Android动态库HAL接口的方法、设备及介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190294A (zh) * | 2021-04-07 | 2021-07-30 | 北京鲸鲮信息***技术有限公司 | Linux***调用Android HIDL接口的方法、装置及存储介质 |
CN114564247A (zh) * | 2022-02-23 | 2022-05-31 | 北京字节跳动网络技术有限公司 | 多***兼容方法及装置、电子设备、存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060184931A1 (en) * | 2003-09-15 | 2006-08-17 | Trigence Corp. | System Including Run-Time Software To Enable A Software Application To Execute On An Incompatible Computer Platform |
US20110320799A1 (en) * | 2010-06-25 | 2011-12-29 | Wyse Technology Inc. | Apparatus and method for network driver injection into target image |
CN103970559A (zh) * | 2013-02-05 | 2014-08-06 | 北京壹人壹本信息科技有限公司 | 一种基于Android***的设备加载方法及装置 |
CN105808320A (zh) * | 2016-03-11 | 2016-07-27 | 四川安嵌科技有限公司 | 基于Linux容器的设备虚拟化***及方法 |
CN109388473A (zh) * | 2018-09-19 | 2019-02-26 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于移动操作***的Android兼容层实现方法和*** |
CN110532208A (zh) * | 2019-07-12 | 2019-12-03 | 优刻得科技股份有限公司 | 一种数据处理方法、接口转换结构及设备 |
CN112416511A (zh) * | 2016-06-13 | 2021-02-26 | 华为技术有限公司 | 用于虚拟硬件控制的***和方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6259958B1 (en) * | 1997-12-19 | 2001-07-10 | Honeywell International Inc. | Call mechanism for static and dynamic linked functions within an object-oriented controller using heterogeneous development tool sets |
WO2012138046A1 (ko) * | 2011-04-04 | 2012-10-11 | 주식회사 인프라웨어테크놀러지 | 범용 운영체제 상에서 안드로이드 어플리케이션을 실행하기 위한 단말장치 및 방법, 그리고 이를 위한 컴퓨터로 판독가능한 기록매체 |
CN113190280A (zh) * | 2021-04-07 | 2021-07-30 | 北京鲸鲮信息***技术有限公司 | Linux***调用Android HAL动态库的方法、装置及存储介质 |
CN113190294A (zh) * | 2021-04-07 | 2021-07-30 | 北京鲸鲮信息***技术有限公司 | Linux***调用Android HIDL接口的方法、装置及存储介质 |
-
2021
- 2021-04-07 CN CN202110373360.6A patent/CN113190280A/zh active Pending
- 2021-12-31 CN CN202111672017.8A patent/CN114077460B/zh active Active
-
2022
- 2022-12-13 WO PCT/CN2022/138657 patent/WO2023124968A1/zh unknown
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060184931A1 (en) * | 2003-09-15 | 2006-08-17 | Trigence Corp. | System Including Run-Time Software To Enable A Software Application To Execute On An Incompatible Computer Platform |
US20110320799A1 (en) * | 2010-06-25 | 2011-12-29 | Wyse Technology Inc. | Apparatus and method for network driver injection into target image |
CN103970559A (zh) * | 2013-02-05 | 2014-08-06 | 北京壹人壹本信息科技有限公司 | 一种基于Android***的设备加载方法及装置 |
CN105808320A (zh) * | 2016-03-11 | 2016-07-27 | 四川安嵌科技有限公司 | 基于Linux容器的设备虚拟化***及方法 |
CN112416511A (zh) * | 2016-06-13 | 2021-02-26 | 华为技术有限公司 | 用于虚拟硬件控制的***和方法 |
CN109388473A (zh) * | 2018-09-19 | 2019-02-26 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于移动操作***的Android兼容层实现方法和*** |
CN110532208A (zh) * | 2019-07-12 | 2019-12-03 | 优刻得科技股份有限公司 | 一种数据处理方法、接口转换结构及设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023124968A1 (zh) * | 2021-04-07 | 2023-07-06 | 北京字节跳动网络技术有限公司 | 软件操作***调用Android动态库HAL接口的方法、设备及介质 |
CN115016856A (zh) * | 2022-02-23 | 2022-09-06 | 北京字节跳动网络技术有限公司 | 多***兼容方法及装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113190280A (zh) | 2021-07-30 |
CN114077460B (zh) | 2024-03-26 |
WO2023124968A1 (zh) | 2023-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114077462A (zh) | 软件操作***调用Android HIDL接口的方法、装置、设备及介质 | |
CN114077460B (zh) | 软件操作***调用Android动态库HAL接口的方法、设备及介质 | |
US8555280B2 (en) | Terminal device of non-android platform for executing android applications, and computer readable recording medium for storing program of executing android applications on non-android platform | |
US7181610B2 (en) | Method and system to encapsulate a driver written for an operating system (OS) runtime environment in an OS independent environment firmware extension | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
CN110007980B (zh) | 多业务服务端的实现方法和装置 | |
US8972979B2 (en) | Configuration of virtual appliances | |
EP4100829A1 (en) | Firmware update patch | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
US10101915B2 (en) | Methods and apparatus to manage inter-virtual disk relations in a modularized virtualization topology using virtual hard disks | |
CN113448740B (zh) | 操作***的电源管理方法及装置 | |
US9804789B2 (en) | Methods and apparatus to apply a modularized virtualization topology using virtual hard disks | |
CN112189187A (zh) | 统一平台的可扩展性 | |
CN114020621A (zh) | 一种调试方法、电子设备及存储介质 | |
CN108804100B (zh) | 创建界面元素的方法、装置、存储介质及移动终端 | |
CN111651169B (zh) | 基于web容器的区块链智能合约运行方法及*** | |
CN116401003A (zh) | 基于桌面操作***的安卓应用运行方法、***及存储介质 | |
US20120240116A1 (en) | Performance In A Virtualization Architecture With A Processor Abstraction Layer | |
CN111427617B (zh) | 数据处理方法、装置及设备 | |
CN108268261B (zh) | 一种智能终端的ui定制方法、存储介质及智能终端 | |
CN105550050A (zh) | 硬件通信的方法及装置 | |
US20040216140A1 (en) | Method and system for accessing system operations through an interface layer | |
CN114416219B (zh) | ***函数调用方法、装置、电子设备及可读介质 | |
CN113535566B (zh) | 一种安卓应用校验方法、装置、设备及存储介质 | |
CN115114610B (zh) | 一种基于安卓***通过Root调用服务的模块及方法 |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220331 Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing. Applicant after: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd. Address before: 100080 floor 2, No.36 Haidian Street, Haidian District, Beijing 2002 Applicant before: Beijing jingling Information System Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |