首页> 中国专利> 基于Linux容器技术的多Android系统之间切换方法

基于Linux容器技术的多Android系统之间切换方法

摘要

本发明涉及基于Linux容器技术的多Android系统之间切换方法。包括:在Linux内核中创建至少两个容器,并启动容器中的系统;当调用容器的切换命令时,改变容器中的系统的使用状态;基于系统的使用状态,Frame?Buffer驱动将图像输出到对应的地址。该方法通过实现显示设备的复用,支持多个Android同时运行,达到多个Android间的快速切换,提高用户体验。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-08-19

    未缴年费专利权终止 IPC(主分类):G06F 9/48 专利号:ZL2015105699657 申请日:20150910 授权公告日:20191210

    专利权的终止

  • 2019-12-10

    授权

    授权

  • 2018-04-27

    文件的公告送达 IPC(主分类):G06F9/48 收件人:电子科技大学 文件名称:第一次审查意见通知书 申请日:20150910

    文件的公告送达

  • 2016-05-25

    文件的公告送达 IPC(主分类):G06F9/48 收件人:电子科技大学 文件名称:发明专利申请公布及进入实质审查通知书 申请日:20150910

    文件的公告送达

  • 2016-01-20

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20150910

    实质审查的生效

  • 2015-12-23

    公开

    公开

查看全部

说明书

技术领域

本发明涉及计算机虚拟化,具体涉及基于Linux容器技术的多Android系统之间切换方法。

背景技术

目前,由于Android系统的开放性和功能性,已被广泛应用于智能手机、平板电脑等嵌入式设备产品中。另一方面,正是因为Android的开放性,使得它更容易遭受恶意程序的攻击,以窃取用户隐私或者破坏系统的运行等。同时,很多用户为了满足不同的应用需求会随身携带多部智能手机,一方面可以保护用户隐私,一方面将公私应用分开。但这给用户带来了极大的不便,同时造成资源的大量浪费。

虚拟化技术可以使一个设备上同时运行多个系统,从而有效解决上述问题。但是传统的虚拟化技术由于开销过大,并不适用于嵌入式设备。容器技术更适合于嵌入式设备的虚拟化。从一个系统到另一个系统需要进行切换。但是目前的切换方法,主要是通过软件进行一系列的操作来实现系统间的切换,这种切换方法,过程过于繁琐,切换速度较慢,影响用户体验。

发明内容

为了能更好的解决上述问题,本发明的目的在于在Linux内核中建立多个容器,每个容器中独立运行一个Android系统,从而多个Android系统共享一个Linux内核和系统设备;然后针对多个容器中的Adnrdoi系统,提供一种无需安装任何软件,实现系统间快速并且便捷的切换方法。

本发明提供一种基于Linux容器技术的多Android系统之间切换方法,包括如下步骤:

在Linux内核中创建至少两个容器,并在容器中启动Android系统;

当调用容器的切换命令时,改变容器中的系统的使用状态;

基于系统的使用状态,FrameBuffer驱动将图像输出到对应的地址。

优选地,所述容器中的系统的使用状态包括活动状态和休眠状态。

优选地:所述改变容器中的系统的使用状态,进一步包括:

当系统的使用状态从活动到休眠转换时,将系统图像进行输出,重新映射到内存缓冲区;当系统的使用状态从休眠到活动转换时,将图像输出内存缓冲区重映射到屏幕内存。

优选地,所述调用容器的切换命令进一步包括:

响应于用户按下移动设备按键,调用容器的切换命令。

优选地:所述创建至少两个容器之前,还包括:

为容器分别定义不同的命名空间。

优选地:所述FrameBuffer驱动将图像输出到当前容器对应的地址,进一步包括:

为每个容器实现一个虚拟缓冲区,通过判断不同容器是否处于激活状态来决定调用分别将图像输出信息输出到屏幕和虚拟缓冲区的两个映射函数中的一个。

优选地:所述调用容器的切换命令之后,该方法还包括:

将要切换到未激活状态的系统的每个已映射到屏幕内存Framebuffer中进程的虚拟地址重定向到新的物理位置。

与现有的技术相比,本发明所提供的一种基于Linux容器技术的多Android系统之间切换方法,通过实现显示设备的复用,支持多个Android可以同时运行,并且利用便捷的系统间快速切换的方法达到多个Android间的快速切换,提高用户体验。

附图说明

图1是根据本发明实施例的采用容器技术的多Android系统框架图。

图2根据本发明实施例的多个系统复用Framebuffer驱动过程图。

图3根据本发明实施例的系统间相互切换的过程图。

具体实施方式

下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。

本发明为解决上述问题所采用的技术方案是,通过实现显示设备的复用以支持多个Android可以同时运行,并且设计一种便捷的系统间快速切换的方法达到多个Android间的快速切换,具体包括以下步骤:

1)显示设备的复用

1-1)Android系统依赖于标准的LinuxFramebuffer(FB)提供物理屏幕显示,但同一时间只能支持一个Android系统显示。为实现FB的复用,首先,对Android内核引入一个新的命名空间机制;

1-2)对Android内核中FB的相关源码进行修改,通过与新引入的命名空间结合来实现FB的虚拟化。

1-3)修改过后的FB驱动可以将不同的系统图像输出信息输出到不同的地方存储。

2)容器之间的切换:

2-1)通过对Linux内核中Namespace和Cgroups机制相关命令进行适当的封装才能实现比较有效的容器管理命令;

2-2)通过管理命令创建容器,并启动容器中的系统。在创建容器时,会将新建的容器加入到一个容器列表中,以方便切换;

2-3)容器中的系统启动后,将正处于使用状态的系统称为活动系统,其他称为休眠系统。当系统访问FB进行图像输出时,FB驱动会根据系统的不同状态将不同系统的图像输出到不同的地方进行存储;

2-4)利用快捷键来调用容器的切换命令,将活动的系统转换为休眠,将一个休眠的系统转换为活动。并将之前为活动的系统图像输出,重新映射到内存缓冲区;将要成为活动系统的图像输出内存缓冲区重映射到屏幕内存。

接下来依次结合附图1、附图2以及附图3和具体实施方式对本发明申请的技术方法的主要实现原理及其对应能够达到的有益效果进行详细地阐述。

图1为采用容器技术的多Android系统框架100。为了实现多个Android间的快速切换,需要对Linux内核101做一些修改,对Linux内核101添加New_Namespace机制104,并将该机制与FB驱动结合来完成FB105的虚拟化;并创建一套容器API接口103,以方便容器管理模块102对容器进行管理和切换。

图2为多个系统复用FB驱动过程图200。通过对现有FB驱动修改,将New_Namespace机制引入到FB驱动中,封装成新的multi_fb驱动201,并将该驱动注册为FB驱动。将当前正在使用的系统称为激活状态的Android系统202,而当前未使用的系统称为未激活的Android系统203,修改过后的FB驱动分别为每个容器在系统RAM中实现只与单个容器相关联的缓冲区204以存储未激活Android系统的图像输出信息。激活的Android系统通过操作multi_fb驱动201将图像输出信息直接映射到屏幕Framebuffer205直接呈现在物理屏幕上206;而未激活的Android系统通过操作multi_fb驱动201将图像输出信息映射到与该系统对应的缓冲区204中。

本实施例中使用的操作系统为开源的Android4.3,内核版本为3.4,运行平台为GoogleNexus4手机。

New_Namespace机制和容器管理工具的实现步骤:

步骤101:为了实现FB的虚拟化,需要在Linux内核中引入一个新的命名空间机制New_Namesapce机制;同时,为了方便容器中系统的切换,对Linux内核中Namespace与Cgroups机制的相关命令进行封装;

本步骤具体实现如下:

①Linux内核中用数据结构task_struct来描述进程,该结构中有一个nsproxy结构体指针,nsproxy结构体定义了各种不同命名空间的结构体指针。init_nsproxy结构体会在task初始化时被用来初始化nsproxy中的命名空间指针。在nsproxy结构体中加入New_Namespace的结构体指针的定义,并在init_nsproxy结构体中加入New_Namespace结构体指针的初始化语句,以用来对其进行初始化。

②添加New_Namespace相应功能和定义的源码,其结构大体上为:stmctnew_ns_desc的实例是系统全局变量,主要用于保存所有设备在系统中注册的一些与操作new_namespace相关的信息;structnew_namespace的实例为局部变量,用于表示不同的设备命名空间;tructnew_ns_info主要存储设备驱动的注册信息。

③Linux内核中拥有管理Namespace和Cgroups的命令,例如mount、chroot、clone、execve等。但只靠这些命令无法对容器进行有效的管理,必须进行一定的封装才能形成有效的管理命令。容器start命令会调用_do_start(),_do_start中的container_nsexec()函数封装了mount用来挂载文件系统到相应的目录,该函数中的do_clone()函数封装了clone命令,来进行进程的clone;do_clone()中的do_childe()封装了chroot命令,用来切换到相应容器的根目录下,以便于执行容器下的init程序。在容器创建时会将当前容器加进容器列表中。

步骤102:容器的管理模块实质是一个拥有最高权限的容器,通过在其中挂载一个非常简洁的文件系统aufs,并且该容器没有图形界面,不需任何图形信息的输出。在其中运行一个守护进程,来监控容器的管理命令,当接收到容器相关的管理命令,该守护进程进行解析后来调用容器API提供的接口函数来管理容器。

Framebuffer虚拟化步骤如下:

步骤201:通过对FB驱动添加新的源码将New_Namespace机制引入,并为每个容器实现一个只与单个容器相关联的虚拟缓冲区。利用New_Namespace机制对FB驱动进行修改。由于每个缓冲设备都有一个structfb_info结构与之相对应。将fb_info与New_Namespace结构体封装到fb_ns结构体中,并且另外实现了一个fb_ns_mmap函数。multi_fb驱动可以通过判断不同容器是否处于激活状态来决定调用原生的fb_mmap映射函数,还是调用fb_ns_mmap映射函数。这两个映射函数分别会将图像输出信息输出到屏幕和虚拟缓冲区,从而达到复用的目的。

步骤202:新的FB驱动可以将激活状态的Android系统直接对硬件的访问传递给multi_fb驱动。这包括标准的ioctls以及自定义的ioctls。当激活状态的系统运行的应用程序mmapmulti_fb设备时,multi_fb驱动简单地对由硬件驱动控制的屏幕的物理内存进行映射。

步骤203:当在未激活系统上运行的应用mmap该Framebuffer设备,multi_fb驱动将RAM中的后备缓冲区映射到进程的虚拟地址空间。并采用全新的通知API代替向硬件驱动传递ioctls,使multi_fb驱动不会传递未激活状态的系统对硬件后端的访问,以确保激活状态的系统对独占硬件的访问。

图3为系统间切换流程,其详细步骤如下:

步骤301:当用户按下快捷键组合,当前激活的系统会依次进行:屏幕内存重映射→屏幕内存深度复制→硬件状态同步→GPU协调,四个操作。详细过程如下:

①通过在init.rc文件中添加如下代码:

来实现同时按下手机音量上下键,来调用容器的切换命令,将处于容器列表中当前激活系统之后的系统转变为激活状态。其中115、114分别代表手机音量上下键;

②屏幕内存重映射

屏幕内存重映射是通过改变页表项完成的,这要将要切换到未激活状态系统的每个已映射到屏幕内存FB中进程的虚拟地址重定向到新的物理位置。即将这些虚拟地址重新mmap到系统RAM与本容器相对应的后备缓冲区中;

③屏幕内存深度复制

将要切换到未激活状态系统的屏幕存储器的深度复制是将该系统在屏幕存储器里的内容复制到后备缓冲区;

④硬件状态同步

将要切换到未激活状态系统的硬件同步是将当前硬件状态保存到该系统的虚拟硬件状态中。

⑤GPU同步

通知GPU屏幕存储器地址的变换,以便它可以更新任何内部图像存储器的映射。

步骤302:当用户按下快捷键组合,将要切换到激活状态的系统也会依次进行步骤301中的四个操作,详细过程如下:

①屏幕内存重映射

将要切换到激活状态系统的每个已映射到后备缓冲区中屏进程的虚拟地址从新mmap到屏幕内存的FB中;

②屏幕内存深度复制

将要切换到激活状态系统的屏幕存储器的深度复制是将该系统在后备缓冲区中存储的内容复制到屏幕存储器中;

③硬件状态同步

将要切换到激活状态系统的硬件同步是将硬件状态设置为该系统保存在虚拟硬件状态中的状态。

④GPU同步

通知GPU屏幕存储器地址的变换,以便它可以更新任何内部图像存储器的映射。

至此,容器中不同系统的切换完成。

综上所述,本发明提出了一种基于Linux容器技术的多Android系统之间切换方法,通过实现显示设备的复用,支持多个Android同时运行,达到多个Android间的快速切换,提高用户体验。

以上说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号