基于Linux容器技術的多Android系統之間切換方法
【技術領域】
[0001] 本發明設及計算機虛擬化,具體設及基于Linux容器技術的多An化oid系統之間 切換方法。
【背景技術】 陽〇〇引 目前,由于Amlroid系統的開放性和功能性,已被廣泛應用于智能手機、平板電腦 等嵌入式設備產品中。另一方面,正是因為Amlroid的開放性,使得它更容易遭受惡意程序 的攻擊,W竊取用戶隱私或者破壞系統的運行等。同時,很多用戶為了滿足不同的應用需求 會隨身攜帶多部智能手機,一方面可W保護用戶隱私,一方面將公私應用分開。但運給用戶 帶來了極大的不便,同時造成資源的大量浪費。
[0003] 虛擬化技術可W使一個設備上同時運行多個系統,從而有效解決上述問題。但是 傳統的虛擬化技術由于開銷過大,并不適用于嵌入式設備。容器技術更適合于嵌入式設備 的虛擬化。從一個系統到另一個系統需要進行切換。但是目前的切換方法,主要是通過軟 件進行一系列的操作來實現系統間的切換,運種切換方法,過程過于繁瑣,切換速度較慢, 影響用戶體驗。
【發明內容】
[0004] 為了能更好的解決上述問題,本發明的目的在于在Linux內核中建立多個容器, 每個容器中獨立運行一個An化oid系統,從而多個An化oid系統共享一個Linux內核和系 統設備;然后針對多個容器中的A化rdoi系統,提供一種無需安裝任何軟件,實現系統間快 速并且便捷的切換方法。 陽0化]本發明提供一種基于Linux容器技術的多Amlroid系統之間切換方法,包括如下 步驟:
[0006] 在Linux內核中創建至少兩個容器,并在容器中啟動Amlroid系統;
[0007] 當調用容器的切換命令時,改變容器中的系統的使用狀態;
[0008] 基于系統的使用狀態,化ameBuffer驅動將圖像輸出到對應的地址。
[0009] 優選地,所述容器中的系統的使用狀態包括活動狀態和休眠狀態。
[0010] 優選地:所述改變容器中的系統的使用狀態,進一步包括:
[0011] 當系統的使用狀態從活動到休眠轉換時,將系統圖像進行輸出,重新映射到內存 緩沖區;當系統的使用狀態從休眠到活動轉換時,將圖像輸出內存緩沖區重映射到屏幕內 存。
[0012] 優選地,所述調用容器的切換命令進一步包括:
[0013] 響應于用戶按下移動設備按鍵,調用容器的切換命令。
[0014] 優選地:所述創建至少兩個容器之前,還包括:
[0015] 為容器分別定義不同的命名空間。
[0016] 優選地:所述化ameBuffer驅動將圖像輸出到當前容器對應的地址,進一步包 括:
[0017] 為每個容器實現一個虛擬緩沖區,通過判斷不同容器是否處于激活狀態來決定調 用分別將圖像輸出信息輸出到屏幕和虛擬緩沖區的兩個映射函數中的一個。
[0018] 優選地:所述調用容器的切換命令之后,該方法還包括:
[0019] 將要切換到未激活狀態的系統的每個已映射到屏幕內存化amebuffer中進程的 虛擬地址重定向到新的物理位置。
[0020] 與現有的技術相比,本發明所提供的一種基于Linux容器技術的多Amlroid系統 之間切換方法,通過實現顯示設備的復用,支持多個Amlroid可W同時運行,并且利用便捷 的系統間快速切換的方法達到多個Amlroid間的快速切換,提高用戶體驗。
【附圖說明】
[0021] 圖1是根據本發明實施例的采用容器技術的多Amlroid系統框架圖。
[0022] 圖2根據本發明實施例的多個系統復用化amebuffer驅動過程圖。
[0023] 圖3根據本發明實施例的系統間相互切換的過程圖。
【具體實施方式】
[0024] 下文與圖示本發明原理的附圖一起提供對本發明一個或者多個實施例的詳細描 述。結合運樣的實施例描述本發明,但是本發明不限于任何實施例。本發明的范圍僅由權 利要求書限定,并且本發明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細節 W便提供對本發明的透徹理解。出于示例的目的而提供運些細節,并且無運些具體細節中 的一些或者所有細節也可W根據權利要求書實現本發明。
[00巧]本發明為解決上述問題所采用的技術方案是,通過實現顯示設備的復用W支持多 個Amlroid可W同時運行,并且設計一種便捷的系統間快速切換的方法達到多個Amlroid 間的快速切換,具體包括W下步驟: 陽0%] 1)顯示設備的復用
[0027] 1-1)411化〇1(1系統依賴于標準的^111^^化3111613證'6^。8)提供物理屏幕顯示,但 同一時間只能支持一個An化oid系統顯示。為實現FB的復用,首先,對An化oid內核引入 一個新的命名空間機制; 陽02引 1-2)對Amlroid內核中FB的相關源碼進行修改,通過與新引入的命名空間結合來 實現FB的虛擬化。
[0029] 1-3)修改過后的FB驅動可W將不同的系統圖像輸出信息輸出到不同的地方存 儲。
[0030] 2)容器之間的切換:
[0031] 2-1)通過對Linux內核中Namespace和Cgroups機制相關命令進行適當的封裝才 能實現比較有效的容器管理命令;
[0032] 2-2)通過管理命令創建容器,并啟動容器中的系統。在創建容器時,會將新建的容 器加入到一個容器列表中,W方便切換;
[0033] 2-3)容器中的系統啟動后,將正處于使用狀態的系統稱為活動系統,其他稱為休 眠系統。當系統訪問FB進行圖像輸出時,FB驅動會根據系統的不同狀態將不同系統的圖 像輸出到不同的地方進行存儲;
[0034] 2-4)利用快捷鍵來調用容器的切換命令,將活動的系統轉換為休眠,將一個休眠 的系統轉換為活動。并將之前為活動的系統圖像輸出,重新映射到內存緩沖區;將要成為活 動系統的圖像輸出內存緩沖區重映射到屏幕內存。
[0035] 接下來依次結合附圖1、附圖2W及附圖3和【具體實施方式】對本發明申請的技術方 法的主要實現原理及其對應能夠達到的有益效果進行詳細地闡述。
[0036] 圖1為采用容器技術的多An化oid系統框架100。為了實現多個An化oid間的快 速切換,需要對Linux內核101做一些修改,對Linux內核101添加化w_Namespace機制 104,并將該機制與FB驅動結合來完成FB105的虛擬化;并創建一套容器API接口 103,W 方便容器管理模塊102對容器進行管理和切換。 W37] 圖2為多個系統復用FB驅動過程圖200。通過對現有FB驅動修改,將化w_Namespace機制引入到FB驅動中,封裝成新的化驅動201,并將該驅動注冊為FB驅 動。將當前正在使用的系統稱為激活狀態的An化0id系統202,而當前未使用的系統稱為未 激活的Amlroid系統203,修改過后的FB驅動分別為每個容器在系統RAM中實現只與單個 容器相關聯的緩沖區204W存儲未激活Amlroid系統的圖像輸出信息。激活的Amlroid系 統通過操作化驅動201將圖像輸出信息直接映射到屏幕化amebuffer205直接呈現 在物理屏幕上206 ;而未激活的An化oid系統通過操作化驅動201將圖像輸出信息 映射到與該系統對應的緩沖區204中。
[0038] 本實施例中使用的操作系統為開源的Amlroid4. 3,內核版本為3. 4,運行平臺為 GoogleNexus4 手機。
[0039] ^w_Namespace機制和容器管理工具的實現步驟: W40] 步驟101 :為了實現FB的虛擬化,需要在Linux內核中引入一個新的命名空間機 制化w_Namesapce機制;同時,為了方便容器中系統的切換,對Linux內核中Namespace與 Cgroups機制的相關命令進行封裝;
[0041] 本步驟具體實現如下:
[0042] ①Linux內核中用數據結構task_st;ruct來描述進程,該結構中有一個nsproxy 結構體指針,nsproxy結構體定義了各種不同命名空間的結構體指針。initjisproxy結構 體會在task初始化時被用來初始化nsproxy中的命名空間指針。在nsproxy結構體中加 入化w_Namespace的結構體指針的定義,并在init_nsp;roxy結構體中加入P^ew_Namespace 結構體指針的初始化語句,W用來對其進行初始化。
[0043] ②添加^w_Namespace相應功能和定義的源碼,其結構大體上為:stmctnew_ ns_desc的實例是系統全局變量,主要用于保存所有設備在系統中注冊的一些與操作new_