一種嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法。
【背景技術(shù)】
[0002]搭載有安卓操作系統(tǒng)的嵌入式板卡(以下稱安卓板卡)應(yīng)用十分廣泛,包括作為顯示屏驅(qū)動(dòng)板、平板電腦、電視板、多端口測(cè)試板等,安卓系統(tǒng)雖然使用較為便利,界面友好,但其定制和功能擴(kuò)展性卻不如傳統(tǒng)的Linux系統(tǒng)。傳統(tǒng)的平板電腦僅支持單一系統(tǒng)的啟動(dòng),即僅搭載安卓系統(tǒng)或Linux系統(tǒng),無法兼顧兩者系統(tǒng)的優(yōu)勢(shì)而為開發(fā)者和用戶提供應(yīng)用的便利。然而,現(xiàn)有的嵌入式板卡要么只是單獨(dú)搭載一種操作系統(tǒng),要么需要進(jìn)行復(fù)雜的雙系統(tǒng)植入操作,以實(shí)現(xiàn)雙系啟動(dòng),這類的雙系統(tǒng)植入操作不但成本高,而且一般是以犧牲原系統(tǒng)中的部分功能為代價(jià)的。
[0003]對(duì)此,本專利技術(shù)方案旨于實(shí)現(xiàn)對(duì)原廠安卓系統(tǒng)的最小限度更改,令其支持雙系統(tǒng)啟動(dòng),并保留安卓自有的急救模式(Recovery System)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明為了在嵌入式板卡上實(shí)現(xiàn)安卓與Linux雙系統(tǒng)的啟動(dòng)與切換,提出了一種雙操作系統(tǒng)啟動(dòng)的方法,令到嵌入式板卡支持雙系統(tǒng),并保留有安卓自有的急救模式,以便安卓系統(tǒng)可以進(jìn)行恢復(fù)出廠設(shè)置和0ΤΑ升級(jí)等操作。
[0005]本發(fā)明的具體技術(shù)內(nèi)容如下:
一種嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,包括初設(shè)置步驟:
1)于嵌入式板上搭載Android系統(tǒng),建立有寫有Android內(nèi)核和引導(dǎo)系統(tǒng)的BOOT分區(qū),寫有Android內(nèi)核和急救系統(tǒng)的RECOVERY分區(qū),空閑的BACKUP分區(qū),以及對(duì)分區(qū)弓|導(dǎo)設(shè)置的MISC分區(qū)。
[0006]2)將RECOVERY分區(qū)內(nèi)Android的急救系統(tǒng)移至BACKUP分區(qū),并于RECOVERY分區(qū)寫入Linux內(nèi)核及其引導(dǎo)系統(tǒng);
3)系統(tǒng)MISC分區(qū)內(nèi)默認(rèn)寫有指向Android系統(tǒng)的boot命令,令嵌入式板默認(rèn)加載Android 系統(tǒng);
系統(tǒng)切換步驟:
1)在Android系統(tǒng)下操作,將MISC分區(qū)內(nèi)的boot命令改寫成recovery命令,并加入引導(dǎo)Linux系統(tǒng)的標(biāo)識(shí);
2)重新加載系統(tǒng),引導(dǎo)加載器Bootloader檢查識(shí)別MISC分區(qū)內(nèi)的命令:
若為有指向Android系統(tǒng)的boot命令,則加載Android系統(tǒng);
若為recovery命令,則解壓調(diào)用RECOVERY分區(qū)內(nèi)引導(dǎo)系統(tǒng),該引導(dǎo)系統(tǒng)識(shí)別該MISC分區(qū)內(nèi)是否存在Linux系統(tǒng)的標(biāo)識(shí),若有,則啟動(dòng)加載Linux系統(tǒng),否則加載BACKUP分區(qū)里的急救系統(tǒng)進(jìn)行自救恢復(fù)。
[0007]進(jìn)一步的,還包括還原啟動(dòng)步驟:在Linux系統(tǒng)下操作,將MISC分區(qū)內(nèi)容清零,重啟后該MISC分區(qū)內(nèi)自動(dòng)加載指向Android系統(tǒng)的boot命令,從而引導(dǎo)啟動(dòng)Android系統(tǒng)。
[0008]進(jìn)一步的,所述Linux系統(tǒng)為Ubuntu系統(tǒng)。
[0009]進(jìn)一步的,所述引導(dǎo)系統(tǒng)為initramfs根文件系統(tǒng)。
[0010]本發(fā)明與現(xiàn)有技術(shù)相比,其優(yōu)越性體現(xiàn)在:利用安卓系統(tǒng)本身所支持的雙啟動(dòng)模式,以對(duì)系統(tǒng)的最少修改實(shí)現(xiàn)安卓與Linux雙系統(tǒng)的啟動(dòng)與切換,降低復(fù)雜性,便于用戶或系統(tǒng)開發(fā)者進(jìn)行功能定制和擴(kuò)展,解決了現(xiàn)有方案中雙系統(tǒng)啟動(dòng)模式存在的移植過程麻煩、成本高等問題;同時(shí),還保留有安卓自有的急救模式,以便安卓系統(tǒng)可以進(jìn)行恢復(fù)出廠設(shè)置和0ΤΑ升級(jí)等操作。
【附圖說明】
[0011]圖1為本發(fā)明實(shí)現(xiàn)雙系統(tǒng)切換的流程圖。
[0012]圖2為本發(fā)明實(shí)現(xiàn)系統(tǒng)啟動(dòng)自檢的流程圖。
【具體實(shí)施方式】
[0013]如下結(jié)合附圖,對(duì)本申請(qǐng)方案作進(jìn)一步描述:
一種嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,包括初設(shè)置步驟:
1)于嵌入式板上搭載Android系統(tǒng),建立有寫有Android內(nèi)核和引導(dǎo)系統(tǒng)的BOOT分區(qū),寫有Android內(nèi)核和急救系統(tǒng)的RECOVERY分區(qū),空閑的BACKUP分區(qū),以及對(duì)分區(qū)弓|導(dǎo)設(shè)置的MISC分區(qū)。
[0014]2)將RECOVERY分區(qū)內(nèi)Android的急救系統(tǒng)移至BACKUP分區(qū),并于RECOVERY分區(qū)寫入Linux內(nèi)核及其引導(dǎo)系統(tǒng);
3)系統(tǒng)MISC分區(qū)內(nèi)默認(rèn)寫有指向Android系統(tǒng)的boot命令,令嵌入式板默認(rèn)加載Android 系統(tǒng);
系統(tǒng)切換步驟:
1)在Android系統(tǒng)下操作,將MISC分區(qū)內(nèi)的boot命令改寫成recovery命令,并加入引導(dǎo)Linux系統(tǒng)的標(biāo)識(shí);
2)重新加載系統(tǒng),引導(dǎo)加載器Bootloader檢查識(shí)別MISC分區(qū)內(nèi)的命令:
若為有指向Android系統(tǒng)的boot命令,則加載Android系統(tǒng);
若為recovery命令,則解壓調(diào)用RECOVERY分區(qū)內(nèi)引導(dǎo)系統(tǒng),該引導(dǎo)系統(tǒng)識(shí)別該MISC分區(qū)內(nèi)是否存在Linux系統(tǒng)的標(biāo)識(shí),若有,則啟動(dòng)加載Linux系統(tǒng),否則加載BACKUP分區(qū)里的急救系統(tǒng)進(jìn)行自救恢復(fù)。
[0015]進(jìn)一步的,還包括還原啟動(dòng)步驟:在Linux系統(tǒng)下操作,將MISC分區(qū)內(nèi)容清零,重啟后該MISC分區(qū)內(nèi)自動(dòng)加載指向Android系統(tǒng)的boot命令,從而引導(dǎo)啟動(dòng)Android系統(tǒng)。
[0016]進(jìn)一步的,所述Linux系統(tǒng)為Ubuntu系統(tǒng)。
[0017]進(jìn)一步的,所述引導(dǎo)系統(tǒng)為initramfs根文件系統(tǒng),所述initramfs是固化了的小型根文件系統(tǒng),內(nèi)核啟動(dòng)后會(huì)將其解壓至內(nèi)存中,并執(zhí)行其中的init程序進(jìn)行初始化;也就是說,initramfs是第一個(gè)獲得執(zhí)行權(quán)的根文件系統(tǒng),負(fù)責(zé)掛載真正的根文件系統(tǒng)。
[0018]本發(fā)明實(shí)施的具體舉例:
一、Rockchip系列安卓系統(tǒng)的啟動(dòng)流程 1、uboot初始化
1.1 uboot讀取CPU寄存器,如果有recovery標(biāo)志,則跳轉(zhuǎn)到3
1.2 uboot讀取misc分區(qū),如果含有recovery命令,貝lj跳轉(zhuǎn)到3 1.3正常啟動(dòng)模式,跳轉(zhuǎn)到2
2、正常啟動(dòng)模式
2.1加載boot分區(qū)
2.1.1如果boot分區(qū)含有內(nèi)核和initramfs,則分別加載到內(nèi)存特定位置,跳轉(zhuǎn)到
2.3 (略過kernel分區(qū)處理)
2.1.2如果boot分區(qū)僅含有initramfs,則加載到內(nèi)存特定位置。
[0019]2.2加載kernel分區(qū)到內(nèi)存特定位置。
[0020]2.3 跳轉(zhuǎn)到 4
3、急救模式
3.1讀出recovery分區(qū)內(nèi)含的內(nèi)核和initramfs,分別加載到內(nèi)存特定位置,跳轉(zhuǎn)到4 4初始化內(nèi)核啟動(dòng)參數(shù),將執(zhí)行權(quán)移交內(nèi)核。
[0021]在Linux系統(tǒng)內(nèi)實(shí)現(xiàn)安卓急救系統(tǒng)的部分功能。
[0022]這樣就可以實(shí)現(xiàn),往mi sc分區(qū)寫入“ recovery ”指令,或開機(jī)時(shí)按住設(shè)備的recovery按鈕不接USB 0TG線,就可以加載recovery分區(qū)存儲(chǔ)的Linux系統(tǒng)的內(nèi)核和initramfs,從而引導(dǎo)Linux系統(tǒng)的根文件系統(tǒng)分區(qū)啟動(dòng),進(jìn)入Linux系統(tǒng)。如果將misc分區(qū)清零,貝U可以引導(dǎo)kernel和/或boot分區(qū)存儲(chǔ)的安卓系統(tǒng)的內(nèi)核和initramfs,從而正常加載安卓系統(tǒng)。
[0023]二、利用安卓系統(tǒng)recovery分區(qū)引導(dǎo)Linux系統(tǒng)的啟動(dòng)流程:
保留recovery分區(qū)為Linux系統(tǒng)的內(nèi)核和initramfs不變,將安卓系統(tǒng)的急救系統(tǒng)(即原recovery分區(qū)里的安卓系統(tǒng)的內(nèi)核和initramfs)里的initramfs放在backup分區(qū)即所述第三分區(qū)里,然后修改Linux系統(tǒng)的initramfs里的初始化流程:
1、判斷misc分區(qū)是否有特殊的標(biāo)志內(nèi)容“firefly-linux”,如果沒有,則轉(zhuǎn)6。
[0024]2、判斷backup分區(qū)是否含有安卓急救系統(tǒng)的initramfs,如果沒有,則轉(zhuǎn)6。
[0025]3、提取backup分區(qū)的initramfs,解壓至/root目錄中。
[0026]4、將/proc, /sys, /dev 等重要的系統(tǒng)目錄移到 /root 中(mount - η - οmove)ο
[0027]5、執(zhí)行exec chroot /root /init命令,將/root目錄切換成新的根目錄,并執(zhí)行里面的init程序,從而引導(dǎo)安卓系統(tǒng)本身的急救系統(tǒng)。操作完成。
[0028]6、走原有流程,正常加載Linux系統(tǒng)。操作完成。
[0029]采用這樣的修改,用Linux系統(tǒng)的initramfs有選擇地去加載安卓的急救系統(tǒng),便可以達(dá)到要求。Linux系統(tǒng)的initramfs的init程序是shell腳本,修改和調(diào)試起來非常方便安卓系統(tǒng)的急救程序無需任何修改。
[0030]剩下要做的,就要修改安卓系統(tǒng)的切換系統(tǒng)菜單項(xiàng),將入切換到Linux系統(tǒng)的特殊標(biāo)志內(nèi)容“firefly-linux”寫到misc分區(qū)即可。如此修改,可以最大程序上兼容原有系統(tǒng)。
[0031 ] 上述優(yōu)選實(shí)施方式應(yīng)視為本申請(qǐng)方案實(shí)施方式的舉例說明,凡與本申請(qǐng)方案雷同、近似或以此為基礎(chǔ)作出的技術(shù)推演、替換、改進(jìn)等,均應(yīng)視為本專利的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,其特征在于,包括 初設(shè)置步驟: 1)于嵌入式板上搭載Android系統(tǒng),建立有寫有Android內(nèi)核和引導(dǎo)系統(tǒng)的BOOT分區(qū),寫有Android內(nèi)核和急救系統(tǒng)的RECOVERY分區(qū),空閑的BACKUP分區(qū),以及對(duì)分區(qū)引導(dǎo)設(shè)置的MISC分區(qū);; 2)將RECOVERY分區(qū)內(nèi)Android的急救系統(tǒng)移至BACKUP分區(qū),并于RECOVERY分區(qū)寫入Linux內(nèi)核及其引導(dǎo)系統(tǒng); 3)系統(tǒng)MISC分區(qū)內(nèi)默認(rèn)寫有指向Android系統(tǒng)的boot命令,令嵌入式板默認(rèn)加載Android 系統(tǒng); 系統(tǒng)切換步驟: 1)在Android系統(tǒng)下操作,將MISC分區(qū)內(nèi)的boot命令改寫成recovery命令,并加入引導(dǎo)Linux系統(tǒng)的標(biāo)識(shí); 2)重新加載系統(tǒng),引導(dǎo)加載器Bootloader檢查識(shí)別MISC分區(qū)內(nèi)的命令: 若為有指向Android系統(tǒng)的boot命令,則加載Android系統(tǒng); 若為recovery命令,則解壓調(diào)用RECOVERY分區(qū)內(nèi)引導(dǎo)系統(tǒng),該引導(dǎo)系統(tǒng)識(shí)別該MISC分區(qū)內(nèi)是否存在Linux系統(tǒng)的標(biāo)識(shí),若有,則啟動(dòng)加載Linux系統(tǒng),否則加載BACKUP分區(qū)里的急救系統(tǒng)進(jìn)行自救恢復(fù)。2.根據(jù)權(quán)利要求1所述的嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,其特征在于,還包括還原啟動(dòng)步驟:在Linux系統(tǒng)下操作,將MISC分區(qū)內(nèi)容清零,重啟后該MISC分區(qū)內(nèi)自動(dòng)加載指向Android系統(tǒng)的boot命令,從而引導(dǎo)啟動(dòng)Android系統(tǒng)。3.根據(jù)權(quán)利要求1所述的嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,其特征在于:所述Linux系統(tǒng)為Ubuntu系統(tǒng)。4.根據(jù)權(quán)利要求1所述的嵌入式板上實(shí)現(xiàn)雙操作系統(tǒng)啟動(dòng)的方法,其特征在于:所述引導(dǎo)系統(tǒng)為initramfs根文件系統(tǒng)。
【專利摘要】本發(fā)明為了在嵌入式板卡上實(shí)現(xiàn)安卓與Linux雙系統(tǒng)的啟動(dòng)與切換,提出了一種雙操作系統(tǒng)啟動(dòng)的方法,其操作步包括:初設(shè)置步驟、系統(tǒng)切換步驟和還原啟動(dòng)步驟,具體是將Android系統(tǒng)的Recovery分區(qū)的急救系統(tǒng)移至其它空閑分區(qū),例如backup分區(qū)當(dāng)中,并寫入Linux系統(tǒng)的內(nèi)核和引導(dǎo)系統(tǒng),通過修改MISC分區(qū)的腳本命令引導(dǎo)切換加載Android系統(tǒng)和Linux系統(tǒng)。本發(fā)明的方法確保了對(duì)系統(tǒng)的最低限度修改,解決了雙系統(tǒng)啟動(dòng)模式存在的移植過程麻煩、成本高等問題,令到嵌入式板卡支持雙系統(tǒng)并保留有安卓自有的急救模式,以便安卓系統(tǒng)可以進(jìn)行恢復(fù)出廠設(shè)置和OTA升級(jí)等操作。
【IPC分類】G06F9/445
【公開號(hào)】CN105260205
【申請(qǐng)?zhí)枴緾N201510645179
【發(fā)明人】黃其勇, 何俊, 潘雨瑋, 杜靖武, 彭新杰
【申請(qǐng)人】中山市天啟電子科技有限公司
【公開日】2016年1月20日
【申請(qǐng)日】2015年9月30日