一種基于容器的移動終端操作系統(tǒng)升級方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及電數(shù)字?jǐn)?shù)據(jù)處理領(lǐng)域,尤其涉及一種在基于容器的多操作系統(tǒng)移動終端中進(jìn)行操作系統(tǒng)升級的方法和裝置。
【背景技術(shù)】
[0002]目前,行業(yè)內(nèi)對移動操作系統(tǒng)升級的方案主要有2種。一種是完整升級,即將一個完整的操作系統(tǒng)鏡像(通常幾百M(fèi)大小)寫入到存儲設(shè)備。另一種是增量升級,即僅僅更新兩個版本之間的差異文件,升級包通常很小。然而,無論哪種方案,都是一次只能升級一個操作系統(tǒng)。隨著容器技術(shù)的引入和發(fā)展,需要一次同時對兩個以上系統(tǒng)進(jìn)行升級。
【發(fā)明內(nèi)容】
[0003]本申請的目標(biāo)在于提供一種能夠一次對兩個以上操作系統(tǒng)進(jìn)行升級的方法和裝置。
[0004]本申請的目標(biāo)由一種基于容器的移動終端操作系統(tǒng)升級方法實現(xiàn),其中兩個以上操作系統(tǒng)分別在不同容器中運(yùn)行,該方法包括:
[0005]將具有獲取更新進(jìn)程的操作系統(tǒng)切換到前臺,及將其余操作系統(tǒng)切換到后臺;
[0006]前臺操作系統(tǒng)從服務(wù)器下載前臺操作系統(tǒng)和后臺操作系統(tǒng)的增量升級包;
[0007]在用戶確認(rèn)升級時重啟整個移動終端系統(tǒng)進(jìn)入升級recovery模式;
[0008]對所述升級包進(jìn)行解密并驗證所述升級包的簽名是否合法;
[0009]在所述簽名合法時將前臺操作系統(tǒng)的系統(tǒng)分區(qū)掛載到保存前臺操作系統(tǒng)升級文件的目錄,及將后臺操作系統(tǒng)的系統(tǒng)分區(qū)掛載到保存后臺操作系統(tǒng)升級文件的目錄;
[0010]對升級文件分別進(jìn)行校驗以確保升級文件版本正確及未被修改過;及
[0011]用bspatch和升級包中的補(bǔ)丁文件對待升級文件進(jìn)行更新。
[0012]本申請的目標(biāo)還由一種基于容器的移動終端操作系統(tǒng)升級裝置實現(xiàn),其中兩個以上操作系統(tǒng)分別在不同容器中運(yùn)行,該裝置包括:
[0013]系統(tǒng)切換單元,用于將具有獲取更新進(jìn)程的操作系統(tǒng)切換到前臺,及將其余操作系統(tǒng)切換到后臺;
[0014]升級包下載單元,用于使前臺操作系統(tǒng)從服務(wù)器下載前臺操作系統(tǒng)和后臺操作系統(tǒng)的增量升級包;
[0015]升級確認(rèn)單元,用于使用戶能進(jìn)行是否升級的確認(rèn);
[0016]重啟單元,用于在用戶確認(rèn)升級時重啟整個移動終端系統(tǒng)進(jìn)入升級recovery模式;
[0017]解密單元,用于對所述升級包進(jìn)行解密;
[0018]驗證單元,用于驗證所述升級包的簽名是否合法;
[0019]分區(qū)掛載單元,用于在所述簽名合法時將前臺操作系統(tǒng)的系統(tǒng)分區(qū)掛載到保存前臺操作系統(tǒng)升級文件的目錄,及將后臺操作系統(tǒng)的系統(tǒng)分區(qū)掛載到保存后臺操作系統(tǒng)升級文件的目錄;
[0020]校驗單元,用于對升級文件分別進(jìn)行校驗以確保升級文件版本正確及未被修改過;及
[0021]更新單元,用于用bspatch(補(bǔ)丁合成工具)和升級包中的補(bǔ)丁文件對待升級文件進(jìn)行更新。
[0022]基于Linux容器技術(shù),可以在同一個移動終端設(shè)備上同時運(yùn)行2個以上操作系統(tǒng),在bootfs(啟動文件系統(tǒng))啟動時使各個操作系統(tǒng)分別運(yùn)行于不同容器中,各個操作系統(tǒng)共享kernel(內(nèi)核)。本發(fā)明在進(jìn)行系統(tǒng)升級時,首先從服務(wù)器下載2個操作系統(tǒng)的增量升級包,然后重啟機(jī)器進(jìn)入recovery模式,同時增量升級兩個操作系統(tǒng)。與分兩次對兩個操作系統(tǒng)進(jìn)行升級相比,本發(fā)明方法只需要對機(jī)器重啟一次,且提高了升級過程的安全性。
[0023]除非明確指出,在此所用的單數(shù)形式“一”、“該”均包括復(fù)數(shù)含義(即具有“至少一”的意思)。應(yīng)當(dāng)進(jìn)一步理解,說明書中使用的術(shù)語“具有”、“包括”和/或“包含”表明存在所述的特征、步驟、操作、元件和/或部件,但不排除存在或增加一個或多個其他特征、步驟、操作、元件、部件和/或其組合。如在此所用的術(shù)語“和/或”包括一個或多個列舉的相關(guān)項目的任何及所有組合。除非明確指出,在此公開的任何方法的步驟不必精確按照所公開的順序執(zhí)行。
【附圖說明】
[0024]本發(fā)明將在下面參考附圖并結(jié)合優(yōu)選實施例進(jìn)行更完全地說明。
[0025]圖1為根據(jù)本發(fā)明方法的一實施例的流程圖。
[0026]圖2為根據(jù)本發(fā)明方法的另一實施例的流程圖。
[0027]圖3為根據(jù)本發(fā)明裝置的一實施例的結(jié)構(gòu)示意圖。
[0028]圖4為根據(jù)本發(fā)明裝置的另一實施例的結(jié)構(gòu)示意圖。
[0029]為清晰起見,這些附圖均為示意性及簡化的圖,它們只給出了對于理解本發(fā)明所必要的細(xì)節(jié),而省略其他細(xì)節(jié)。
【具體實施方式】
[0030]通過下面給出的詳細(xì)描述,本發(fā)明的適用范圍將顯而易見。然而,應(yīng)當(dāng)理解,在詳細(xì)描述和具體例子表明本發(fā)明優(yōu)選實施例的同時,它們僅為說明目的給出。
[0031]基于Linux容器技術(shù),可以在同一個移動終端設(shè)備如手機(jī)上同時運(yùn)行2個以上操作系統(tǒng),如2個或3個以上操作系統(tǒng)。在此以2個為例進(jìn)行說明。在bootfs啟動時,把第一操作系統(tǒng)0S-1如SyberOS和第二操作系統(tǒng)0S-2如Android分別運(yùn)行于不同容器中,兩個操作系統(tǒng)共享內(nèi)核kerne I。
[0032]圖1示出了本發(fā)明方法的一實施例,用于一次對操作系統(tǒng)0S-1和0S-2均進(jìn)行升級,該方法開始于步驟S10,通過設(shè)備節(jié)點/proc/dev_ns/switch_ns將0S-2切換到后臺,0S-1切換到前臺,0S-1中有一個otad進(jìn)程負(fù)責(zé)從服務(wù)器下載升級包。切換可通過控制容器前后臺切換的節(jié)點switch_ns進(jìn)行,各容器只需向其寫入I,即切換到前臺,寫入0,即切換到后臺。在實施例中,在切換操作系統(tǒng)之前通知用戶。之后,處理進(jìn)行到步驟S20,0S-1中的otad進(jìn)程從服務(wù)器下載兩個操作系統(tǒng)的升級包,下載后存放在內(nèi)置sdcard目錄上。兩個操作系統(tǒng)的升級包可打包成一個文件,也可分成兩個文件。
[0033]在實施例中,升級包可按如下所述進(jìn)行制作。首先從服務(wù)器下載版本l(Syber0S_cactus_20150724-140050-s.1mg)和版本2(Syberos_cactus_20150724-145821-s.1mg)的完整升級包到PC,使用sintool.py去掉完整升級包的簽名,然后使用qtool.py分別將完整升級包解開到目錄Syberos_cactus_20150724-14005C^PSybe;ros_cactus_20150724-145821,最后使用otatool.py基于這兩個版本制作增量升級包。完整升級包中包含syberos的rootfs.img、zImage、u-boot.bin和android的system, img、boot.1mg等。otatool.py首先會創(chuàng)建目錄update,然后分別把兩個版本的syberos的rootfs.1mg掛載到目錄rootfsDirOld 和 rootfsDirNew,把兩個版本的 android 的 system, img 掛載到目錄sy StemDirOld和sy StemDirNew,然后對比兩個版本的文件差異,如果有差異則使用開源軟件bsdiff生成patch,記錄md5碼和文件屬性,軟硬鏈接等,syberos的差異patch寫到update目錄,android的差異patch寫到update/android目錄,寫腳本update/update.sh。拷貝新版本的syberos的zImage、uboot.bin和and