日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法

文檔序號(hào):6517118閱讀:416來(lái)源:國(guó)知局
移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder IPC機(jī)制的方法
【專利摘要】本發(fā)明公開(kāi)了一種移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder?IPC機(jī)制的方法,方法包括:在宿主機(jī)中的Android系統(tǒng)中創(chuàng)建一個(gè)虛擬Binder設(shè)備驅(qū)動(dòng),并且使用該虛擬Binder設(shè)備驅(qū)動(dòng)向Linux內(nèi)核注冊(cè)多個(gè)虛擬Binder設(shè)備,將虛擬Binder設(shè)備對(duì)應(yīng)的設(shè)備文件分配給各個(gè)虛擬機(jī);虛擬機(jī)發(fā)出Binder設(shè)備的訪問(wèn)請(qǐng)求時(shí),首先調(diào)用虛擬Binder設(shè)備驅(qū)動(dòng),繼而通過(guò)該虛擬Binder設(shè)備驅(qū)動(dòng)將使用請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備驅(qū)動(dòng);虛擬Binder設(shè)備驅(qū)動(dòng)將操作轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備的過(guò)程中,對(duì)沖突的服務(wù)名進(jìn)行相應(yīng)的攔截、過(guò)濾和修改。本發(fā)明在實(shí)現(xiàn)多Android系統(tǒng)運(yùn)行下保證了系統(tǒng)性能的高效性。
【專利說(shuō)明】移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder IPC機(jī)制的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)虛擬化【技術(shù)領(lǐng)域】,尤其涉及Android系統(tǒng)虛擬化中多個(gè)系統(tǒng)復(fù)用Binder IPC機(jī)制的方法。
【背景技術(shù)】
[0002]在Android操作系統(tǒng)的用戶量迅速增長(zhǎng)的背景下,其安全性也受到越來(lái)越廣泛的關(guān)注。由于Android缺乏像iOS那樣封閉的生態(tài)系統(tǒng),惡意軟件已經(jīng)成為其安全性的最大威脅。為了限制惡意軟件的活動(dòng)范圍,最大限度地保護(hù)用戶的個(gè)人信息,有人提出了 Android虛擬化這一解決方案。Android虛擬化是指在一臺(tái)設(shè)備上運(yùn)行多個(gè)Android操作系統(tǒng),這些操作系統(tǒng)相互隔離,安裝在某一個(gè)系統(tǒng)中的應(yīng)用軟件無(wú)法對(duì)其它系統(tǒng)構(gòu)成影響。這樣就可以將用戶的個(gè)人信息封鎖在某一個(gè)系統(tǒng)中,即使其它系統(tǒng)中安裝了惡意軟件也不會(huì)對(duì)個(gè)人信息構(gòu)成威脅。目前的虛擬化方案包括:完全虛擬化、半虛擬化以及基于容器的虛擬化,其中半虛擬化和基于容器的虛擬化統(tǒng)稱為輕量級(jí)虛擬化。在這些虛擬化解決方案中,基于容器的輕量級(jí)虛擬化在性能方面相對(duì)其它方案具有很大的性能優(yōu)勢(shì)。
[0003]Binder IPC機(jī)制是Android操作系統(tǒng)最重要的特性之一,系統(tǒng)中幾乎所有的進(jìn)程間通信都通過(guò)Binder機(jī)制實(shí)現(xiàn)。所謂復(fù)用Binder IPC機(jī)制,是指Binder IPC機(jī)制的核心組件(如Binder設(shè)備驅(qū)動(dòng)、Service Manager)由宿主機(jī)提供,虛擬機(jī)則沒(méi)有這些組件,虛擬機(jī)中的進(jìn)程通過(guò)一個(gè)虛擬設(shè)備間接地使用宿主機(jī)提供Binder IPC機(jī)制。
[0004]為了實(shí)現(xiàn)虛擬機(jī)使用宿主機(jī)提供的Binder IPC機(jī)制,最直接的方案是直接將宿主機(jī)的Binder設(shè)備分配給虛擬機(jī)使用。然而由于Binder驅(qū)動(dòng)實(shí)現(xiàn)的時(shí)候沒(méi)有考慮多個(gè)系統(tǒng)同時(shí)使用的情況,這種方案并不可行。其主要原因在于原生的Binder驅(qū)動(dòng)只允許存在一個(gè)Service Manager,所以這種方案下宿主機(jī)和虛擬機(jī)中的服務(wù)都只能注冊(cè)到這個(gè)唯一的Service Manager。然而宿主機(jī)和虛擬機(jī)中運(yùn)行的是同一套服務(wù),相同的服務(wù)以相同的名字注冊(cè)時(shí)必然會(huì)發(fā)生沖突,導(dǎo)致后運(yùn)行的服務(wù)無(wú)法注冊(cè)。另外,如果所有的服務(wù)都注冊(cè)到同一個(gè)Service Manager,那么各個(gè)虛擬機(jī)中的客戶端進(jìn)程也無(wú)法區(qū)分哪些服務(wù)屬于自己所在的虛擬機(jī),哪些服務(wù)屬于宿主機(jī)或其它的虛擬機(jī)。
[0005]如圖1所示,Binder IPC機(jī)制包括Binder設(shè)備驅(qū)動(dòng)、Binder支持庫(kù)(未繪示)、Service Manager、服務(wù)和客戶端等組件。其中服務(wù)是提供某種特定功能(如媒體播放)的進(jìn)程,每個(gè)服務(wù)都有一個(gè)名字(如media, player)。服務(wù)啟動(dòng)之后將其名字注冊(cè)到ServiceManager,后者負(fù)責(zé)保存服務(wù)名字與服務(wù)的對(duì)應(yīng)關(guān)系。當(dāng)客戶端進(jìn)程需要使用某個(gè)服務(wù)提供的功能時(shí),它先向Service Manager發(fā)送請(qǐng)求獲取服務(wù)名字對(duì)應(yīng)的服務(wù),之后便可以向服務(wù)發(fā)送請(qǐng)求使用其對(duì)應(yīng)的功能。Binder設(shè)備驅(qū)動(dòng)是Service Manager、服務(wù)和客戶端三者之間通信的橋梁,這三者通過(guò)打開(kāi)Binder設(shè)備(/dev/binder)并對(duì)其進(jìn)行1/0操作(如open,ioctl, mmap等)來(lái)傳遞請(qǐng)求和響應(yīng)。
[0006]在基于容器的Android虛擬化的實(shí)現(xiàn)方案中,虛擬機(jī)與宿主機(jī)共享同一個(gè)Linux內(nèi)核。而Binder設(shè)備驅(qū)動(dòng)屬于內(nèi)核的一部分,因此必須對(duì)Binder設(shè)備進(jìn)行虛擬化。Binder設(shè)備的虛擬化的一種方案是在Linux內(nèi)核中為宿主機(jī)以及每一個(gè)虛擬機(jī)都注冊(cè)一個(gè)Binder設(shè)備,然后在每一個(gè)系統(tǒng)中均啟動(dòng)一個(gè)Service Manager,各個(gè)系統(tǒng)中的服務(wù)注冊(cè)到其對(duì)應(yīng)的Service Manager中,系統(tǒng)與系統(tǒng)之間互不影響。這種方案的優(yōu)點(diǎn)是系統(tǒng)與系統(tǒng)之間完全隔離,不存在服務(wù)名字沖突的問(wèn)題,但是也存在以下幾個(gè)不足:
[0007]I)由于Binder設(shè)備驅(qū)動(dòng)中使用了一些全局變量(如記錄Service Manager進(jìn)程信息的結(jié)構(gòu)),為了創(chuàng)建多個(gè)Binder設(shè)備,需要為這些全局變量創(chuàng)建對(duì)應(yīng)的副本,并且構(gòu)建各個(gè)系統(tǒng)與這些副本之間的對(duì)應(yīng)關(guān)系。這種方案要么需要對(duì)原有的Binder設(shè)備驅(qū)動(dòng)進(jìn)行大規(guī)模的修改,這不利于系統(tǒng)的穩(wěn)定性;要么需要在內(nèi)核中創(chuàng)建多個(gè)對(duì)等的Binder設(shè)備驅(qū)動(dòng)程序,這樣的設(shè)計(jì)又缺乏靈活性。
[0008]2)由于每個(gè)系統(tǒng)中的客戶端都只能訪問(wèn)自身系統(tǒng)內(nèi)部的Binder設(shè)備,因此這些客戶端進(jìn)程也只能使用該系統(tǒng)中運(yùn)行的服務(wù),這樣無(wú)法實(shí)現(xiàn)系統(tǒng)之間服務(wù)的共享,即無(wú)法減少整個(gè)設(shè)備上運(yùn)行的服務(wù)總數(shù),不利于對(duì)設(shè)備的運(yùn)行性能進(jìn)行優(yōu)化。
[0009]因此需要一種更加方便而且對(duì)性能影響較低的方法來(lái)解決Binder設(shè)備虛擬化以及服務(wù)共享的問(wèn)題,為此本發(fā)明設(shè)計(jì)了一種虛擬機(jī)復(fù)用宿主機(jī)的Binder IPC機(jī)制的方法。

【發(fā)明內(nèi)容】

[0010]本發(fā)明的目的在于提供一種Android虛擬化場(chǎng)景下復(fù)用Binder IPC機(jī)制的實(shí)現(xiàn)方法,這種方法應(yīng)用在基于容器的Android系統(tǒng)虛擬化場(chǎng)景中,在幾乎不修改Android原有代碼的情況下實(shí)現(xiàn)Binder設(shè)備的虛擬化,并且實(shí)現(xiàn)服務(wù)共享的功能,為進(jìn)一步優(yōu)化Android虛擬化的性能提供了基礎(chǔ)。
[0011]一種移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder IPC機(jī)制的方法,所述多Android系統(tǒng)運(yùn)行于單Linux內(nèi)核環(huán)境中,所述多Android系統(tǒng)中其中一個(gè)運(yùn)行于宿主機(jī)中,其余運(yùn)行在虛擬機(jī)中,方法包括:
[0012]在宿主機(jī)中的Android系統(tǒng)中創(chuàng)建一個(gè)虛擬Binder設(shè)備驅(qū)動(dòng),并且使用該虛擬Binder設(shè)備驅(qū)動(dòng)向Linux內(nèi)核注冊(cè)多個(gè)虛擬Binder設(shè)備,將這些虛擬Binder設(shè)備對(duì)應(yīng)的設(shè)備文件分配給各個(gè)虛擬機(jī);
[0013]虛擬機(jī)中Android系統(tǒng)的應(yīng)用程序發(fā)出Binder設(shè)備的訪問(wèn)請(qǐng)求時(shí),首先調(diào)用虛擬Binder設(shè)備驅(qū)動(dòng),虛擬Binder設(shè)備驅(qū)動(dòng)對(duì)訪問(wèn)請(qǐng)求進(jìn)行相應(yīng)的攔截,并對(duì)訪問(wèn)請(qǐng)求中沖突的服務(wù)名進(jìn)行過(guò)濾和修改處理,繼而通過(guò)該虛擬Binder設(shè)備驅(qū)動(dòng)將處理后得到的BinderIPC機(jī)制的使用請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)虛擬機(jī)間接使用宿主機(jī)的BinderIPC機(jī)制。
[0014]本發(fā)明提供的多Android 系統(tǒng)復(fù)用 Binder IPC(Inter-Process Communication,進(jìn)程間通信)機(jī)制的方法創(chuàng)建了一個(gè)虛擬Binder設(shè)備驅(qū)動(dòng),并創(chuàng)建了多個(gè)虛擬Binder設(shè)備分配給相應(yīng)的多個(gè)虛擬機(jī),最后通過(guò)與真實(shí)的Binder設(shè)備驅(qū)動(dòng)相銜接,可以實(shí)現(xiàn)虛擬機(jī)復(fù)用宿主機(jī)的Binder IPC機(jī)制,這種方法具有很高的靈活性和可擴(kuò)展性。同時(shí)在轉(zhuǎn)發(fā)過(guò)程中通過(guò)對(duì)來(lái)自虛擬機(jī)的操作進(jìn)行攔截,并且對(duì)特定使用的請(qǐng)求進(jìn)行過(guò)濾和修改,解決虛擬機(jī)與宿主機(jī)運(yùn)行同一種服務(wù)時(shí)存在的服務(wù)名沖突的問(wèn)題。Binder設(shè)備驅(qū)動(dòng)的函數(shù),將應(yīng)用程序(包括服務(wù)和客戶端)對(duì)虛擬Binder設(shè)備的訪問(wèn)請(qǐng)求(如open、ioctl、mmap等)轉(zhuǎn)發(fā)給真實(shí)的Binder設(shè)備驅(qū)動(dòng)。
[0015]在轉(zhuǎn)發(fā)應(yīng)用程序?qū)μ摂MBinder設(shè)備的訪問(wèn)請(qǐng)求過(guò)程中,虛擬Binder設(shè)備驅(qū)動(dòng)過(guò)濾出發(fā)送給Service Manager的注冊(cè)服務(wù)(由服務(wù)的進(jìn)程發(fā)起)和獲取服務(wù)(由客戶端的進(jìn)程發(fā)起)的請(qǐng)求,并且在轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備之前使用一個(gè)轉(zhuǎn)換函數(shù)f修改這兩種請(qǐng)求中的服務(wù)名字段。
[0016]其中虛擬Binder設(shè)備驅(qū)動(dòng)采用自定義的驅(qū)動(dòng)函數(shù)對(duì)需要攔截的訪問(wèn)請(qǐng)求進(jìn)行攔截,對(duì)于不需要攔截的訪問(wèn)請(qǐng)求則直接使用真實(shí)Binder設(shè)備驅(qū)動(dòng)中的函數(shù)。
[0017]對(duì)不需要攔截的操作直接調(diào)用真實(shí)的Binder設(shè)備驅(qū)動(dòng)中的函數(shù)可以減少對(duì)內(nèi)核的修改。
[0018]自定義的驅(qū)動(dòng)函數(shù)包括過(guò)濾和修改命令,其中過(guò)濾和修改命令分析應(yīng)用程序發(fā)送的ioctl命令并從中獲取命令參數(shù),從命令參數(shù)中獲取Binder子命令,并判斷各個(gè)Binder子命令是否需要修改,根據(jù)判斷結(jié)果對(duì)Binder子命令進(jìn)行處理。
[0019]其中,ioctl命令即為需要過(guò)濾的訪問(wèn)請(qǐng)求。在自定義的驅(qū)動(dòng)函數(shù)中,需要自定義的函數(shù)只有conbinder_ioctl,該函數(shù)的實(shí)現(xiàn)分成兩個(gè)部分,第一部分是過(guò)濾和修改命令,第二部分是將過(guò)濾和修改命令轉(zhuǎn)交給真實(shí)Binder設(shè)備驅(qū)動(dòng)中的binder_ioctl函數(shù),第二部分直接調(diào)用binder_ioctl函數(shù)即可。過(guò)濾和修改命令首先從應(yīng)用程序中過(guò)濾出ioctl命令,并對(duì)其進(jìn)行處理,從而解決應(yīng)用程序發(fā)出使用請(qǐng)求的服務(wù)名沖突問(wèn)題。
[0020]其中判斷各個(gè)Binder子命令是否需要修改的方法如下:
[0021]步驟1,判斷Binder子命令是否為事務(wù)命令:是,則獲取事務(wù)命令參數(shù),并進(jìn)入步驟2 ;否則,結(jié)束對(duì)該Binder子命令的處理;
[0022]步驟2,通過(guò)事務(wù)命令參數(shù)判斷事務(wù)命令的目標(biāo)服務(wù)是否為Service Manager,是則進(jìn)入步驟3 ;否則結(jié)束對(duì)該Binder子命令的處理;
[0023]步驟3,判斷事務(wù)命令的功能是否為注冊(cè)服務(wù)、查詢服務(wù)或者獲取服務(wù):是,則獲取事務(wù)命令中的服務(wù)名,并修改該Binder子命令參數(shù)中的服務(wù)名;否則,結(jié)束對(duì)該Binder子命令的處理。
[0024]在步驟I中,當(dāng)Binder子命令的命令號(hào)為BC_TRANSACTION時(shí)該Binder子命令為事務(wù)命令。在步驟3中,每個(gè)服務(wù)對(duì)應(yīng)一個(gè)功能號(hào),通過(guò)判斷事務(wù)命令的功能號(hào)來(lái)判斷該事務(wù)命令是否為注冊(cè)服務(wù)、查詢服務(wù)或者獲取服務(wù)。
[0025]在步驟3中,在修改Binder子命令的服務(wù)名之前,還判斷該服務(wù)的服務(wù)名是否存在于共享服務(wù)列表中:是,直接結(jié)束對(duì)該Binder子命令的處理;否則,修改服務(wù)名并結(jié)束對(duì)該Binder子命令的處理。
[0026]通過(guò)將宿主機(jī)中運(yùn)行的特定服務(wù)的名字寫入共享服務(wù)列表文件來(lái)設(shè)置該服務(wù)為共享服務(wù)。共享服務(wù)在宿主機(jī)中運(yùn)行,被所有虛擬機(jī)共享。然后在虛擬Binder設(shè)備驅(qū)動(dòng)的攔截和過(guò)濾規(guī)則中使用共享服務(wù)的列表作為白名單,使得虛擬機(jī)中對(duì)共享服務(wù)的請(qǐng)求能夠穿透該虛擬設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)虛擬機(jī)直接使用宿主機(jī)中運(yùn)行的共享服務(wù)。
[0027]其中共享服務(wù)列表的建立方法為:在proc文件系統(tǒng)中創(chuàng)建一個(gè)共享服務(wù)列表文件,且在內(nèi)核內(nèi)存空間中分配一塊區(qū)域用于存放文件內(nèi)容,并將宿主機(jī)中運(yùn)行的特定服務(wù)的服務(wù)名寫入該共享服務(wù)列表文件中作為共享服務(wù)。
[0028]共享服務(wù)列表文件創(chuàng)建在proc文件系統(tǒng)中,并且在內(nèi)核代碼中創(chuàng)建該文件對(duì)應(yīng)的讀、寫回調(diào)函數(shù),當(dāng)應(yīng)用程序讀取或?qū)懭敕?wù)名時(shí),內(nèi)核會(huì)調(diào)用對(duì)應(yīng)的回調(diào)函數(shù)執(zhí)行共享服務(wù)名的存儲(chǔ)和讀取。
[0029]其中在共享服務(wù)列表文件中,創(chuàng)建一棵紅黑樹(shù)用于索引該共享服務(wù)列表文件中存儲(chǔ)的共享服務(wù)名。
[0030]紅黑樹(shù)具有較高的效率和較好的統(tǒng)計(jì)性能,可以用于快速查找該共享服務(wù)列表中的共享服務(wù)名。
[0031]修改沖突的服務(wù)名方法為,在攔截訪問(wèn)請(qǐng)求并進(jìn)行過(guò)濾之后使用一個(gè)轉(zhuǎn)換函數(shù)f來(lái)修改沖突的服務(wù)名。
[0032]其中,修改后的服務(wù)名中包含了修改前服務(wù)名以及發(fā)送該服務(wù)使用請(qǐng)求的來(lái)源信息。例如,虛擬機(jī)各自帶有一個(gè)編號(hào)N,則修改后服務(wù)名中包含N的信息。
[0033]其中轉(zhuǎn)換函數(shù)f滿足以下所有條件:
[0034]a.修改后服務(wù)名不等于修改前服務(wù)名;
[0035]b.對(duì)于相同的修改前服務(wù)名和不同的虛擬機(jī)編號(hào),修改后服務(wù)名不同;
[0036]c.對(duì)于不同的修改前服務(wù)名和相同的虛擬機(jī)編號(hào),修改后服務(wù)名不同;
[0037]d.修改前服務(wù)名與修改后服務(wù)名長(zhǎng)度相等。
[0038]滿足以上條件的轉(zhuǎn)換函數(shù)f保證來(lái)自虛擬機(jī)的服務(wù)名不同于宿主機(jī)的服務(wù)名,且不同虛擬機(jī)的相同服務(wù)具有不同服務(wù)名,相同虛擬機(jī)的不同服務(wù)也具有不同服務(wù)名,因此解決了服務(wù)名沖突的問(wèn)題。由于請(qǐng)求的數(shù)據(jù)包格式已經(jīng)確定,修改過(guò)的服務(wù)名也需要放回原來(lái)服務(wù)名的位置,而這個(gè)位置的長(zhǎng)度是發(fā)送使用請(qǐng)求的應(yīng)用程序確定的,因此修改后服務(wù)名與修改前服務(wù)名長(zhǎng)度相等。
[0039]通過(guò)將虛擬機(jī)的根文件系統(tǒng)中的Binder設(shè)備與宿主機(jī)中的虛擬Binder設(shè)備綁定來(lái)分配虛擬Binder設(shè)備。
[0040]通過(guò)在mount命令中使用bind選項(xiàng)將這些設(shè)備與虛擬機(jī)根文件系統(tǒng)中的/dev/binder文件綁定,從而將各個(gè)Binder設(shè)備分配給各個(gè)虛擬機(jī)。虛擬機(jī)中的應(yīng)用程序發(fā)出Binder設(shè)備使用請(qǐng)求時(shí),內(nèi)核將執(zhí)行虛擬Binder設(shè)備驅(qū)動(dòng)中的函數(shù),對(duì)使用請(qǐng)求進(jìn)行攔截,過(guò)濾和修改。
【專利附圖】

【附圖說(shuō)明】
[0041]圖1為現(xiàn)有技術(shù)Binder IPC機(jī)制工作原理圖;
[0042]圖2為本發(fā)明一個(gè)實(shí)施例的系統(tǒng)框架圖;
[0043]圖3為本發(fā)明當(dāng)前實(shí)施例虛擬Binder設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)圖;
[0044]圖4為本發(fā)明當(dāng)前實(shí)施例虛擬Binder設(shè)備的功能原理圖,圖中不包括共享服務(wù)列表;
[0045]圖5為本發(fā)明當(dāng)前實(shí)施例處理一個(gè)Binder子命令的流程圖;
[0046]圖6為本發(fā)明當(dāng)前實(shí)施例過(guò)濾和修改使用請(qǐng)求的主流程圖。
【具體實(shí)施方式】
[0047]通過(guò)對(duì)Linux內(nèi)核代碼進(jìn)行修改來(lái)實(shí)現(xiàn)本發(fā)明移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder IPC機(jī)制的方法。在當(dāng)前實(shí)施例中,修改的Linux內(nèi)核版本為L(zhǎng)inux3.9.4。[0048]如圖2所示,Linux內(nèi)核中具有真實(shí)的Binder設(shè)備驅(qū)動(dòng),本發(fā)明則在此基礎(chǔ)上構(gòu)建了虛擬Binder設(shè)備驅(qū)動(dòng),當(dāng)虛擬機(jī)中的應(yīng)用程序需要訪問(wèn)Binder設(shè)備時(shí),應(yīng)用程序向虛擬機(jī)中的Binder設(shè)備發(fā)出訪問(wèn)請(qǐng)求,貝U虛擬Binder設(shè)備驅(qū)動(dòng)接收虛擬機(jī)應(yīng)用程序?qū)inder設(shè)備的訪問(wèn)請(qǐng)求,并將這些訪問(wèn)請(qǐng)求進(jìn)行攔截、過(guò)濾和修改處理,最終將處理過(guò)后得到的Binder IPC機(jī)制的使用請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)虛擬機(jī)應(yīng)用程序間接使用宿主機(jī)中的Binder IPC機(jī)制。虛擬Binder設(shè)備驅(qū)動(dòng)在處理請(qǐng)求的過(guò)程中,會(huì)過(guò)濾出發(fā)送給Service Manager并且與服務(wù)名相關(guān)的Binder子命令,并且對(duì)這些Binder子命令中的服務(wù)名進(jìn)行修改,以解決虛擬機(jī)直接使用真實(shí)Binder設(shè)備時(shí)存在的名字沖突的問(wèn)題。
[0049]虛擬Binder設(shè)備驅(qū)動(dòng)按照misc設(shè)備驅(qū)動(dòng)的模型編寫,代碼存放在conbinder.c中。具體操作步驟如下:
[0050]首先,創(chuàng)建一個(gè)struct file_operations 類型的變量 conbinder_fops,這個(gè)結(jié)構(gòu)體中的函數(shù)指針與虛擬Binder設(shè)備的各種操作一一對(duì)應(yīng)。對(duì)于需要攔截的操作編寫自定義的驅(qū)動(dòng)函數(shù),對(duì)于不需要攔截的操作則直接使用真實(shí)Binder設(shè)備驅(qū)動(dòng)中的函數(shù)。驅(qū)動(dòng)函數(shù)中各個(gè)函數(shù)的實(shí)現(xiàn)方式如下表所示:
[0051]
【權(quán)利要求】
1.一種移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用Binder IPC機(jī)制的方法,所述多Android系統(tǒng)運(yùn)行于單Linux內(nèi)核環(huán)境中,所述多Android系統(tǒng)中其中一個(gè)運(yùn)行于宿主機(jī)中,其余運(yùn)行在虛擬機(jī)中,其特征在于,方法包括: 在宿主機(jī)中的Android系統(tǒng)中創(chuàng)建一個(gè)虛擬Binder設(shè)備驅(qū)動(dòng),并且使用該虛擬Binder設(shè)備驅(qū)動(dòng)向Linux內(nèi)核注冊(cè)多個(gè)虛擬Binder設(shè)備,將這些虛擬Binder設(shè)備對(duì)應(yīng)的設(shè)備文件分配給各個(gè)虛擬機(jī); 虛擬機(jī)中Android系統(tǒng)的應(yīng)用程序發(fā)出Binder設(shè)備的訪問(wèn)請(qǐng)求時(shí),首先調(diào)用虛擬Binder設(shè)備驅(qū)動(dòng),虛擬Binder設(shè)備驅(qū)動(dòng)對(duì)訪問(wèn)請(qǐng)求進(jìn)行相應(yīng)的攔截,并對(duì)訪問(wèn)請(qǐng)求中沖突的服務(wù)名進(jìn)行過(guò)濾和修改處理,繼而通過(guò)該虛擬Binder設(shè)備驅(qū)動(dòng)將處理后得到的BinderIPC機(jī)制的使用請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)Binder設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)虛擬機(jī)間接使用宿主機(jī)的BinderIPC機(jī)制。
2.如權(quán)利要求1所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,其中虛擬Binder設(shè)備驅(qū)動(dòng)采用自定義的驅(qū)動(dòng)函數(shù)對(duì)需要攔截的訪問(wèn)請(qǐng)求進(jìn)行攔截,對(duì)于不需要攔截的訪問(wèn)請(qǐng)求則直接使用真實(shí)Binder設(shè)備驅(qū)動(dòng)中的函數(shù)。
3.如權(quán)利要求2所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,自定義的驅(qū)動(dòng)函數(shù)包括過(guò)濾和修改命令,其中過(guò)濾和修改命令分析應(yīng)用程序發(fā)送的ioctl命令并從中獲取命令參數(shù),從命令參數(shù)中獲取Binder子命令,并判斷各個(gè)Binder子命令是否需要修改,根據(jù)判斷結(jié)果對(duì)Binder子命令進(jìn)行處理。
4.如權(quán)利要求3所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,其中判斷各個(gè)Binder子命令是否需要修改的方法如下: 步驟1,判斷Binder子命令是否為事務(wù)命令:是,則獲取事務(wù)命令參數(shù),并進(jìn)入步驟2 ;否則,結(jié)束對(duì)該Binder子命令的處理; 步驟2,通過(guò)事務(wù)命令參數(shù)判斷事務(wù)命令的目標(biāo)服務(wù)是否為Service Manager,是則進(jìn)入步驟3 ;否則結(jié)束對(duì)該Binder子命令的處理; 步驟3,判斷事務(wù)命令的功能是否為注冊(cè)服務(wù)、查詢服務(wù)或者獲取服務(wù):是,則獲取事務(wù)命令中的服務(wù)名,并修改該Binder子命令參數(shù)中的服務(wù)名;否則,結(jié)束對(duì)該Binder子命令的處理。
5.如權(quán)利要求4所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,在步驟3中,在修改Binder子命令的服務(wù)名之前,還判斷該服務(wù)的服務(wù)名是否存在于共享服務(wù)列表中:是,直接結(jié)束對(duì)該Binder子命令的處理;否則,修改服務(wù)名并結(jié)束對(duì)該Binder子命令的處理。
6.如權(quán)利要求5所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,其中共享服務(wù)列表的建立方法為:在proc文件系統(tǒng)中創(chuàng)建一個(gè)共享服務(wù)列表文件,且在內(nèi)核內(nèi)存空間中分配一塊區(qū)域用于存放文件內(nèi)容,并將宿主機(jī)中運(yùn)行的特定服務(wù)的服務(wù)名寫入該共享服務(wù)列表文件中作為共享服務(wù)。
7.如權(quán)利要求6所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,其中在共享服務(wù)列表文件中,創(chuàng)建一棵紅黑樹(shù)用于索引該共享服務(wù)列表文件中存儲(chǔ)的共享服務(wù)名。
8.如權(quán)利要求1所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,修改沖突的服務(wù)名方法為,在攔截訪問(wèn)請(qǐng)求并進(jìn)行過(guò)濾之后使用一個(gè)轉(zhuǎn)換函數(shù)f來(lái)修改沖突的服務(wù)名。
9.如權(quán)利要求8所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,其中轉(zhuǎn)換函數(shù)f滿足以下所有條件: a.修改后服務(wù)名不等于修改前服務(wù)名; b.對(duì)于相同的修改前服務(wù)名和不同的虛擬機(jī)編號(hào),修改后服務(wù)名不同; c.對(duì)于不同的修改前服務(wù)名和相同的虛擬機(jī)編號(hào),修改后服務(wù)名不同; d.修改前服務(wù)名與修改后服務(wù)名長(zhǎng)度相等。
10.如權(quán)利要求1所述移動(dòng)虛擬化場(chǎng)景中多Android系統(tǒng)復(fù)用BinderIPC機(jī)制的方法,其特征在于,通過(guò)將虛擬機(jī)的根文件系統(tǒng)中的Binder設(shè)備文件與宿主機(jī)中的虛擬Binder設(shè)備文件綁 定來(lái)分配虛擬Binder設(shè)備。
【文檔編號(hào)】G06F9/455GK103593225SQ201310526351
【公開(kāi)日】2014年2月19日 申請(qǐng)日期:2013年10月30日 優(yōu)先權(quán)日:2013年10月30日
【發(fā)明者】陳文智, 李川, 徐磊, 孫偉杰, 李國(guó)璽 申請(qǐng)人:浙江大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1