法律状态公告日
法律状态信息
法律状态
2018-11-06
授权
授权
2018-10-16
著录事项变更 IPC(主分类):G06F9/445 变更前: 变更后: 申请日:20150930
著录事项变更
2016-02-17
实质审查的生效 IPC(主分类):G06F9/445 申请日:20150930
实质审查的生效
2016-01-20
公开
公开
技术领域
本发明涉及一种嵌入式板上实现双操作系统启动的方法。
背景技术
搭载有安卓操作系统的嵌入式板卡(以下称安卓板卡)应用十分广泛,包括作为显示屏驱动板、平板电脑、电视板、多端口测试板等,安卓系统虽然使用较为便利,界面友好,但其定制和功能扩展性却不如传统的Linux系统。传统的平板电脑仅支持单一系统的启动,即仅搭载安卓系统或Linux系统,无法兼顾两者系统的优势而为开发者和用户提供应用的便利。然而,现有的嵌入式板卡要么只是单独搭载一种操作系统,要么需要进行复杂的双系统植入操作,以实现双系启动,这类的双系统植入操作不但成本高,而且一般是以牺牲原系统中的部分功能为代价的。
对此,本专利技术方案旨于实现对原厂安卓系统的最小限度更改,令其支持双系统启动,并保留安卓自有的急救模式(RecoverySystem)。
发明内容
本发明为了在嵌入式板卡上实现安卓与Linux双系统的启动与切换,提出了一种双操作系统启动的方法,令到嵌入式板卡支持双系统,并保留有安卓自有的急救模式,以便安卓系统可以进行恢复出厂设置和OTA升级等操作。
本发明的具体技术内容如下:
一种嵌入式板上实现双操作系统启动的方法,包括
初设置步骤:
1)于嵌入式板上搭载Android系统,建立有写有Android内核和引导系统的BOOT分区,写有Android内核和急救系统的RECOVERY分区,空闲的BACKUP分区,以及对分区引导设置的MISC分区。
2)将RECOVERY分区内Android的急救系统移至BACKUP分区,并于RECOVERY分区写入Linux内核及其引导系统;
3)系统MISC分区内默认写有指向Android系统的boot命令,令嵌入式板默认加载Android系统;
系统切换步骤:
1)在Android系统下操作,将MISC分区内的boot命令改写成recovery命令,并加入引导Linux系统的标识;
2)重新加载系统,引导加载器Bootloader检查识别MISC分区内的命令:
若为有指向Android系统的boot命令,则加载Android系统;
若为recovery命令,则解压调用RECOVERY分区内引导系统,该引导系统识别该MISC分区内是否存在Linux系统的标识,若有,则启动加载Linux系统,否则加载BACKUP分区里的急救系统进行自救恢复。
进一步的,还包括还原启动步骤:在Linux系统下操作,将MISC分区内容清零,重启后该MISC分区内自动加载指向Android系统的boot命令,从而引导启动Android系统。
进一步的,所述Linux系统为Ubuntu系统。
进一步的,所述引导系统为initramfs根文件系统。
本发明与现有技术相比,其优越性体现在:利用安卓系统本身所支持的双启动模式,以对系统的最少修改实现安卓与Linux双系统的启动与切换,降低复杂性,便于用户或系统开发者进行功能定制和扩展,解决了现有方案中双系统启动模式存在的移植过程麻烦、成本高等问题;同时,还保留有安卓自有的急救模式,以便安卓系统可以进行恢复出厂设置和OTA升级等操作。
附图说明
图1为本发明实现双系统切换的流程图。
图2为本发明实现系统启动自检的流程图。
具体实施方式
如下结合附图,对本申请方案作进一步描述:
一种嵌入式板上实现双操作系统启动的方法,包括
初设置步骤:
1)于嵌入式板上搭载Android系统,建立有写有Android内核和引导系统的BOOT分区,写有Android内核和急救系统的RECOVERY分区,空闲的BACKUP分区,以及对分区引导设置的MISC分区。
2)将RECOVERY分区内Android的急救系统移至BACKUP分区,并于RECOVERY分区写入Linux内核及其引导系统;
3)系统MISC分区内默认写有指向Android系统的boot命令,令嵌入式板默认加载Android系统;
系统切换步骤:
1)在Android系统下操作,将MISC分区内的boot命令改写成recovery命令,并加入引导Linux系统的标识;
2)重新加载系统,引导加载器Bootloader检查识别MISC分区内的命令:
若为有指向Android系统的boot命令,则加载Android系统;
若为recovery命令,则解压调用RECOVERY分区内引导系统,该引导系统识别该MISC分区内是否存在Linux系统的标识,若有,则启动加载Linux系统,否则加载BACKUP分区里的急救系统进行自救恢复。
进一步的,还包括还原启动步骤:在Linux系统下操作,将MISC分区内容清零,重启后该MISC分区内自动加载指向Android系统的boot命令,从而引导启动Android系统。
进一步的,所述Linux系统为Ubuntu系统。
进一步的,所述引导系统为initramfs根文件系统,所述initramfs是固化了的小型根文件系统,内核启动后会将其解压至内存中,并执行其中的init程序进行初始化;也就是说,initramfs是第一个获得执行权的根文件系统,负责挂载真正的根文件系统。
本发明实施的具体举例:
一、Rockchip系列安卓系统的启动流程
1、uboot初始化
1.1uboot读取CPU寄存器,如果有recovery标志,则跳转到3
1.2uboot读取misc分区,如果含有recovery命令,则跳转到3
1.3正常启动模式,跳转到2
2、正常启动模式
2.1加载boot分区
2.1.1如果boot分区含有内核和initramfs,则分别加载到内存特定位置,跳转到2.3(略过kernel分区处理)
2.1.2如果boot分区仅含有initramfs,则加载到内存特定位置。
2.2加载kernel分区到内存特定位置。
2.3跳转到4
3、急救模式
3.1读出recovery分区内含的内核和initramfs,分别加载到内存特定位置,跳转到4
4初始化内核启动参数,将执行权移交内核。
在Linux系统内实现安卓急救系统的部分功能。
这样就可以实现,往misc分区写入“recovery”指令,或开机时按住设备的recovery按钮不接USBOTG线,就可以加载recovery分区存储的Linux系统的内核和initramfs,从而引导Linux系统的根文件系统分区启动,进入Linux系统。如果将misc分区清零,则可以引导kernel和/或boot分区存储的安卓系统的内核和initramfs,从而正常加载安卓系统。
二、利用安卓系统recovery分区引导Linux系统的启动流程:
保留recovery分区为Linux系统的内核和initramfs不变,将安卓系统的急救系统(即原recovery分区里的安卓系统的内核和initramfs)里的initramfs放在backup分区即所述第三分区里,然后修改Linux系统的initramfs里的初始化流程:
1、判断misc分区是否有特殊的标志内容“firefly-linux”,如果没有,则转6。
2、判断backup分区是否含有安卓急救系统的initramfs,如果没有,则转6。
3、提取backup分区的initramfs,解压至/root目录中。
4、将/proc,/sys,/dev等重要的系统目录移到/root中(mount–n–omove)。
5、执行execchroot/root/init命令,将/root目录切换成新的根目录,并执行里面的init程序,从而引导安卓系统本身的急救系统。操作完成。
6、走原有流程,正常加载Linux系统。操作完成。
采用这样的修改,用Linux系统的initramfs有选择地去加载安卓的急救系统,便可以达到要求。Linux系统的initramfs的init程序是shell脚本,修改和调试起来非常方便安卓系统的急救程序无需任何修改。
剩下要做的,就要修改安卓系统的切换系统菜单项,将入切换到Linux系统的特殊标志内容“firefly-linux”写到misc分区即可。如此修改,可以最大程序上兼容原有系统。
上述优选实施方式应视为本申请方案实施方式的举例说明,凡与本申请方案雷同、近似或以此为基础作出的技术推演、替换、改进等,均应视为本专利的保护范围。
机译: 操作系统启动控制装置,操作系统启动控制方法,记录介质和嵌入式设备
机译: 一种计算机实现的方法,一种计算机程序产品以及一种嵌入式系统,用于通过嵌入式系统上的客户端来提高数据检索的速度
机译: 一种计算机实现的方法,一种计算机程序产品以及一种嵌入式系统,用于通过嵌入式系统上的客户端来提高数据检索的速度