本發(fā)明涉及終端技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及一種移動(dòng)終端、容器電話通信功能實(shí)現(xiàn)方法及跨容器通信方法。
背景技術(shù):
隨著時(shí)代的發(fā)展,各種新興的操作系統(tǒng)不斷涌現(xiàn),為用戶帶來(lái)了新穎且更加便捷的終端使用體驗(yàn)。Linux Container容器是一種內(nèi)核虛擬化技術(shù),可以提供輕量級(jí)的虛擬化,以便隔離進(jìn)程和資源,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。
利用Linux內(nèi)核的命名空間(namespace)特性,可以形成多個(gè)容器;通過(guò)容器,可以有效地將原來(lái)由單個(gè)操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求,實(shí)現(xiàn)移動(dòng)終端同時(shí)運(yùn)行多個(gè)操作系統(tǒng)。比如,在移動(dòng)終端上運(yùn)行一個(gè)安全系統(tǒng),再加上一個(gè)或多個(gè)娛樂(lè)系統(tǒng)。
現(xiàn)有技術(shù)中,移動(dòng)終端中多個(gè)容器往往共享通信串口,即把移動(dòng)終端的通信串口分別給不同的容器使用,每個(gè)容器中各自擁有一個(gè)rild(radio interface layer daemon,無(wú)線接口層守護(hù)進(jìn)程)來(lái)操作串口實(shí)現(xiàn)電話功能。
然而,在容器隔離比較徹底的情況下,現(xiàn)有的移動(dòng)終端往往需要對(duì)每個(gè)容器中各自擁有的rild進(jìn)行管理,才能有效保障各個(gè)容器的電話通訊功能;而采用這種分散管理的方式,導(dǎo)致移動(dòng)終端的容器管理效率較低。因此,有必要提供一種在容器隔離比較徹底的情況下,能夠?qū)崿F(xiàn)容器電話通訊功能且便于統(tǒng)一管理的移動(dòng)終端,提高移動(dòng)終端的容器管理效率。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供了一種移動(dòng)終端、容器電話通信功能實(shí)現(xiàn)方法,用以保障移動(dòng)終端中各容器的正常電話通訊功能的同時(shí),實(shí)現(xiàn)容器電話通訊功能的統(tǒng)一管理,提高智能終端的容器管理效率。
本發(fā)明方案提供了一種容器電話通訊功能實(shí)現(xiàn)方法,包括:
創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符;
以其中一個(gè)文件描述符所指向的套接字接口作為移動(dòng)終端中獨(dú)立于各容器的無(wú)線接口層守護(hù)進(jìn)程rild進(jìn)程的套接字socket訪問(wèn)接口;
根據(jù)另一個(gè)文件描述符將其所指向的套接字接口共享給移動(dòng)終端中的各容器,使所述容器的進(jìn)程通過(guò)該套接字接口連接所述訪問(wèn)接口與所述rild進(jìn)程進(jìn)行socket通信,并通過(guò)所述rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
優(yōu)選地,所述根據(jù)另一個(gè)文件描述符將其所指向的套接字接口共享給移動(dòng)終端中的各容器,具體包括:
獲取該文件描述符所指向的套接字接口的文件file結(jié)構(gòu)體;
為該文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在所述服務(wù)通道中記錄該文件描述符、以及獲取的file結(jié)構(gòu)體;
接收到移動(dòng)終端中的容器針對(duì)所述服務(wù)通道的讀取請(qǐng)求后,獲取所述容器當(dāng)前的共享文件描述符;
將所述共享文件描述符與所述服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián);
將與該文件描述符指向同一套接字接口的共享文件描述符返回給所述容器;
其中,所述共享文件描述符為所述容器當(dāng)前進(jìn)程未使用的文件描述符。
優(yōu)選地,為該文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道后,還包括:
將該文件描述符對(duì)應(yīng)的服務(wù)通道進(jìn)行廣播,使移動(dòng)終端中的容器根據(jù)廣播獲取所述服務(wù)通道的標(biāo)示名稱(chēng),并以所述標(biāo)示名稱(chēng)發(fā)起針對(duì)所述服務(wù)通道的讀取請(qǐng)求。
優(yōu)選地,所述將所述共享文件描述符與所述服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián)之前,還包括:
對(duì)所述容器進(jìn)行校驗(yàn);其中,所述校驗(yàn)包括如下至少一項(xiàng):身份校驗(yàn)、權(quán)限校驗(yàn)。
根據(jù)本發(fā)明的另一方面,還提供了一種移動(dòng)終端,包括:
接口創(chuàng)建單元,用于創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符;
通道構(gòu)建單元,用于以所述接口創(chuàng)建單元獲取的兩個(gè)文件描述符中的一個(gè)文件描述符作為無(wú)線接口層守護(hù)進(jìn)程rild進(jìn)程的socket訪問(wèn)接口;
通道共享單元,用于根據(jù)所述接口創(chuàng)建單元獲取的另一個(gè)文件描述符,將其所指向的套接字接口共享給移動(dòng)終端中的各容器,使所述容器的進(jìn)程通過(guò)該套接字接口連接所述訪問(wèn)接口與所述rild進(jìn)程進(jìn)行socket通信,并通過(guò)所述rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
優(yōu)選地,所述通道共享單元具體包括:
第一獲取子單元,用于獲取文件描述符所指向的套接字接口的文件file結(jié)構(gòu)體;
通道注冊(cè)子單元,用于為文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在所述服務(wù)通道中記錄文件描述符、以及所述第一獲取子單元獲取的file結(jié)構(gòu)體;
第二獲取子單元,用于在接收到移動(dòng)終端中的容器針對(duì)所述服務(wù)通道的讀取請(qǐng)求后,獲取所述容器當(dāng)前的共享文件描述符;其中,所述共享文件描述符為所述容器當(dāng)前進(jìn)程未使用的文件描述符;
關(guān)聯(lián)共享子單元,用于將所述共享文件描述符與所述服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián);并將與該文件描述符指向同一套接字接口的共享文件描述符返回給所述容器。
優(yōu)選地,所述通道注冊(cè)子單元還用于將文件描述符對(duì)應(yīng)的服務(wù)通道進(jìn)行廣播,使移動(dòng)終端中的容器根據(jù)廣播獲取服務(wù)通道的標(biāo)示名稱(chēng),并以所述標(biāo)示名稱(chēng)發(fā)起針對(duì)所述服務(wù)通道的讀取請(qǐng)求。
優(yōu)選地,所述通道共享單元還包括:
容器校驗(yàn)子單元,用于在接收到移動(dòng)終端中的容器針對(duì)所述服務(wù)通道的讀取請(qǐng)求后,對(duì)所述容器進(jìn)行校驗(yàn);
其中,所述校驗(yàn)包括如下至少一項(xiàng):身份校驗(yàn)、權(quán)限校驗(yàn)。
根據(jù)本發(fā)明的另一方面,還提供了一種跨容器通信方法,包括:
接收第一容器發(fā)送的通信請(qǐng)求,從中解析出預(yù)通信的第二容器;
創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符;
將兩個(gè)文件描述符各自指向的套接字接口分別傳遞給所述第一容器和第二容器,使所述第一容器與所述第二容器通過(guò)傳遞的套接字接口進(jìn)行通信。
優(yōu)選地,通過(guò)如下方式將文件描述符指向的套接字接口進(jìn)行傳遞:
獲取所述文件描述符所指向的套接字接口的文件file結(jié)構(gòu)體;
為所述文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在所述服務(wù)通道中記錄所述文件描述符、以及獲取的file結(jié)構(gòu)體;
接收到移動(dòng)終端中的容器針對(duì)所述服務(wù)通道的讀取請(qǐng)求后,獲取所述容器當(dāng)前進(jìn)程未使用的文件描述符;
將獲取的文件描述符與所述服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián);
將與所述服務(wù)通道中記錄的文件描述符指向同一套接字接口的文件描述符返回給容器。
本發(fā)明的技術(shù)方案中,在容器隔離比較徹底的情況下,預(yù)先在移動(dòng)終端中設(shè)置獨(dú)立于各個(gè)容器的rild進(jìn)程;并創(chuàng)建一對(duì)相互連接的套接字接口,以其中一個(gè)套接字接口作為rild進(jìn)程的socket通道;同時(shí),將另一個(gè)套接字接口通過(guò)文件描述符共享給移動(dòng)終端中的各個(gè)容器。這樣,各個(gè)容器可以通過(guò)共享得到的另一個(gè)套接字接口連接至獨(dú)立設(shè)置的rild進(jìn)程,與rild進(jìn)程進(jìn)行socket通信,從而通過(guò)rild進(jìn)程來(lái)操作串口實(shí)現(xiàn)電話通訊功能。
相比現(xiàn)有需要為各個(gè)容器設(shè)置各自對(duì)應(yīng)的rild進(jìn)程,并為每個(gè)容器中的rild進(jìn)程進(jìn)行分散管理,本發(fā)明的方案簡(jiǎn)化了移動(dòng)終端結(jié)構(gòu),且可通過(guò)獨(dú)立設(shè)置的rild進(jìn)程實(shí)現(xiàn)容器電話通訊功能的統(tǒng)一管理,在保障移動(dòng)終端中各容器的正常電話通訊功能的同時(shí),提高了智能終端的容器管理效率。
進(jìn)一步地,本發(fā)明的方案中,在容器隔離比較徹底的情況下,可以根據(jù)移動(dòng)終端中的容器發(fā)出的通信請(qǐng)求,創(chuàng)建一對(duì)相互連接的套接字接口;并根據(jù)文件描述符,將套接字接口傳遞給其它容器。這樣,其它容器可以通過(guò)傳遞的套接字接口,連接到與之相連的套接字接口,繼而,連接到發(fā)出通信請(qǐng)求的容器,從而實(shí)現(xiàn)容器之間的通信。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
附圖說(shuō)明
圖1a、1b為本發(fā)明實(shí)施例一提供的容器電話通訊功能實(shí)現(xiàn)方法的流程示意圖;
圖2為本發(fā)明實(shí)施例二提供的傳遞套接字接口的方法的流程示意圖;
圖3為本發(fā)明實(shí)施例三提供的移動(dòng)終端的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例三提供的通道共享單元的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例四提供的跨容器通信方法的流程示意圖。
具體實(shí)施方式
以下將結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所得到的所有其它實(shí)施例,都屬于本發(fā)明所保護(hù)的范圍。
實(shí)際應(yīng)用中,移動(dòng)終端往往會(huì)對(duì)各容器的文件系統(tǒng)、命名空間進(jìn)行充分的隔離,以此保障移動(dòng)終端和容器的安全性。為了在容器隔離比較徹底的情況下實(shí)現(xiàn)容器電話通訊功能,現(xiàn)有移動(dòng)終端通常在各個(gè)容器中設(shè)置各自對(duì)應(yīng)的rild(radio interface layer daemon,無(wú)線接口層守護(hù)進(jìn)程)進(jìn)程,這樣容器中的進(jìn)程可以直接訪問(wèn)容器中的rild進(jìn)程,進(jìn)而通過(guò)容器中的rild進(jìn)程來(lái)操作串口實(shí)現(xiàn)電話通信功能。事實(shí)上,為了保障移動(dòng)終端中各容器的電話通訊功能,在容器隔離比較徹底的情況下,就需要對(duì)每個(gè)容器中的rild進(jìn)程進(jìn)行分別管理,而正是這種分散管理的方式,導(dǎo)致了移動(dòng)終端的容器管理效率低下。
因此,本發(fā)明的發(fā)明人考慮,在容器隔離比較徹底的情況下,可預(yù)先在移動(dòng)終端中設(shè)置獨(dú)立于各個(gè)容器的rild進(jìn)程,進(jìn)而讓移動(dòng)終端中的容器均通過(guò)該rild進(jìn)程來(lái)操作串口實(shí)現(xiàn)電話通訊功能,實(shí)現(xiàn)容器電話通信功能的統(tǒng)一管理。
具體地,可以創(chuàng)建一對(duì)相互連接的套接字接口,以其中一個(gè)套接字接口作為rild進(jìn)程的socket通道;同時(shí),將另一個(gè)套接字接口通過(guò)文件描述符共享給移動(dòng)終端中的各個(gè)容器。這樣,各個(gè)容器可以通過(guò)共享得到的另一個(gè)套接字接口分別連接至獨(dú)立設(shè)置的rild進(jìn)程,與rild進(jìn)程進(jìn)行socket通信,從而通過(guò)rild進(jìn)程來(lái)操作串口實(shí)現(xiàn)電話通訊功能。相比現(xiàn)有需要為各個(gè)容器設(shè)置各自對(duì)應(yīng)的rild進(jìn)程,并為每個(gè)容器中的rild進(jìn)程進(jìn)行分散管理,本發(fā)明的方案可通過(guò)預(yù)設(shè)的rild進(jìn)程的統(tǒng)一管理,實(shí)現(xiàn)對(duì)容器的電話通訊功能的統(tǒng)一管理,操作簡(jiǎn)單方便,在保障移動(dòng)終端中各容器的正常電話通訊功能的同時(shí),可大大提高移動(dòng)終端的容器管理效率。
下面結(jié)合附圖詳細(xì)說(shuō)明本發(fā)明的技術(shù)方案。
實(shí)際應(yīng)用中,利用Linux內(nèi)核的命名空間(namespace)特性,可以形成多個(gè)容器,以此對(duì)用戶空間和資源進(jìn)行隔離。移動(dòng)終端中的容器可以是基于linux系統(tǒng)而演變的系統(tǒng),比如,Android(安卓)系統(tǒng)等。
需注意的是,本發(fā)明的方案中,移動(dòng)終端中的容器不再具有各自的rild(radio interface layer daemon,無(wú)線接口層守護(hù))進(jìn)程。為了實(shí)現(xiàn)容器中電話相關(guān)應(yīng)用Call App的電話通訊功能,本發(fā)明方案中,移動(dòng)終端的內(nèi)核可以預(yù)先啟動(dòng)一個(gè)簡(jiǎn)化、安全的容器管理系統(tǒng)。其中,啟動(dòng)的容器管理系統(tǒng)用于啟動(dòng)容器內(nèi)系統(tǒng),并對(duì)容器進(jìn)行管理。
本發(fā)明方案中,可以在容器管理系統(tǒng)中設(shè)置獨(dú)立于移動(dòng)終端中各容器的rild進(jìn)程。這樣,運(yùn)行在容器中的應(yīng)用處理器上的電話相關(guān)應(yīng)用可以首先完成與容器管理系統(tǒng)中設(shè)置的rild之間的通信,進(jìn)而通過(guò)rild與modem進(jìn)行通信,實(shí)現(xiàn)電話通訊功能。
具體地,如圖1a所示,容器電話通訊功能實(shí)現(xiàn)方法可以包括如下步驟:
S100:創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符。
S200:以其中一個(gè)文件描述符所指向的套接字接口作為移動(dòng)終端中獨(dú)立于各容器的rild進(jìn)程的訪問(wèn)接口。
S300:根據(jù)另一個(gè)文件描述符將其所指向的套接字接口共享給移動(dòng)終端中的各容器,使容器的進(jìn)程通過(guò)該套接字接口連接訪問(wèn)接口與rild進(jìn)程進(jìn)行socket通信,并通過(guò)rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
下面將通過(guò)實(shí)施例一、實(shí)施例二來(lái)詳細(xì)說(shuō)明容器電話通訊功能實(shí)現(xiàn)方法。
實(shí)施例一
本發(fā)明實(shí)施例一提供了一種容器電話通訊功能實(shí)現(xiàn)方法,如圖1b所示,其具體流程包括如下步驟:
S101:創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的第一文件描述符和第二文件描述符。
本發(fā)明實(shí)施例中,移動(dòng)終端可以使用Linux的socketpair函數(shù)來(lái)創(chuàng)造一對(duì)未命名的、相互連接的套接字接口:第一套接字接口、第二套接字接口;獲取分別指向創(chuàng)建的兩個(gè)套接字接口的兩個(gè)fd(file descriptor,文件描述符):第一文件描述符fd1、第二文件描述符fd2。
其中,fd1為創(chuàng)建第一套接字接口時(shí)內(nèi)核(kernel)返回的文件描述符;fd2為創(chuàng)建第二套接字接口時(shí)內(nèi)核返回的文件描述符。利用fd1可以訪問(wèn)第一套接字接口,利用fd2可以訪問(wèn)第二套接字接口。
實(shí)際應(yīng)用中,由于第一套接字接口與第二套接字接口為相互連接的兩個(gè)套接字接口。因此,利用fd2也可以間接訪問(wèn)第一套接字接口;同樣地,利用fd1也可以間接訪問(wèn)第二套接字接口。
S102:以第一文件描述符fd1所指向的套接字接口作為移動(dòng)終端中獨(dú)立于各容器的rild進(jìn)程的socket訪問(wèn)接口。
本發(fā)明方案中,通過(guò)內(nèi)核將rild設(shè)置于獨(dú)立于各容器的容器管理系統(tǒng)。為了便于移動(dòng)終端中的容器通過(guò)rild來(lái)操作串口實(shí)現(xiàn)電話通訊功能,可以首先為rild進(jìn)程與容器之間設(shè)置通道。
具體地,可以從步驟S101創(chuàng)建的兩個(gè)套接字接口中,選擇其中一個(gè)套接字接口作為rild進(jìn)程的socket訪問(wèn)接口,并讓另一個(gè)套接字接口成為移動(dòng)終端中容器訪問(wèn)rild進(jìn)程的間接接口以形成socket通道。這樣,移動(dòng)終端中的容器可以通過(guò)socket通道完成與rild進(jìn)程之間的socket通信。
本步驟中,可以選擇第一文件描述符fd1所指向的套接字接口作為rild進(jìn)程的socket訪問(wèn)接口,之后執(zhí)行步驟S103。
S103:根據(jù)第二文件描述符fd2將其所指向的套接字接口共享給移動(dòng)終端中的各容器。
本步驟中,為了使移動(dòng)終端中各個(gè)容器的進(jìn)程與rild進(jìn)程完成socket通信,需要在容器端也設(shè)置與rild進(jìn)程對(duì)應(yīng)的接口以形成socket通道。
由于步驟S101創(chuàng)建的第一套接字接口與第二套接字接口相互連接,因此,在步驟S102將第一套接字接口作為rild進(jìn)程的socket訪問(wèn)接口的情況下,可以將第二套接字接口作為容器的訪問(wèn)rild進(jìn)程的間接接口以形成socket通道。這樣,容器的進(jìn)程通過(guò)第二套接字接口連接作為訪問(wèn)接口的第一套接字接口與rild進(jìn)程進(jìn)行socket通信,并通過(guò)rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
具體地,可以根據(jù)第二文件描述符fd2將其所指向的套接字接口共享給移動(dòng)終端中的各容器。由于第一套接字接口與第二套接字接口為相互連接的兩個(gè)套接字接口。因此,共享第二套接字接口的容器,可以通過(guò)第二套接字接口連接到第一套接字接口,繼而通過(guò)第一套接字接口與rild進(jìn)程進(jìn)行socket通信,并通過(guò)rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
考慮到,第一文件描述符fd1與第二文件描述符fd2所各自指向的套接字接口相互連接。因此,本發(fā)明的方案中,第一文件描述符fd1與第二文件描述符fd2可互換應(yīng)用。例如,選擇第二文件描述符fd2所指向的套接字接口作為rild進(jìn)程的socket訪問(wèn)接口;相應(yīng)地,選擇第一文件描述符fd1所指向的套接字接口作為共享文件;并根據(jù)第一文件描述符fd1,將第一文件描述符fd1指向的第一套接字接口共享給移動(dòng)終端中的各個(gè)容器。
這樣,移動(dòng)終端中容器的進(jìn)程可以通過(guò)第一文件描述符fd1訪問(wèn)到第一套接字接口;通過(guò)第一套接字接口連接到第二套接字接口,繼而通過(guò)第二套接字接口與rild進(jìn)程進(jìn)行socket通信,并通過(guò)rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
關(guān)于如何將套接字接口共享給移動(dòng)終端中的容器,將在后續(xù)的實(shí)施例二中詳細(xì)介紹。
相比現(xiàn)有需要為各個(gè)容器設(shè)置各自對(duì)應(yīng)的rild進(jìn)程,并為每個(gè)容器中的rild進(jìn)程進(jìn)行分散管理;而本發(fā)明的方案中,可通過(guò)rild進(jìn)程的統(tǒng)一管理,實(shí)現(xiàn)對(duì)容器的電話通訊功能的統(tǒng)一管理,操作簡(jiǎn)單方便;在保障移動(dòng)終端中各容器的正常電話通訊功能的同時(shí),可大大提高移動(dòng)終端的容器管理效率;而且,不會(huì)打破移動(dòng)終端中容器間的獨(dú)立性,保障移動(dòng)終端中安全系統(tǒng)的充分隔離。
實(shí)施例二
如圖2所示,可以通過(guò)如下步驟將文件描述符所指向的套接字接口進(jìn)行傳遞,共享給移動(dòng)終端中的容器:
S201:獲取文件描述符所指向的套接字接口的file結(jié)構(gòu)體。
本發(fā)明的方案中,套接字接口的共享實(shí)際上是一種文件的共享。在容器隔離比較徹底的情況下,可以在移動(dòng)終端中設(shè)置一個(gè)設(shè)備驅(qū)動(dòng),以此設(shè)備節(jié)點(diǎn),通過(guò)文件描述符的共享來(lái)實(shí)現(xiàn)系統(tǒng)間共享文件的需求。
考慮到,實(shí)際應(yīng)用中,在文件創(chuàng)建時(shí)內(nèi)核設(shè)置有描述該文件的file(文件)結(jié)構(gòu)體;而文件的共享可以通過(guò)file(文件)結(jié)構(gòu)體的共享來(lái)實(shí)現(xiàn)。因此,本發(fā)明實(shí)施例中,可以向驅(qū)動(dòng)傳遞待共享文件的文件描述符,驅(qū)動(dòng)利用內(nèi)核提供的fget函數(shù),通過(guò)文件描述符獲取內(nèi)核描述待共享文件的file結(jié)構(gòu)體。
本發(fā)明方案中,可以將第二文件描述符fd2所指向的套接字接口作為待共享的文件。因此,可以將第二文件描述符fd2向驅(qū)動(dòng)傳遞;驅(qū)動(dòng)獲得上述信息之后,利用fget函數(shù)獲取第二文件描述符fd2所指向的套接字接口的file結(jié)構(gòu)體。
S202:為文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在服務(wù)通道中記錄文件描述符、以及獲取的file結(jié)構(gòu)體。
本步驟中,移動(dòng)終端中預(yù)設(shè)的驅(qū)動(dòng)可以為待共享文件的文件描述符注冊(cè)一個(gè)對(duì)應(yīng)的服務(wù)通道;在注冊(cè)的服務(wù)通道中記錄文件描述符、以及獲取的file結(jié)構(gòu)體。
比如,在以第二文件描述符fd2所指向的套接字接口為待共享的文件的情形下,移動(dòng)終端中的預(yù)設(shè)的驅(qū)動(dòng)可以為第二文件描述符fd2注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在注冊(cè)的服務(wù)通道中記錄fd2、以及通過(guò)步驟S201獲取的fd2所指向的套接字接口file結(jié)構(gòu)體。
實(shí)際應(yīng)用中,在向驅(qū)動(dòng)傳遞待共享文件的文件描述符時(shí),還可以傳遞預(yù)先設(shè)置的標(biāo)示名稱(chēng);驅(qū)動(dòng)在為該文件描述符注冊(cè)服務(wù)通道后,以該標(biāo)示名稱(chēng)為索引。這樣,后續(xù)通過(guò)標(biāo)示名稱(chēng)即可找到對(duì)應(yīng)的服務(wù)通道,繼而查找到服務(wù)通道中記錄的待共享文件的file結(jié)構(gòu)體。
因此,本發(fā)明方案中,在為fd2注冊(cè)對(duì)應(yīng)的服務(wù)通道后,可以將fd2對(duì)應(yīng)的服務(wù)通道進(jìn)行廣播,使移動(dòng)終端中的容器根據(jù)廣播獲取服務(wù)通道的標(biāo)示名稱(chēng);并以獲取的標(biāo)示名稱(chēng)發(fā)起針對(duì)服務(wù)通道的讀取請(qǐng)求。
實(shí)際應(yīng)用中,驅(qū)動(dòng)將fd2對(duì)應(yīng)的服務(wù)通道進(jìn)行廣播,可以使得移動(dòng)終端中的容器了解到fd2所指向的文件(即可連接至rild進(jìn)程的第二套接字接口)已提供了共享接口。這樣,移動(dòng)終端中存在與rild進(jìn)程進(jìn)行socket通信的需求的容器,就可以根據(jù)廣播的內(nèi)容獲取標(biāo)示名稱(chēng),比如,rild0;通過(guò)標(biāo)示名稱(chēng)向驅(qū)動(dòng)發(fā)起服務(wù)通道的讀取請(qǐng)求。
S203:接收到移動(dòng)終端中的容器針對(duì)服務(wù)通道的讀取請(qǐng)求后,獲取容器當(dāng)前的共享文件描述符。
其中,容器當(dāng)前的共享文件描述符指的是容器當(dāng)前進(jìn)程未使用的文件描述符。
本發(fā)明方案中,移動(dòng)終端中存在與rild進(jìn)程進(jìn)行通信的需求的容器,在接收到針對(duì)rild進(jìn)程的服務(wù)通道的廣播之后,可以從廣播中獲取服務(wù)通道的標(biāo)示名稱(chēng),并向驅(qū)動(dòng)發(fā)送針對(duì)該服務(wù)通道的讀取請(qǐng)求。其中,讀取請(qǐng)求中包括服務(wù)通道的標(biāo)示名稱(chēng)。
移動(dòng)終端中預(yù)設(shè)的驅(qū)動(dòng)接收到讀取請(qǐng)求后,根據(jù)讀取請(qǐng)求中的標(biāo)示名稱(chēng),查找到對(duì)應(yīng)的服務(wù)通道,并讀取服務(wù)通道中記錄的信息,包括:文件描述符、文件描述符所指向的待共享文件的file結(jié)構(gòu)體。
實(shí)際應(yīng)用中,文件描述符是一個(gè)非負(fù)整數(shù),每一個(gè)文件描述符會(huì)與一個(gè)打開(kāi)文件相對(duì)應(yīng);而相同的文件可能被不同的進(jìn)程打開(kāi)。針對(duì)同一文件,由不同的進(jìn)程打開(kāi)所得到的文件描述符可能并不相同。
因此,本發(fā)明實(shí)施例中,在驅(qū)動(dòng)接收到容器發(fā)送的服務(wù)通道的讀取請(qǐng)求之后,可以獲取該容器當(dāng)前進(jìn)程未使用的文件描述符,以便后續(xù)指向待共享文件。比如,接收到移動(dòng)終端中的容器針對(duì)fd2對(duì)應(yīng)的服務(wù)通道的讀取請(qǐng)求后,獲取容器當(dāng)前進(jìn)程未使用的共享文件描述符fd3。
關(guān)于容器當(dāng)前進(jìn)程未使用的文件描述符的獲取可以采用本領(lǐng)域技術(shù)人員常用技術(shù)手段,在此不再詳述。
S204:將獲取的共享文件描述符與服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián)。
本發(fā)明方案中,通過(guò)步驟S203獲取移動(dòng)終端中容器當(dāng)前進(jìn)程未使用的文件描述符之后,為了使容器當(dāng)前進(jìn)程未使用的文件描述符指向待共享文件,可以將獲取的文件描述符與服務(wù)通道中記錄的描述待共享文件的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián)。比如,在獲取容器當(dāng)前進(jìn)程的共享文件描述符fd3之后,可以將共享文件描述符fd3與fd2對(duì)應(yīng)的服務(wù)通道中記錄的第二套接字接口的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián),使得共享文件描述符fd3與fd2指向同一文件,即第二套接字接口。關(guān)于文件描述符與file結(jié)構(gòu)體的關(guān)聯(lián),可以采用本領(lǐng)域技術(shù)常用技術(shù)手段,在此不再詳述。
本發(fā)明方案中,在將共享文件描述符與服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián)之前,還可以對(duì)發(fā)送針對(duì)服務(wù)通道的讀取請(qǐng)求的容器進(jìn)行校驗(yàn),以保障移動(dòng)終端的安全通信。其中,校驗(yàn)包括如下至少一項(xiàng):身份校驗(yàn)、權(quán)限校驗(yàn)。
實(shí)際應(yīng)用中,文件描述符對(duì)應(yīng)的服務(wù)通道中除了可以記錄文件描述符、文件描述符所指向的待共享文件的file結(jié)構(gòu)體之外,還可以記錄文件權(quán)限、運(yùn)行訪問(wèn)的用戶UID(User Identification,用戶身份證明)、允許最大訪問(wèn)數(shù)量等信息。這樣,在接收到移動(dòng)終端中的容器針對(duì)服務(wù)通道的讀取請(qǐng)求,并查找到對(duì)應(yīng)的服務(wù)通道后,可以從查找到的服務(wù)通道中讀取上述信息,并根據(jù)上述信息對(duì)該容器進(jìn)行校驗(yàn)。關(guān)于容器的校驗(yàn)可以采用本領(lǐng)域技術(shù)人員常用技術(shù)手段,在此不再詳述。
S205:將與服務(wù)通道中記錄的文件描述符指向同一套接字接口的共享文件描述符返回給容器。
本實(shí)施例中,將與服務(wù)通道中記錄的文件描述符fd2指向同一套接字接口的共享文件描述符fd3返回給容器,可以使容器進(jìn)程后續(xù)根據(jù)共享文件描述符fd3打開(kāi)第二套接字接口,通過(guò)第二套接字接口連接到第一套接字接口,進(jìn)而連接至rild進(jìn)程,完成與rild進(jìn)程的socket通信,并實(shí)現(xiàn)該容器的電話通訊功能。
實(shí)施例三
基于實(shí)施例一提供的移動(dòng)終端中容器電話通訊功能實(shí)現(xiàn)方法,本發(fā)明實(shí)施例三提供了一種移動(dòng)終端,如圖3所示,該移動(dòng)終端可以包括:接口創(chuàng)建單元301、通道構(gòu)建單元302、通道共享單元303。
其中,接口創(chuàng)建單元301用于創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符。
通道構(gòu)建單元302用于以接口創(chuàng)建單元301獲取的兩個(gè)文件描述符中的一個(gè)文件描述符作為rild進(jìn)程的socket訪問(wèn)接口。
通道共享單元303用于根據(jù)接口創(chuàng)建單元301獲取的另一個(gè)文件描述符,將其所指向的套接字接口共享給移動(dòng)終端中的各容器,使容器的進(jìn)程通過(guò)該套接字接口連接訪問(wèn)接口與rild進(jìn)程進(jìn)行socket通信,并通過(guò)rild進(jìn)程操作串口實(shí)現(xiàn)電話通訊功能。
如圖4所示,通道共享單元可以包括:第一獲取子單元401、通道注冊(cè)子單元402、第二獲取子單元403、關(guān)聯(lián)共享子單元404。
其中,第一獲取子單元401用于獲取文件描述符所指向的套接字接口的文件file結(jié)構(gòu)體。
通道注冊(cè)子單元402用于為文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在服務(wù)通道中記錄文件描述符、以及第一獲取子單元獲取的file結(jié)構(gòu)體。
第二獲取子單元403用于在接收到移動(dòng)終端中的容器針對(duì)服務(wù)通道的讀取請(qǐng)求后,獲取容器當(dāng)前進(jìn)程的共享文件描述符。其中,共享文件描述符為容器當(dāng)前進(jìn)程未使用的文件描述符。
關(guān)聯(lián)共享子單元404用于將共享文件描述符與服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián);并將與第二文件描述符指向同一套接字接口的共享文件描述符返回給容器。
更優(yōu)地,通道注冊(cè)子單元402還用于將文件描述符對(duì)應(yīng)的服務(wù)通道進(jìn)行廣播,使移動(dòng)終端中的容器根據(jù)廣播獲取服務(wù)通道的標(biāo)示名稱(chēng),并以標(biāo)示名稱(chēng)發(fā)起針對(duì)服務(wù)通道的讀取請(qǐng)求。
更優(yōu)地,通道共享單元303還可以包括:用于在接收到移動(dòng)終端中的容器針對(duì)服務(wù)通道的讀取請(qǐng)求后,對(duì)容器進(jìn)行校驗(yàn)的容器校驗(yàn)子單元。其中,校驗(yàn)包括如下至少一項(xiàng):身份校驗(yàn)、權(quán)限校驗(yàn)。
本實(shí)施例中,移動(dòng)終端中各個(gè)單元的具體功能實(shí)現(xiàn)可以參考實(shí)施例一提供的移動(dòng)終端中容器電話通訊功能實(shí)現(xiàn)方法中的各步驟的具體實(shí)現(xiàn);且通道共享單元中各子單元的具體功能實(shí)現(xiàn)可以參考實(shí)施例二提供的共享方法中各步驟的具體實(shí)現(xiàn),在此不再贅述。
實(shí)施例四
考慮到在容器隔離比較徹底的情況下,移動(dòng)終端中容器之間可能出現(xiàn)無(wú)法通信的弊端,針對(duì)此弊端,本發(fā)明實(shí)施例四還提供了一種跨容器通信方法,如圖5所示,具體包括如下步驟:
S501:接收第一容器發(fā)送的通信請(qǐng)求,從中解析出預(yù)通信的第二容器。
具體地,移動(dòng)終端的內(nèi)核啟動(dòng)的容器管理系統(tǒng)可以接收第一容器發(fā)送的通信請(qǐng)求,從中解析出第一容器預(yù)與之通信的第二容器。
本發(fā)明的方案中,移動(dòng)終端中的容器與容器管理系統(tǒng)之間預(yù)先設(shè)有通信通道,因此,第一容器可以直接將通信請(qǐng)求發(fā)送給容器管理系統(tǒng)。
S502:創(chuàng)建一對(duì)相互連接的套接字接口,獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符。
容器管理系統(tǒng)為了能在第一容器與第二容器之間構(gòu)建socket通道,可以預(yù)先創(chuàng)建一對(duì)相互連接的套接字接口:第一套接字接口、第二套接字接口;并獲取分別指向兩個(gè)套接字接口的兩個(gè)文件描述符:第一文件描述符、第二文件描述符。
S503:將兩個(gè)文件描述符各自指向的套接字接口分別傳遞給第一容器和第二容器,使第一容器與第二容器通過(guò)傳遞的套接字接口進(jìn)行通信。
比如,可以將第一文件描述符指向的第一套接字接口傳遞給第一容器;將將第二文件描述符指向的第二套接字接口傳遞給第二容器。由于第一套接字接口與第二套接字接口相互連接,因此,第一容器可以通過(guò)第一套接字接口,連接到第二套接字接口,進(jìn)而連接到第二容器。
本發(fā)明方案中,通過(guò)如下方式將文件描述符指向的套接字接口進(jìn)行傳遞:
獲取文件描述符所指向的套接字接口的文件file結(jié)構(gòu)體;為文件描述符注冊(cè)對(duì)應(yīng)的服務(wù)通道,并在服務(wù)通道中記錄文件描述符、以及獲取的file結(jié)構(gòu)體;接收到移動(dòng)終端中的容器針對(duì)服務(wù)通道的讀取請(qǐng)求后,獲取容器當(dāng)前進(jìn)程未使用的文件描述符;將獲取的文件描述符與服務(wù)通道中記錄的file結(jié)構(gòu)體進(jìn)行關(guān)聯(lián);將與服務(wù)通道中記錄的文件描述符指向同一套接字接口的文件描述符返回給容器。
實(shí)施例四中步驟S502、步驟S503的具體實(shí)現(xiàn),可以參考實(shí)施例一和實(shí)施例二中相關(guān)步驟,在此不再贅述。
本發(fā)明實(shí)施例四中,在容器隔離比較徹底的情況下,可以根據(jù)移動(dòng)終端中的容器發(fā)出的通信請(qǐng)求,創(chuàng)建一對(duì)相互連接的套接字接口;并根據(jù)文件描述符,將套接字接口傳遞給其它容器。這樣,其它容器可以通過(guò)傳遞的套接字接口,連接到與之相連的套接字接口,繼而,連接到發(fā)出通信請(qǐng)求的容器,從而實(shí)現(xiàn)容器之間的通信。
本發(fā)明的方案,在容器隔離比較徹底的情況下,預(yù)先在移動(dòng)終端中設(shè)置獨(dú)立于各個(gè)容器的rild進(jìn)程;并創(chuàng)建一對(duì)相互連接的套接字接口,以其中一個(gè)套接字接口作為rild進(jìn)程的socket通道;同時(shí),將另一個(gè)套接字接口通過(guò)文件描述符共享給移動(dòng)終端中的各個(gè)容器。這樣,各個(gè)容器可以通過(guò)共享得到的另一個(gè)套接字接口連接至獨(dú)立設(shè)置的rild進(jìn)程,與rild進(jìn)程進(jìn)行socket通信,從而通過(guò)rild進(jìn)程來(lái)操作串口實(shí)現(xiàn)電話控制。
相比現(xiàn)有需要為各個(gè)容器設(shè)置各自對(duì)應(yīng)的rild進(jìn)程,并為每個(gè)容器中的rild進(jìn)程進(jìn)行分散管理,本發(fā)明的方案,無(wú)需針對(duì)每個(gè)容器設(shè)置對(duì)應(yīng)的rild進(jìn)程,簡(jiǎn)化了移動(dòng)終端結(jié)構(gòu);而且,在移動(dòng)終端中預(yù)先設(shè)置獨(dú)立于各個(gè)容器的rild進(jìn)程,并不會(huì)打破移動(dòng)終端中容器間的獨(dú)立性,保障了移動(dòng)終端中安全系統(tǒng)的充分隔離。
進(jìn)一步地,本發(fā)明的方案中,在容器隔離比較徹底的情況下,可以根據(jù)移動(dòng)終端中的容器發(fā)出的通信請(qǐng)求,創(chuàng)建一對(duì)相互連接的套接字接口;并根據(jù)文件描述符,將套接字接口傳遞給其它容器。這樣,其它容器可以通過(guò)傳遞的套接字接口,連接到與之相連的套接字接口,繼而,連接到發(fā)出通信請(qǐng)求的容器,從而實(shí)現(xiàn)容器之間的通信,解決了現(xiàn)有在容器隔離比較徹底的情況下容器間無(wú)法通信的缺陷。
本申請(qǐng)使用的“模塊”、“系統(tǒng)”等術(shù)語(yǔ)旨在包括與計(jì)算機(jī)相關(guān)的實(shí)體,例如但不限于硬件、固件、軟硬件組合、軟件或者執(zhí)行中的軟件。例如,模塊可以是,但并不僅限于:處理器上運(yùn)行的進(jìn)程、處理器、對(duì)象、可執(zhí)行程序、執(zhí)行的線程、程序和/或計(jì)算機(jī)。舉例來(lái)說(shuō),計(jì)算設(shè)備上運(yùn)行的應(yīng)用程序和此計(jì)算設(shè)備都可以是模塊。一個(gè)或多個(gè)模塊可以位于執(zhí)行中的一個(gè)進(jìn)程和/或線程內(nèi),一個(gè)模塊也可以位于一臺(tái)計(jì)算機(jī)上和/或分布于兩臺(tái)或更多臺(tái)計(jì)算機(jī)之間。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請(qǐng)中所述操作中的一項(xiàng)或多項(xiàng)的設(shè)備。這些設(shè)備可以為所需的目的而專(zhuān)門(mén)設(shè)計(jì)和制造,或者也可以包括通用計(jì)算機(jī)中的已知設(shè)備。這些設(shè)備具有存儲(chǔ)在其內(nèi)的計(jì)算機(jī)程序,這些計(jì)算機(jī)程序選擇性地激活或重構(gòu)。這樣的計(jì)算機(jī)程序可以被存儲(chǔ)在設(shè)備(例如,計(jì)算機(jī))可讀介質(zhì)中或者存儲(chǔ)在適于存儲(chǔ)電子指令并分別耦聯(lián)到總線的任何類(lèi)型的介質(zhì)中,所述計(jì)算機(jī)可讀介質(zhì)包括但不限于任何類(lèi)型的盤(pán)(包括軟盤(pán)、硬盤(pán)、光盤(pán)、CD-ROM、和磁光盤(pán))、ROM(Read-Only Memory,只讀存儲(chǔ)器)、RAM(Random Access Memory,隨即存儲(chǔ)器)、EPROM(Erasable Programmable Read-Only Memory,可擦寫(xiě)可編程只讀存儲(chǔ)器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲(chǔ)器)、閃存、磁性卡片或光線卡片。也就是,可讀介質(zhì)包括由設(shè)備(例如,計(jì)算機(jī))以能夠讀的形式存儲(chǔ)或傳輸信息的任何介質(zhì)。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計(jì)算機(jī)程序指令來(lái)實(shí)現(xiàn)這些結(jié)構(gòu)圖和/或框圖和/或流圖中的每個(gè)框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以將這些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專(zhuān)業(yè)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理方法的處理器來(lái)實(shí)現(xiàn),從而通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理方法的處理器來(lái)執(zhí)行本發(fā)明公開(kāi)的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個(gè)框中指定的方案。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過(guò)的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進(jìn)一步地,具有本發(fā)明中已經(jīng)討論過(guò)的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進(jìn)一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開(kāi)的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。