CN112099923B - 一种运行于Linux操作***上的Android虚拟化*** - Google Patents
一种运行于Linux操作***上的Android虚拟化*** Download PDFInfo
- Publication number
- CN112099923B CN112099923B CN202011285918.7A CN202011285918A CN112099923B CN 112099923 B CN112099923 B CN 112099923B CN 202011285918 A CN202011285918 A CN 202011285918A CN 112099923 B CN112099923 B CN 112099923B
- Authority
- CN
- China
- Prior art keywords
- layer
- android
- dockdroid
- open
- binder
- 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
Links
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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/4555—Para-virtualisation, i.e. guest operating system has to be modified
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
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)
Abstract
本发明公开了一种运行于Linux操作***上的Android虚拟化***,包括Dockdroid层以及各个Docker容器;Docker容器用于在HAL层中安装有安卓应用所需要的open GL ES库;Dockdroid层用于提供HAL层传输指令的高速通道以及open GL ES指令转换所需要的translator库。该Android虚拟化***不需要转换指令,在宿主机提供安卓运行时库的支持:进程间通信机制Binder和匿名共享内存机制ashmem;通过修改binder驱动实现可支持多路binder设备;对Android的open GL ES***进行重构,发挥GPU硬件资源优势,实现3D渲染和图形加速。
Description
技术领域
本发明涉及一种Android虚拟化***,尤其是一种运行于Linux操作***上的Android虚拟化***。
背景技术
安卓模拟器是典型的虚拟机技术,模拟器的发展得益于***的火爆,绝大部分用户不满足现有手机的内存、网速、图形渲染等硬件条件限制,就催生了将手机应用移植到PC上的需求。虚拟机技术存在的问题包括:(1)安卓模拟器虽然支持安卓应用运行,但受制于平台,只支持Windows和Mac平台,不支持Linux平台,更不支持国产麒麟、飞腾平台;(2)虚拟机运行游戏等大型软件卡顿,资源开销大,频繁发生***奔溃、不流畅等。
有了在PC上借助Android模拟器运行安卓应用的想法,就有用户提出直接在PC上运行Android应用的思路。在2009年,Yi Sun开始了将Android移植到x86-PC上的尝试,并基于Android 1.6推出了Android-x86 1.6,后来持续跟随Android的发展步伐,目前已发展到Android 10.x。Android x86***定位的是x86-PC的BSP,并在Android x86的基础上扩展Android框架,基于Android为桌面PC提供不同于常规的操作使用环境。后面发展成一种面向x86的桌面操作***,我们统称为Android-x86,国内知名产品包括RemixOS、PhoenixOS和EmindOS(openthus)均基于此技术实现。Android-x86技术存在的问题包括:(1)属于AOSP的扩展,不支持Linux应用,目前基于容器技术实现的还是安卓模拟器,***性能受到巨大的影响;(2)硬件和软件库的兼容性问题。
发明内容
发明目的: 提供一种运行于Linux操作***上的Android虚拟化***,能够在Linux操作***上虚拟出完整的安卓运行环境,实现安卓应用无缝迁移到Linux平台上高效运行。
技术方案:本发明所述的运行于Linux操作***上的Android虚拟化***,包括Dockdroid层以及各个Docker容器;
Docker容器用于构建Android虚拟化***,并在Android虚拟化***的HAL层中安装有安卓应用所需要的open GL ES库;
Dockdroid层用于提供HAL层传输指令的高速通道以及open GL ES指令转换所需要的translator库;
在HAL层和Dockdroid层之间通过编号来标记指令,在HAL层传输指令时,指令的参数也一并通过高速通道传输到Dockdroid层中,Dockdroid层从高速通道中读取指令的编号和参数;
在Dockdroid层中设置有用于与mesa驱动交互的translator库,在translator库中设置有将open GL ES指令转换为mesa驱动可识别的open GL指令;
在Dockdroid层读取指令的编号和参数后,对读取的编号和指令进行解析,并根据解析结果调用translator库转换指令;
在HAL层调用Dockdroid层提供的open GL ES库时,由translator库将HAL层发送的open GL ES指令转化为显卡驱动的open GL指令,从而利用GPU进行加速。
进一步的,在Docker容器中启动进程利用Linux Namespace机制隔离出一部分***资源,通过clone***调用创建子进程并指定flags参数来标记共享/隔离的***资源。
进一步的,flags参数包括主机名与域名隔离参数、消息与共享内存隔离参数、进程编号隔离参数、网络隔离参数、挂载点隔离参数以及用户与用户组隔离参数。
进一步的,Docker容器通过Linux Cgroups机制对进程资源限制、控制和统计,在启动Docker容器时加上CPU核数、内存大小以及网络带宽来实现资源的限制。
进一步的,各个Docker容器均对应有一个binder设备设置于宿主机中,binder设备通过对binder驱动进行修改生成;binder驱动修改点包括:修改驱动注册到内核为字符设备、添加设备保护锁、添加num_devices参数控制生成的设备数目、修改init_binder_device函数以及修改设备号。
进一步的,Docker容器是通过设备挂载方式将ashmem驱动以及binder驱动与宿主机进行映射。
本发明与现有技术相比,其有益效果是:(1)支持国产麒麟、飞腾平台上虚拟安卓运行环境,由于麒麟、飞腾是armv8指令集,不需要转换指令,安卓应用直接无缝迁移,在宿主机提供安卓运行时库的支持:进程间通信机制Binder和匿名共享内存机制ashmem;(2)支持多路binder设备,linux内核binder驱动只能生成单个设备,通过修改binder驱动实现可支持200个binder设备;(3)使用docker容器拉起整个安卓镜像;(4)图形加速渲染,对Android的open GL ES***进行重构,发挥GPU硬件资源优势,实现高效的3D渲染和图形加速。
附图说明
图1为本发明的***框架结构示意图。
具体实施方式
下面结合附图对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。
实施例1:
如图1所示,本发明公开的运行于Linux操作***上的Android虚拟化***,包括Dockdroid层以及各个Docker容器;
Docker容器用于构建Android虚拟化***,并在Android虚拟化***的HAL层中安装有安卓应用所需要的open GL ES库;
Dockdroid层用于提供HAL层传输指令的高速通道以及open GL ES指令转换所需要的translator库;
在HAL层和Dockdroid层之间通过编号来标记指令,在HAL层传输指令时,指令的参数也一并通过高速通道传输到Dockdroid层中,Dockdroid层从高速通道中读取指令的编号和参数;
在Dockdroid层中设置有用于与mesa驱动交互的translator库,在translator库中设置有将open GL ES指令转换为mesa驱动可识别的open GL指令;
在Dockdroid层读取指令的编号和参数后,对读取的编号和指令进行解析,并根据解析结果调用translator库转换指令;
在HAL层调用Dockdroid层提供的open GL ES库时,由translator库将HAL层发送的open GL ES指令转化为显卡驱动的open GL指令,从而利用GPU进行加速。从而发挥GPU硬件资源优势,实现高效的3D渲染和图形加速。
进一步的,Docker容器依赖内核底层namespace和cgroup技术,在Docker容器中启动进程利用Linux Namespace机制隔离出一部分***资源,通过clone***调用创建子进程并指定flags参数来标记共享/隔离的***资源。
进一步的,flags参数包括主机名与域名隔离参数、消息与共享内存隔离参数、进程编号隔离参数、网络隔离参数、挂载点隔离参数以及用户与用户组隔离参数。
进一步的,Docker容器通过Linux Cgroups机制对进程资源限制、控制和统计,在启动Docker容器时加上CPU核数、内存大小以及网络带宽等来实现资源的限制。
进一步的,标准的linux内核binder驱动默认只生成一个binder设备,不能满足多个容器的使用,为了使得各个Docker容器均对应有一个binder设备,通过对binder驱动进行修改生成多个binder设备一一对应。binder驱动修改点如下:(1)默认binder注册为杂项设备,修改驱动注册到内核为字符设备;(2)添加设备保护锁,避免资源的竞争导致;(3)添加num_devices参数,控制生成的设备数目;(4)修改init_binder_device函数,修改设备文件名为binder+设备编号的方式,binder1~binderN,使用cdev_init注册设备,cdev_add添加设备,device_register注册到内核中;(5)修改设备号,在飞腾机器中存在设备号占用的问题,避免设备不兼容。
进一步的,Docker容器是通过设备挂载方式将ashmem驱动以及binder驱动与宿主机进行映射。
本发明的有益效果在于:(1)支持国产麒麟、飞腾平台上虚拟安卓运行环境,由于麒麟、飞腾是armv8指令集,不需要转换指令,安卓应用直接无缝迁移,在宿主机提供安卓运行时库的支持:进程间通信机制Binder和匿名共享内存机制ashmem;(2)支持多路binder设备,linux内核binder驱动只能生成单个设备,通过修改binder驱动实现可支持200个binder设备;(3)使用docker容器拉起整个安卓镜像;(4)图形加速渲染,对Android的openGL ES***进行重构,发挥GPU硬件资源优势,实现高效的3D渲染和图形加速。
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上作出各种变化。
Claims (6)
1.一种运行于Linux操作***上的Android虚拟化***,其特征在于:包括Dockdroid层以及各个Docker容器;
Docker容器用于构建Android虚拟化***,并在Android虚拟化***的HAL层中安装有安卓应用所需要的open GL ES库;
Dockdroid层用于提供HAL层传输指令的高速通道以及open GL ES指令转换所需要的translator库;
在HAL层和Dockdroid层之间通过编号来标记指令,在HAL层传输指令时,指令的参数也一并通过高速通道传输到Dockdroid层中,Dockdroid层从高速通道中读取指令的编号和参数;
在Dockdroid层中设置有用于与mesa驱动交互的translator库,在translator库中设置有将open GL ES指令转换为mesa驱动可识别的open GL指令;
在Dockdroid层读取指令的编号和参数后,对读取的编号和指令进行解析,并根据解析结果调用translator库转换指令;
HAL层调用Dockdroid层提供的open GL ES库时,由translator库将HAL层发送的openGL ES指令转化为mesa驱动的open GL指令,从而利用GPU进行加速。
2.根据权利要求1所述的运行于Linux操作***上的Android虚拟化***,其特征在于:在Docker容器中启动进程利用Linux Namespace机制隔离出一部分***资源,通过clone***调用创建子进程并指定flags参数来标记共享/隔离的***资源。
3.根据权利要求2所述的运行于Linux操作***上的Android虚拟化***,其特征在于:flags参数包括主机名与域名隔离参数、消息与共享内存隔离参数、进程编号隔离参数、网络隔离参数、挂载点隔离参数以及用户与用户组隔离参数。
4.根据权利要求1所述的运行于Linux操作***上的Android虚拟化***,其特征在于:Docker容器通过Linux Cgroups机制对进程资源限制、控制和统计,在启动Docker容器时加上CPU核数、内存大小以及网络带宽来实现资源的限制。
5.根据权利要求1所述的运行于Linux操作***上的Android虚拟化***,其特征在于:各个Docker容器均对应有一个binder设备设置于宿主机中,binder设备通过对binder驱动进行修改生成;binder驱动修改点包括:修改驱动注册到内核为字符设备、添加设备保护锁、添加num_devices参数控制生成的设备数目、修改init_binder_device函数以及修改设备号。
6.根据权利要求1所述的运行于Linux操作***上的Android虚拟化***,其特征在于:Docker容器是通过设备挂载方式将ashmem驱动以及binder驱动与宿主机进行映射。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011285918.7A CN112099923B (zh) | 2020-11-17 | 2020-11-17 | 一种运行于Linux操作***上的Android虚拟化*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011285918.7A CN112099923B (zh) | 2020-11-17 | 2020-11-17 | 一种运行于Linux操作***上的Android虚拟化*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112099923A CN112099923A (zh) | 2020-12-18 |
CN112099923B true CN112099923B (zh) | 2021-02-05 |
Family
ID=73785708
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011285918.7A Active CN112099923B (zh) | 2020-11-17 | 2020-11-17 | 一种运行于Linux操作***上的Android虚拟化*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112099923B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860364A (zh) * | 2021-02-07 | 2021-05-28 | 麒麟软件有限公司 | 一种基于Linux内核的Android图形显示方法 |
CN113505007A (zh) * | 2021-07-12 | 2021-10-15 | 北京鲸鲮信息***技术有限公司 | 基于Linux***的协议栈数据传输方法、计算机设备和存储介质 |
CN113656143B (zh) * | 2021-08-16 | 2024-05-31 | 深圳市瑞驰信息技术有限公司 | 一种实现安卓容器直通显卡的方法及*** |
CN114035863A (zh) * | 2021-11-11 | 2022-02-11 | 北京鲸鲮信息***技术有限公司 | 在Linux***中操作安卓应用的方法、装置和设备 |
CN113824888B (zh) * | 2021-11-23 | 2022-06-17 | 北京鲸鲮信息***技术有限公司 | Linux兼容Android的相机控制方法、***、装置及介质 |
CN113835768B (zh) * | 2021-11-29 | 2022-08-16 | 北京字节跳动网络技术有限公司 | 一种Android混合HAL的管理方法及*** |
CN113934464A (zh) * | 2021-12-14 | 2022-01-14 | 北京鲸鲮信息***技术有限公司 | Linux***中启动安卓应用的方法、装置和电子设备 |
CN114092312A (zh) * | 2022-01-19 | 2022-02-25 | 北京鲸鲮信息***技术有限公司 | 图像生成方法、装置、电子设备及存储介质 |
CN114125558B (zh) * | 2022-01-26 | 2022-04-22 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
CN114185508B (zh) * | 2022-02-15 | 2022-04-26 | 麒麟软件有限公司 | 在Linux兼容安卓***上进行左右分屏的方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105895111A (zh) * | 2015-12-15 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 基于Android的音频内容处理方法及设备 |
US20170371509A1 (en) * | 2015-02-27 | 2017-12-28 | Samsung Electronics Co., Ltd. | Method of controlling device having plurality of operating systems installed therein, and the device |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨***运行安卓应用的方法、终端及存储介质 |
CN108762815A (zh) * | 2018-05-16 | 2018-11-06 | 北京麟卓信息科技有限公司 | 一种基于非虚拟化体系架构的Android运行环境实现方法 |
CN109388473A (zh) * | 2018-09-19 | 2019-02-26 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于移动操作***的Android兼容层实现方法和*** |
CN110059453A (zh) * | 2019-03-13 | 2019-07-26 | 中国科学院计算技术研究所 | 一种容器虚拟化安全加固装置及方法 |
CN111930340A (zh) * | 2020-09-21 | 2020-11-13 | 北京技德***技术有限公司 | 一种基于Linux与Android兼容技术的虚拟音频装置与方法 |
-
2020
- 2020-11-17 CN CN202011285918.7A patent/CN112099923B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170371509A1 (en) * | 2015-02-27 | 2017-12-28 | Samsung Electronics Co., Ltd. | Method of controlling device having plurality of operating systems installed therein, and the device |
CN105895111A (zh) * | 2015-12-15 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 基于Android的音频内容处理方法及设备 |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨***运行安卓应用的方法、终端及存储介质 |
CN108762815A (zh) * | 2018-05-16 | 2018-11-06 | 北京麟卓信息科技有限公司 | 一种基于非虚拟化体系架构的Android运行环境实现方法 |
CN109388473A (zh) * | 2018-09-19 | 2019-02-26 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于移动操作***的Android兼容层实现方法和*** |
CN110059453A (zh) * | 2019-03-13 | 2019-07-26 | 中国科学院计算技术研究所 | 一种容器虚拟化安全加固装置及方法 |
CN111930340A (zh) * | 2020-09-21 | 2020-11-13 | 北京技德***技术有限公司 | 一种基于Linux与Android兼容技术的虚拟音频装置与方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112099923A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112099923B (zh) | 一种运行于Linux操作***上的Android虚拟化*** | |
CN107533469B (zh) | 对图形处理单元资源的容器访问 | |
RU2406128C2 (ru) | Система и способ для виртуализации графических подсистем | |
EP2622463B1 (en) | Instant remote rendering | |
US8819705B2 (en) | User interaction support across cross-environment applications | |
US8933949B2 (en) | User interaction across cross-environment applications through an extended graphics context | |
KR101761409B1 (ko) | 가상화 플랫폼 제공 방법 및 장치 | |
US20120084798A1 (en) | Cross-environment redirection | |
CN113157362B (zh) | 一种应用于Linux上Android多窗口显示方法 | |
KR20140117414A (ko) | 반가상화된 고성능 컴퓨팅 및 gdi 가속 기법 | |
US10540294B2 (en) | Secure zero-copy packet forwarding | |
CN105122210A (zh) | Gpu虚拟化的实现方法及相关装置和*** | |
CN107077379B (zh) | 一种虚拟机创建方法和装置 | |
CN106020929A (zh) | 一种虚拟化环境下支持3d应用的***和方法 | |
CN103064724A (zh) | 虚拟机构建方法及装置 | |
CN104040494A (zh) | 准虚拟化的域着色器、外壳着色器和几何着色器 | |
CN108737131B (zh) | 网络设备虚拟化的实现方法和装置 | |
CN100561438C (zh) | 一种虚拟机***及其显卡使用方法 | |
CN117389694B (zh) | 基于virtio-blk技术提升虚拟存储IO性能的方法 | |
CN112860364A (zh) | 一种基于Linux内核的Android图形显示方法 | |
CN115309511B (zh) | 基于Xen的数据交互方法、装置、存储介质以及电子设备 | |
Toyama et al. | Android as a server platform | |
CN105573817B (zh) | 虚拟输入控制的方法、装置及*** | |
CN114397999A (zh) | 基于非易失内存接口-远程处理消息传递的通信方法、装置及设备 | |
CN108733602B (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 |