一种基于Android的操作系统快速启动方法转让专利

申请号 : CN201110189973.0

文献号 : CN102207881B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨霞桑楠张恩阳郭甲冉朝阳展华益

申请人 : 电子科技大学

摘要 :

本发明公开一种基于Android的操作系统快速启动方法。包括备份过程和快速启动过程,所述备份过程包括步骤:进入Android操作系统的用户界面程序;用户将Android操作系统从普通运行模式切换到系统备份模式;生成快速启动的内存映像;将快速启动的内存映像按预先定义的快速启动映像格式的数据结构备份到外存中。所述快速启动过程包括步骤:由引导程序完成基本的硬件设备初始化后从外存中读取快速启动映像格式的数据结构;若进入快速启动模式,则由引导程序从外存中以内存页面为单位逐步的将快速启动的内存映像拷贝到内存中;由引导程序恢复上述步骤中快速启动的内存映像进入Android操作系统的用户界面程序。本发明的有益效果是:可以缩短Android操作系统启动时间。

权利要求 :

1.一种基于Android的操作系统快速启动方法,其特征在于,包括备份过程和快速启动过程,所述备份过程包括步骤:步骤101:启动安装有Android操作系统的设备,进入引导程序后,再由引导程序自动装载并启动Android操作系统,进入Android操作系统的用户界面程序;

步骤102:当Android操作系统进入用户界面程序后正在运行时,用户将Android操作系统从普通运行模式切换到系统备份模式;

步骤103:在进入系统备份模式后,首先申请内存空间用于保存系统当前的运行状态,然后将内存中的所有数据以及CPU、设备的运行状态的数据全部保存到申请的内存空间中,并生成快速启动的内存映像;

步骤104:将快速启动的内存映像按预先定义的快速启动映像格式的数据结构备份到外存中,设置快速启动标志,表明系统备份成功与否;

所述快速启动过程包括步骤:

步骤201:再次启动安装有Android操作系统的设备,进入引导程序后,由引导程序完成基本的硬件设备初始化后从外存中读取快速启动映像格式的数据结构,根据该结构中的快速启动标志决定是否进入快速启动模式;

步骤202:若进入快速启动模式,则由引导程序从外存中以内存页面为单位逐步的将快速启动的内存映像拷贝到内存中;

步骤203:由引导程序恢复步骤202中快速启动的内存映像的CPU、设备的运行状态的数据到CPU、设备中,进入Android操作系统的用户界面程序;

在上述备份过程之前设置了一个对Android操作系统的剪裁过程,通过裁剪过程仅保留开机时能够进入用户界面的操作系统所必需的最小数量的模块,得到精简的Android操作系统;

所述裁剪过程的具体过程为:采用开源的GCC编译器对裁剪中的操作系统的源代码进行编译,当编译某一模块的过程中,如果与当前模块相关的必需的模块的源代码被裁剪掉,则编译过程会自动中止并提示中止的原因,再返回查看被裁剪掉的模块的源代码,从中找到中止的原因所对应的模块,将该模块的源代码加入操作系统中再重新编译;循环进行上述过程,直到不再出现自动中止的情况,则完成整个操作系统的编译生成可执行的操作系统的目标代码。

2.根据权利要求1所述的一种基于Android的操作系统快速启动方法,其特征在于,所述步骤102中用户将Android操作系统从普通运行模式切换到系统备份模式的具体过程是:将包含系统备份函数的系统备份文件编译成二进制目标文件,然后使用命令chmod775system_bak将目标文件修改为可执行的命令,使得在Android操作系统启动完成之后,在用户交互程序中输入系统备份命令进入系统备份模式。

3.根据权利要求1所述的一种基于Android的操作系统快速启动方法,其特征在于,所述步骤102中用户将Android操作系统从普通运行模式切换到系统备份模式的具体过程是:在用户界面中添加“进入系统备份模式”菜单,该菜单的源码中调用系统备份函数,使得当用户点击该菜单时便执行系统备份函数进入系统备份模式。

4.根据权利要求1所述的一种基于Android的操作系统快速启动方法,其特征在于,所述步骤102中用户将Android操作系统从普通运行模式切换到系统备份模式的具体过程是:在Android操作系统中设置用于检测系统更新的守护进程,当该守护进程检测到操作系统升级或者安装新的应用程序时,自动调用系统备份函数进入系统备份模式。

5.根据权利要求1所述的一种基于Android的操作系统快速启动方法,其特征在于,所述步骤102中用户将Android操作系统从普通运行模式切换到系统备份模式的具体过程是:修改关机程序,在“关机”程序中调用系统备份函数,当用户点击“关机”菜单后,自动执行系统备份函数,进入系统备份模式。

6.根据权利要求1所述的一种基于Android的操作系统快速启动方法,其特征在于,所述备份过程中步骤104的快速启动映像格式的数据结构是一个结构类型的数据结构,该数据结构的内容包括需要保存的内存页物理地址、需要保存的内存页数量、快速启动标志和CPU当前的PC值;所述需要保存的内存页物理地址也是一个结构类型的数据结构,该数据结构的内容包括需要保存的内存内存页在内存中的原始物理地址和内存页备份到外存的物理地址。

7.根据权利要求6所述的一种基于Android的操作系统快速启动方法,其特征在于,所述快速启动过程中的步骤201的引导程序包括了一个快速启动函数,所述快速启动函数从外存中读取快速启动映像格式,然后检查快速启动标志,以判断是否进入快速启动模式;若读取到快速启动标志为成功,则进入快速启动模式,否则进入普通启动模式。

说明书 :

一种基于Android的操作系统快速启动方法

技术领域

[0001] 本发明涉及操作系统快速启动技术,特别是一种基于Android的操作系统快速启动方法和装置。

背景技术

[0002] Android是Google公司于2007年11月5日宣布的基于Linux平台的开源手机操作系统,该平台由Linux操作系统内核、dalvik虚拟机、支撑库、应用程序框架及应用程序组成。由于它具有良好的开放性和强大的功能,当前Android操作系统除了在手机等靠电池供电的嵌入式设备中广泛应用外,也逐步应用到数字电视等使用交流电源的设备和产品中。
[0003] Android操作系统的启动过程如图1所示,启动过程先后包括引导程序、Linux内核、本地服务(native service)、dalvik虚拟机、Android服务(android service)、应用程序的启动。Android操作系统从打开设备电源到进入Android的用户界面,通常需要40秒左右,而Linux内核的启动只需要2秒左右,Android的服务加载和虚拟机的启动占用了大部分启动时间,极大影响了使用Android操作系统的设备的开机速度。
[0004] 现有的技术方案中,中国发明专利申请CN201010250432.X公开了一种基于Android移动终端冷启动的方法和装置,在快速冷启动模式下,当关闭移动终端的电源后,移动终端在待机状态下将需要保存的数据备份到非易失存储设备中,然后将移动终端断电;当重新启动移动终端后,将备份在非易失存储设备中的数据恢复到相应的物理内存。该方法备份是仅仅备份了程序内存中已使用的内存页面,因此再次启动时必须由引导程序搬运或解压Android操作系统的内核和根文件系统、恢复程序内存中的数据、唤醒系统和驱动,因此该专利的方法启动时间仍然较长。

发明内容

[0005] 本发明的目的是为了克服现有的Android操作系统启动较慢问题,提出了一种基于Android的操作系统快速启动方法。
[0006] 为了实现上述目的,本发明的技术方案是:一种基于Android的操作系统快速启动方法,包括备份过程和快速启动过程,所述备份过程包括步骤:
[0007] 步骤101:启动安装有Android操作系统的设备,进入引导程序后,再由引导程序自动装载并启动Android操作系统,进入Android操作系统的用户界面程序;
[0008] 步骤102:当Android操作系统进入用户界面程序后正在运行时,用户将Android操作系统从普通运行模式切换到系统备份模式;
[0009] 步骤103:在进入系统备份模式后,首先申请内存空间用于保存系统当前的运行状态,然后将内存中的所有数据以及CPU、设备的运行状态的数据全部保存到申请的内存空间中,并生成快速启动的内存映像;
[0010] 步骤104:将快速启动的内存映像按预先定义的快速启动映像格式的数据结构备份到外存中,设置快速启动标志,表明系统备份成功与否。
[0011] 所述快速启动过程包括步骤:
[0012] 步骤201:再次启动安装有Android操作系统的设备,进入引导程序后,由引导程序完成基本的硬件设备初始化后从外存中读取快速启动映像格式的数据结构,根据该结构中的快速启动标志决定是否进入快速启动模式;
[0013] 步骤202:若进入快速启动模式,则由引导程序从外存中以内存页面为单位(4K)逐步的将快速启动的内存映像拷贝到内存中;
[0014] 步骤203:由引导程序恢复步骤202中快速启动的内存映像的CPU、设备的运行状态的数据到CPU、设备中,进入Android操作系统的用户界面程序。
[0015] 本发明的有益效果是:由于本发明在备份过程中就将Android操作系统运行时内存中的所有数据以及CPU、设备的运行状态的数据全部保存到申请的内存空间中,此时内存中的所有数据包括了当前运行的Linux内核、本地服务、dalvik虚拟机、Android服务和应用程序的状态数据以及CPU、设备的运行状态的数据;当再次启动时在引导程序启动后就开始将非易失性存储器(外存)中的数据恢复到内存中并回到备份时的系统状态,因此本发明的方案可以缩短Android操作系统启动时间,本发明的方案最快启动时间为8秒,远远低于Android操作系统正常的启动时间(40多秒),也小于背景技术中已经公开的专利的最快启动时间(17秒)。

附图说明

[0016] 图1是Android操作系统正常启动时的系统架构图。
[0017] 图2是本发明的方案的总体流程图。
[0018] 图3是本发明备份过程的流程图。
[0019] 图4是本发明快速启动过程的流程图。

具体实施方式

[0020] 下面结合附图和具体的实施例对本发明做进一步的说明。
[0021] 实施例1:本实施例公开的一种基于Android的操作系统快速启动方法,包括备份过程和快速启动过程,本方案的总体流程图如图2所示。
[0022] 所述备份过程如图3所示,包括步骤:
[0023] 步骤101:启动安装有Android操作系统的设备,进入引导程序后,再由引导程序自动装载并启动Android操作系统,进入Android操作系统的用户界面程序;
[0024] 步骤102:当Android操作系统进入用户界面程序后正在运行时,用户将Android操作系统从普通运行模式切换到系统备份模式。
[0025] 本步骤中将Android操作系统的标准运行模式称为普通运行模式,而进行系统备份时的工作模式称为系统备份模式。系统备份的全部过程由系统备份函数system_bak完成,所以当调用该函数后系统便自动切换到系统备份模式,该系统备份函数为一个系统中业已存在或者可以按照本领域的公知常识进行编写。本步骤中,在Android操作系统启动后用户可以通过下面四种方式调用系统备份函数system_bak将系统由普通运行模式切换到系统备份模式:
[0026] 1.将包含系统备份函数system_bak的系统备份文件system_bak.c编译成二进制目标文件system_bak,然后使用命令chmod 775 system_bak将目标文件system_bak修改为可执行的命令。因此,在Android操作系统启动完成之后,在用户交互程序adb中输如系统备份命令system_bak进入系统备份模式;
[0027] 2.在用户界面中添加“进入系统备份模式”菜单,该菜单的源码中调用系统备份函数system_bak,因此,当用户点击该菜单时便执行系统备份函数system_bak进入系统备份模式;
[0028] 3.在Android操作系统中设置用于检测系统更新的守护进程,当该守护进程检测到操作系统升级或者安装新的应用程序时,自动调用系统备份函数system_bak,进入系统备份模式;
[0029] 4.修改关机程序,在“关机”程序中调用系统备份函数system_bak,当用户点击“关机”菜单后,自动执行系统备份函数system_bak,进入系统备份模式。
[0030] 本步骤提出的多种方式进入系统备份模式,相比其它关机时备份系统的方法存在下列优势:
[0031] 一.能够根据不同设备的需求灵活选择进入系统备份模式的方法,以满足不同设备的需求:对于手机等靠电池供电的设备可以选择上述四种方式中的任何一种进入系统备份模式,而对于靠交流电源供电的设备(如数字电视等),由于没有备份电源,因此在关机后将无法对设备进行操作,因此只能选择前三种方式进入系统备份模式;
[0032] 二.用户也可以根据习惯自由选择备份方式;
[0033] 三.保证系统在更新后能够自动进入系统备份模式,重新备份系统。
[0034] 步骤103:在进入系统备份模式后,首先申请内存空间用于保存系统当前的运行状态,然后将内存中的所有数据以及CPU、设备的运行状态的数据全部保存到申请的内存空间中,并生成快速启动的内存映像;
[0035] 本步骤中,建立系统备份函数system_bak,该函数完成系统备份的全部工作。首先为保存系统运行状态申请内存空间,并冻结所有的应用程序。然后逐个调用每个已开启设备的驱动程序中的挂起函数suspend挂起设备,此时的应用程序和驱动程序均处于静止状态,并且当前运行的Linux内核、本地服务、dalvik虚拟机、Android服务和应用程序的状态数据以及CPU、设备的运行状态的全部数据均存在于物理内存中;接下来将CPU的PC计数器的值保存到用于存放PC地址的变量pc_addr中,变量pc_addr存在于物理内存中,其它CPU寄存器的值和设备的运行状态数据也全部保存到物理内存中。由于所有非空页面均需要保存,因此接下来需要遍历内存管理区中每个页面,统计需要保存的非空页面数量N,再从空闲的内存空间中申请N个空闲的内存页面,将需要保存的页面中的内容全部保存到N个空闲的内存页面中,最后将每个需要保存的内存页在内存中的原始物理地址记录到用变量src_address中。
[0036] 步骤104:将快速启动的内存映像按预先定义的快速启动映像格式的数据结构备份到外存中,设置快速启动标志,表明系统备份成功与否;
[0037] 本步骤同样由系统备份函数system_bak完成。在该函数中建立用于存储备份地址的数据结构addr_bak,以保存需要备份的每个内存页在内存中的原始物理地址及该页备份到外存的物理地址。
[0038]
[0039] 由于每个需要保存的页面都对应一个存储备份地址的addr_bak数据结构,如果需要保存的内存页面的数量为N,则需要申请N个存储备份地址的addr_bak数据结构以保存每个需要备份的内存页在内存中的原始物理地址及其备份到外存中的物理地址。
[0040] 每个需要备份的内存页面都必须按照快速启动映像格式转储到外存,因此定义快速启动映像格式fastboot_struct如下:
[0041]
[0042] 根据需要保存的内存页数量page_num以及所有需要保存的内存页在内存中的原始物理地址src_address,循环地将每个内存页面中的内容依次全部转储到外存中,并将内存页备份到外存的物理地址填写到dst_address变量中。如果上述备份过程成功,则将快速启动标志fastboot_sig设置为“success”,然后将快速启动映像格式fastboot_struct结构的内容转储到外存中,完成备份过程;否则,如果备份失败,将快速启动标志fastboot_sig设置为“failled”,则转入步骤103继续进行备份。
[0043] 步骤105:关闭设备电源。
[0044] 所述快速启动过程如图4所示,包括步骤:
[0045] 步骤201:再次启动安装有Android操作系统的设备,进入引导程序后,由引导程序完成基本的硬件设备初始化后从外存中读取快速启动映像格式的数据结构fastboot_struct,根据该结构中的快速启动标志fastboot_sig决定是否进入快速启动模式;
[0046] 本实施例中,将按照本实施例方法启动Android操作系统定义为快速启动模式,没有按照本实施例方法而正常启动的过程的定义为普通启动模式.如果快速启动标志fastboot_sig的值为“success”,表明可进入快速启动模式,则进入下一步;否则,如果为“failled”,则进入Android操作系统的普通启动模式,从外存中装载Linux内核及Android操作系统,进行Android操作系统操作系统的标准启动流程,打开用户界面,完成开机过程。
[0047] 本实施例中使用的是引导程序是开源的U-Boot 1.3.4(类似于PC机中的BIOS程序),本步骤中修改引导程序U-Boot 1.3.4的源代码,向其中添加快速启动函数do_fastboot,由do_fastboot函数完成系统恢复也就是快速启动过程。引导程序完成基本的硬件设备初始化后便调用快速启动函数do_fastboot,进入快速启动模式。快速启动函数do_fastboot从外存中读取快速启动映像格式fastboot_struct,然后检查其中的快速启动标志,以判断是否进入快速启动模式。当快速启动标志fastboot_sig的值为“success”,进入快速启动模式,并进入下一步;否则,如果快速启动标志fastboot_sig的值为“failled”,则终止快速启动函数do_fastboot的执行,退出快速启动模式,并调用U-Boot的普通启动函数do_bootm,从外存中引导标准的Android操作系统,进入Android操作系统的普通启动模式。
[0048] 步骤202:若进入快速启动模式,则由引导程序从外存中以内存页面为单位(每个内存页面为4K字节)逐步的将快速启动的内存映像拷贝到内存中;
[0049] 在步骤201中引导程序已经读取了快速启动映像格式fastboot_struct结构,因此可以从中得到保存的内存页数量page_num和需要保存的内存页物理地址addr_table。由于在需要保存的内存页物理地址addr_table结构中保存了所有需要恢复的内存页在内存中的原始物理地址src_address以及内存页备份到外存的物理地址dst_address,所以根据内存页数量page_num的值循环地将外存中每个页面中的数据逐步还原到内存页在内存中的原始物理地址src_address处,从而完成内存状态的恢复。
[0050] 本步骤的工作由快速启动函数do_fastboot调用copy_image函数完成,copy_image函数的核心代码如下:
[0051] for(i=0;i<page_num;i++)
[0052] {
[0053] __copy_page(dst_address,src_address);//从外存中的内存页备份到外存的物理地址dst_address处拷贝一个内存页在内存中的原始物理地址src_address处。
[0054] }//根据需要恢复的内存页数量page_num的值,循环地将备份在外存中的内容以页面为单位逐步拷贝到内存页在内存中的原始物理地址src_address处。
[0055] 步骤203:由引导程序恢复步骤202中快速启动的内存映像的CPU、设备的运行状态的数据到CPU、设备中,进入Android操作系统的用户界面程序。
[0056] 将快速启动映像格式的数据结构fastboot_struct中存放PC地址的pc_addr变量的值赋给PC计数器,从而跳转到备份时中断的目标程序中执行,然后从内存中读取原来备份的CPU及设备的状态数据,恢复处理器和设备的运行状态,完成Android操作系统的快速启动过程。
[0057] 为了使系统能够自动进入快速启动模式,进入引导程序后,在引导程序的命令行程序中输入命令修改引导程序的启动参数:setenv bootcmd=nand read C0008000600000 400000;fastboot 0x7200000。执行该命令后,重新启动Android操作系统,引导程序启动后自动执行fastboot函数进入快速启动模式,开始Android操作系统的快速启动过程。
[0058] 本发明的恢复过程与现有的休眠/唤醒技术最大的不同之处在于:由引导程序完成内存及CPU和设备状态的恢复工作,从而跳过了Linux内核的启动过程,省掉了Linux内核的启动时间,使操作系统启动速度更快。而现有的休眠/唤醒技术在快速启动时必须首先启动操作系统内核,然后由内核完成系统恢复工作。
[0059] 采用实施例1所述的方法,在800M主频,1GMbytes RAM,1G SD卡的硬件平台上,SD卡读取速度为14Mbytes/s的情况下,备份刚进入用户界面的Android操作系统运行时的系统状态,大约120Mbytes内存数据。打开设备电源,从开机到进入用户界面总共需要11秒左右,其中引导程序从SD卡恢复内存状态大约需要9秒,引导程序的启动大约需要1秒,CPU及设备状态的恢复大约需要1秒。因此,理论上本发明所述的快速启动时间在11秒左右完成,而Android操作系统普通冷启动时,在同样的硬件平台上,从开机到进入用户界面总共需要40秒左右时间。由此可见,本发明能够大大减少安装有Android操作系统的设备的冷启动时间。
[0060] 此外,一方面,由于本发明提出的快速启动方法可在系统冷启动时进行;另一方面,本发明的系统备份与其它关机时备份的方法不同,本发明可在Android操作系统启动完成后的任何时间进行系统备份,因此本发明除了可以应用到靠电池供电的嵌入式设备外,还可以广泛应用到其它交流电源设备中。
[0061] 还需要说明的是,本发明采用的非易失性存储器(外存),可以是NAND FLASH卡、SD卡、CF卡或微型硬盘等来备份系统运行时状态。
[0062] 实施例2:为了进一步的提高Android操作系统的启动速度,还可以在实施例1的基础上的备份过程之前设置一个对Android操作系统的剪裁过程,通过裁剪过程仅保留开机时能够进入用户界面的操作系统所必需的最小数量的模块,得到精简的Android操作系统。
[0063] 由于完整的Android操作系统如图1所示,包括Linux内核、本地服务层(native service)、Dalvik虚拟机、android服务层(android service)和应用程序层五层,正常启动过程中,需要从下网上依次启动Linux内核、本地服务层、Dalvik虚拟机、android服务层和应用程序层,其中本地服务层和android服务层就有60多个模块,因此正常启动过程速度慢,从开机到进入用户界面大约需要1分钟左右的时间。
[0064] 因此本步骤采用技术手段对操作系统进行剪裁,只保留能够进入用户界面的操作系统所必需的最小数量的模块,其具体技术过程为:采用开源的GCC(GNU Compiler Collection,GNU编译器套装)编译器对裁剪中的操作系统的源代码进行编译,当编译某一模块的过程中,如果与当前模块相关的必需的模块的源代码被裁剪掉,则编译过程会自动中止并提示中止的原因(如缺乏某一函数或某一变量等),再返回查看被裁剪掉的模块的源代码,从中找到中止的原因所对应的模块,将该模块的源代码加入操作系统中再重新编译;循环进行上述过程,直到不再出现自动中止的情况,则完成整个操作系统的编译生成可执行的操作系统的目标代码。
[0065] 上述裁剪过程根据各模块之间的依赖性对Android操作系统不断地剪裁。本实施例中裁剪的顺序如下:
[0066] 首先剪裁Android操作系统的应用程序层,只保留应用程序层中用户界面程序的源代码,其它的应用程序(如各种应用软件)的源代码全部删除掉。
[0067] 然后剪裁本地服务(native service)层,得到本地服务层所必需的最小数量的模块的源代码,具体为控制台(console)模块、服务管理(servicemanager)模块、主要用于建立Android运行时空间和创建虚拟机的(zygote)模块、用于启动安装包的守护进程(installd)模块和网络相关服务(netd)模块的源代码。
[0068] 最后裁剪android服务层(adroid service),得到android服务层所必需的最小数量的模块的源代码,具体为电源管理(Power Manager)模块、内容管理(Content Manager)模块、包管理(Pacage Manager)模块等10多个模块的源代码,删除本层中其它模块的源代码。
[0069] 启动剪裁后得到的精简的Android操作系统,进入用户界面,然后采用本发明所述的方法备份此时的系统运行状态,下次开机后便得到启动时间更短的快速启动过程。
[0070] 采用实施例2所述的方法,在800M主频,1GMbytes RAM,1G SD卡的硬件平台上,SD卡读取速度为14Mbytes/s的情况下,备份刚进入用户界面的精简的Android操作系统运行时的系统状态,大约84Mbytes内存数据。打开设备电源,从开机到进入用户界面总共需要8秒左右的时间,其中引导程序从SD卡恢复内存状态大约需要6秒,引导程序的启动大约需要1秒,CPU及设备状态的恢复大约需要1秒。因此,理论上本发明所述的快速启动时间在8秒左右完成。而采用本发明所述的方法对于没有剪裁的Android操作系统的快速启动需要大约11秒时间,由此可见,将Android操作系统剪裁后再采用本发明所述的方法能够进一步缩短安装有Android操作系统的设备的冷启动时间。
[0071] 本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。