本發(fā)明涉及金融技術(shù)領(lǐng)域,特別涉及一種Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)及方法。
背景技術(shù):
目前,絕大部分金融終端設(shè)備,如ATM機等,均遵循基于Windows操作系統(tǒng)的CEN/XFS(Comité Européen de Normalisation/eXtensions for Financial Services)規(guī)范,CEN/XFS規(guī)范為歐洲標準化委員會制定的金融服務(wù)擴展規(guī)范,與Windows系統(tǒng)密切相關(guān),具有較強的操作系統(tǒng)綁定特性,無法直接遷移至其他系統(tǒng),而Windows系統(tǒng)對銀行業(yè)務(wù)而言安全性較低。
隨著Linux系統(tǒng)逐漸應(yīng)用于越來越多的領(lǐng)域,現(xiàn)已出現(xiàn)了以Linux系統(tǒng)為基礎(chǔ)的XFS實現(xiàn)方法,但此類方法中采用C++回調(diào)類方式或Linux底層的進程間通信方式進行通信,前者易使系統(tǒng)之間造成不必要的耦合,如C++類的耦合,產(chǎn)生嚴重的可移植性與可擴展性問題,而后者則由于操作層次過低,會導(dǎo)致開發(fā)繁瑣,容易出錯的問題。
技術(shù)實現(xiàn)要素:
為此,本發(fā)明提供一種Linux系統(tǒng)下的XFS實現(xiàn)方案,以力圖解決或者至少緩解上面存在的問題。
根據(jù)本發(fā)明的一個方面,提供一種Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng),適于駐留在金融終端設(shè)備中,包括:AP層,適于向dbus守護進程注冊當前AP進程的dbus總線,通過API接口調(diào)用LFS管理器連接SP層,接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息,并釋放共享內(nèi)存;LFS管理器,提供API接口,適于根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP;SP層,提供SPI接口,適于訪問設(shè)備驅(qū)動層以獲取與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息,將該設(shè)備信息存入共享內(nèi)存,根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程;設(shè)備驅(qū)動層,適于向SP層提供與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,AP層進一步適于:向dbus守護進程獲取一個會話dbus;通過會話dbus注冊當前AP進程的dbus總線;設(shè)置當前AP進程的dbus總線的名稱。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,dbus守護進程適于:根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號;保存總線編號與dbus總線的名稱的映射關(guān)系,并創(chuàng)建相應(yīng)的unix套接字。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,AP層進一步適于:通過API接口啟動LFS管理器;調(diào)用LFS管理器動態(tài)載入并連接SP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,LFS管理器進一步適于:根據(jù)AP層的調(diào)用指令獲取與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名;根據(jù)SP編號,通過調(diào)用SPI接口在SP層定位與當前AP進程相關(guān)的SP,并向SP傳遞當前AP進程的dbus對象名。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,SP層進一步適于:向dbus守護進程獲取一個會話dbus;通過會話dbus創(chuàng)建一個dbus消息,設(shè)置與dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名,其中dbus總線名為當前AP進程的dbus總線的名稱,dbus對象名為當前AP進程的dbus對象名;根據(jù)dbus消息對應(yīng)的dbus總線名連接dbus守護進程,向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息并將其傳遞給dbus守護進程。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,dbus守護進程還適于:接收SP層傳遞的dbus消息,根據(jù)dbus消息對應(yīng)的dbus總線名定位當前AP進程,將dbus消息發(fā)送至AP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,dbus守護進程進一步適于:根據(jù)dbus消息對應(yīng)的dbus總線名查找其對應(yīng)的總線編號及相應(yīng)的unix套接字;將dbus消息發(fā)送至unix套接字中以發(fā)送至AP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)中,AP層進一步適于:接收unix套接字并對其解碼以獲取相應(yīng)的dbus消息;從dbus消息中獲取共享內(nèi)存中的設(shè)備信息指針;通過設(shè)備信息指針從共享內(nèi)存里獲取當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息。
根據(jù)本發(fā)明的又一個方面,提供一種Linux系統(tǒng)下的XFS實現(xiàn)方法,適于在金融終端設(shè)備中執(zhí)行,金融終端設(shè)備中駐留有Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng),系統(tǒng)包括AP層、LFS管理器、SP層和設(shè)備驅(qū)動層,方法包括:AP層向dbus守護進程注冊當前AP進程的dbus總線,通過API接口調(diào)用LFS管理器連接SP層;LFS管理器根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP;SP層訪問設(shè)備驅(qū)動層以獲取與SP對應(yīng)的設(shè)備信息,將該設(shè)備信息存入共享內(nèi)存;SP層根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程;AP層接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取SP對應(yīng)的設(shè)備信息,并釋放共享內(nèi)存。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,AP層向dbus守護進程注冊當前AP進程的dbus總線包括:AP層向dbus守護進程獲取一個會話dbus;通過會話dbus注冊當前AP進程的dbus總線;設(shè)置當前AP進程的dbus總線的名稱。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,還包括:dbus守護進程根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號;保存總線編號與dbus總線的名稱的映射關(guān)系,并創(chuàng)建相應(yīng)的unix套接字。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,AP層通過API接口調(diào)用LFS管理器連接SP層包括:AP層通過API接口啟動LFS管理器;AP層調(diào)用LFS管理器動態(tài)載入并連接SP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,LFS管理器根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP包括:LFS管理器根據(jù)AP層的調(diào)用指令獲取與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名;根據(jù)SP編號,通過調(diào)用SPI接口在SP層定位與當前AP進程相關(guān)的SP,并向其傳遞當前AP進程的dbus對象名。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,SP層根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程包括:SP層向dbus守護進程獲取一個會話dbus;通過會話dbus創(chuàng)建一個dbus消息,設(shè)置與dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名,其中dbus總線名為當前AP進程的dbus總線的名稱,dbus對象名為當前AP進程的dbus對象名;根據(jù)dbus消息對應(yīng)的dbus總線名連接dbus守護進程,向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息并將其傳遞給dbus守護進程。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,還包括:dbus守護進程接收SP層傳遞的dbus消息,根據(jù)dbus消息對應(yīng)的dbus總線名定位當前AP進程,將dbus消息發(fā)送至AP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,根據(jù)dbus消息對應(yīng)的dbus總線名定位當前AP進程,將dbus消息發(fā)送至AP層包括:根據(jù)dbus消息對應(yīng)的dbus總線名查找其對應(yīng)的總線編號及相應(yīng)的unix套接字;將dbus消息發(fā)送至unix套接字中以發(fā)送至AP層。
可選地,在根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)方法中,AP層接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取SP對應(yīng)的設(shè)備信息包括:AP層接收unix套接字并對其解碼以獲取相應(yīng)的dbus消息;從dbus消息中獲取共享內(nèi)存中的設(shè)備信息指針;通過設(shè)備信息指針從共享內(nèi)存里獲取SP對應(yīng)的設(shè)備信息。
根據(jù)本發(fā)明的Linux系統(tǒng)下的XFS實現(xiàn)的技術(shù)方案,AP層、LFS管理器、SP層之間的通信是基于dbus總線完成的。AP層首先注冊當前AP進程的dbus總線并調(diào)用LFS管理器連接SP層,SP層從驅(qū)動設(shè)備層獲取與當前AP進程對應(yīng)的SP的設(shè)備信息后,由此生成dbus消息傳遞至dbus守護進程,AP層接收dbus守護進程轉(zhuǎn)發(fā)的dbus消息并從中獲取該設(shè)備信息。上述技術(shù)方案中,通過dbus通信實現(xiàn)AP層、LFS管理器和SP層之間的消息傳遞,dbus消息本身可以提供豐富的類型信息,保證消息類型的正確性,并提供大容量的數(shù)據(jù)傳輸。此外,dbus通信機制還具有多種實現(xiàn)方式,同時具有較好的可擴展性和可管理性。
附圖說明
為了實現(xiàn)上述以及相關(guān)目的,本文結(jié)合下面的描述和附圖來描述某些說明性方面,這些方面指示了可以實踐本文所公開的原理的各種方式,并且所有方面及其等效方面旨在落入所要求保護的主題的范圍內(nèi)。通過結(jié)合附圖閱讀下面的詳細描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯。遍及本公開,相同的附圖標記通常指代相同的部件或元素。
圖1示出了根據(jù)本發(fā)明的一個實施例的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)100的示意圖;以及
圖2示出了根據(jù)本發(fā)明一個實施例的Linux系統(tǒng)下的XFS實現(xiàn)方法200的流程圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明的一個實施例的Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)100的示意圖。如圖1所示,該系統(tǒng)包括AP層110、LFS管理器120、SP層130和設(shè)備驅(qū)動層,其中AP層即為應(yīng)用程序?qū)?,AP為Application Program的英文縮寫,LFS管理器即為Linux系統(tǒng)下的金融服務(wù)管理器,LFS為Linux Financial Services的英文縮寫,SP層即為服務(wù)提供層,SP為Service Provider的英文縮寫。LFS管理器120向AP層提供API(Application Programming Interface)接口,SP層130向LFS管理器120提供SPI(Service Provider Interface)接口。
AP層110適于向dbus守護進程注冊當前AP進程的dbus總線,通過API接口調(diào)用LFS管理器連接SP層,接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息,并釋放共享內(nèi)存。AP層110進一步適于向dbus守護進程獲取一個會話dbus,通過會話dbus注冊當前AP進程的dbus總線,設(shè)置當前AP進程的dbus總線的名稱。AP層110進一步適于通過API接口啟動LFS管理器,調(diào)用LFS管理器動態(tài)載入并連接SP層。AP層110進一步適于接收unix套接字并對其解碼以獲取相應(yīng)的dbus消息,從dbus消息中獲取共享內(nèi)存中的設(shè)備信息指針,通過設(shè)備信息指針從共享內(nèi)存里獲取當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息。在本實施例中,AP層110通過調(diào)用dbus_bus_get函數(shù)向dbus守護進程獲取一個會話dbus,通過該會話dbus注冊當前AP進程的dbus總線,并調(diào)用dbus_bus_request_name函數(shù)來設(shè)置當前AP進程的dbus總線的名稱。AP層110通過API接口啟動LFS管理器120,將當前AP進程注冊到LFS管理器120中以建立AP層110與LFS管理器120的連接。當AP層110與LFS管理器120之間的連接建立完成后,AP層110將調(diào)用LFS管理器120動態(tài)載入SP層130,該請求使用邏輯名,LFS管理器120會將邏輯名映射到SP層130以建立AP層110和SP層130之間的連接。AP層110為獲取與當前AP進程對應(yīng)SP的相關(guān)設(shè)備信息,向LFS管理器120發(fā)出調(diào)用指令,從而向LFS管理器120傳入當前AP進程對應(yīng)的SP的SP編號和當前AP進程的dbus對象名。AP層110在獲知有dbus消息傳來后,從dbus_connection_read_write_dispatch函數(shù)返回,并通過dbus_connection_pop_message函數(shù)從接收到的unix套接字中解碼獲取相應(yīng)的dbus消息,調(diào)用bus_message_get_args函數(shù)獲取對應(yīng)的各參數(shù)進行處理,從而得到共享內(nèi)存中的設(shè)備信息指針,最終從根據(jù)該指針從共享內(nèi)存里獲取當前AP進程對應(yīng)的SP的設(shè)備信息,并釋放共享內(nèi)存。
LFS管理器120提供API接口,適于根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP。LFS管理器120進一步適于根據(jù)AP層的調(diào)用指令獲取與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名;根據(jù)SP編號,通過調(diào)用SPI接口在SP層定位與當前AP進程相關(guān)的SP,并向SP傳遞當前AP進程的dbus對象名。在本實施例中,LFS管理器120根據(jù)AP層的調(diào)用指令獲取到與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名,根據(jù)該SP編號定位到對應(yīng)的SP,再通過SPI接口獲取該SP對應(yīng)的設(shè)備信息,向SP層傳入當前AP進程的dbus對象名。
SP層130提供SPI接口,適于訪問設(shè)備驅(qū)動層以獲取與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息,將該設(shè)備信息存入共享內(nèi)存,根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程。SP層130進一步適于向dbus守護進程獲取一個會話dbus;通過會話dbus創(chuàng)建一個dbus消息,設(shè)置與dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名,其中dbus總線名為當前AP進程的dbus總線的名稱,dbus對象名為當前AP進程的dbus對象名;根據(jù)dbus消息對應(yīng)的dbus總線名連接dbus守護進程,向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息并將其傳遞給dbus守護進程。在本實施例中,SP層130通過設(shè)備驅(qū)動接口訪問設(shè)備驅(qū)動層140,從設(shè)備驅(qū)動層140獲取當前AP進程對應(yīng)的SP的設(shè)備信息,并將該設(shè)備信息存入預(yù)先向SP層分配的共享內(nèi)存中。SP層130通過調(diào)用dbus_bus_get_private函數(shù)向dbus守護進程獲取一個會話dbus,然后調(diào)用dbus_message_new_method_call函數(shù)創(chuàng)建一個dbus消息,并設(shè)置與該dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名。最后,SP層130根據(jù)該dbus消息對應(yīng)的dbus總線名連接dbus守護進程,調(diào)用dbus_message_iter_append_basic函數(shù)向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息,并通過dbus_connection_send函數(shù)將此dbus消息傳遞給dbus守護進程。
設(shè)備驅(qū)動層140適于向SP層提供與當前AP進程相關(guān)的SP對應(yīng)的設(shè)備信息。
其中,dbus守護進程適于根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號,保存總線編號與dbus總線的名稱的映射關(guān)系,并創(chuàng)建相應(yīng)的unix套接字。dbus守護進程還適于接收SP層傳遞的dbus消息,根據(jù)dbus消息對應(yīng)的dbus總線名定位當前AP進程,將dbus消息發(fā)送至AP層。dbus守護進程進一步適于根據(jù)dbus消息對應(yīng)的dbus總線名查找其對應(yīng)的總線編號及相應(yīng)的unix套接字,將dbus消息發(fā)送至unix套接字中以發(fā)送至AP層。在本實施例中,dbus守護進程預(yù)先存儲了總線編號與dbus總線的名稱的映射關(guān)系及相應(yīng)的unix套接字,在dbus守護進程接收到SP層130傳遞的dbus消息后,通過上述映射關(guān)系即可查找到該dbus總線的名稱對應(yīng)的總線編號和相應(yīng)的unix套接字,將接收到的dbus消息發(fā)送至該unix套接字中再發(fā)送至AP層110。
關(guān)于Linux系統(tǒng)下的XFS實現(xiàn)的具體步驟以及實施例,在以下基于圖2的描述中將詳細公開,此處不予以贅述。
圖2示出了根據(jù)本發(fā)明一個實施例的Linux系統(tǒng)下的XFS實現(xiàn)方法200的流程圖。Linux系統(tǒng)下的XFS實現(xiàn)方法200適于在金融終端設(shè)備中執(zhí)行,該金融終端設(shè)備中駐留有Linux系統(tǒng)下的XFS實現(xiàn)系統(tǒng)(例如圖1所示的系統(tǒng)100)。
如圖2所示,方法200始于步驟S210。在步驟S210中,AP層向dbus守護進程注冊當前AP進程的dbus總線,通過API接口調(diào)用LFS管理器連接SP層。首先,AP層向dbus守護進程獲取一個會話dbus,通過該會話dbus注冊當前AP進程的dbus總線,并設(shè)置當前AP進程的dbus總線的名稱。隨后,dbus守護進程根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號,保存總線編號與該dbus總線的名稱的映射關(guān)系,并創(chuàng)建相應(yīng)的unix套接字。AP層通過API接口啟動LFS管理器,調(diào)用LFS管理器動態(tài)載入并連接SP層。在本實施例中,AP層110通過調(diào)用dbus_bus_get函數(shù)向dbus守護進程獲取一個會話dbus,通過該會話dbus注冊當前AP進程的dbus總線,并調(diào)用dbus_bus_request_name函數(shù)來設(shè)置當前AP進程的dbus總線的名稱,dbus總線的名稱格式為org.lfs.manager.p<pid>,其中<pid>為當前AP進程的進程號。此時,AP層110還會預(yù)先調(diào)用dbus_connection_read_write_dispatch函數(shù)來等待dbus消息。當AP層110完成向dbus守護進程注冊當前AP進程的dbus總線后,dbus守護進程根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號,該總線編號是唯一的,保存該總線編號與dbus總線的名稱的映射關(guān)系,創(chuàng)建相應(yīng)的unix套接字。關(guān)鍵代碼如下所示:
當然,在不同的金融終端設(shè)備之間,dbus守護進程需創(chuàng)建對應(yīng)的TCP套接字,通過申明dbus守護進程的IP與端口號來進行下一步的通信,具體過程與上述類似,此處不再贅述。
AP層110通過API接口啟動LFS管理器120,指定當前AP進程可以使用的LFS管理器120的API接口的版本范圍,并將該AP進程注冊到LFS管理器120中以建立AP層110與LFS管理器120的連接。當AP層110與LFS管理器120之間的連接建立完成后,AP層110將調(diào)用LFS管理器120動態(tài)載入SP層130,該請求使用邏輯名,LFS管理器120會將邏輯名映射到SP層130以建立AP層110和SP層130之間的連接。AP層110為獲取與當前AP進程對應(yīng)SP的相關(guān)設(shè)備信息,向LFS管理器120發(fā)出調(diào)用指令,從而向LFS管理器120傳入當前AP進程對應(yīng)的SP的SP編號和當前AP進程的dbus對象名。
隨后,進入步驟S220,LFS管理器根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP。LFS管理器先根據(jù)AP層的調(diào)用指令獲取與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名,再根據(jù)該SP編號,通過調(diào)用SPI接口在SP層定位與當前AP進程相關(guān)的SP,并向其傳遞當前AP進程的dbus對象名。在本實施例中,LFS管理器120根據(jù)AP層的調(diào)用指令獲取到與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名,根據(jù)該SP編號定位到對應(yīng)的SP,再通過SPI接口獲取該SP對應(yīng)的設(shè)備信息,向SP層傳入當前AP進程的dbus對象名。
在步驟S230中,SP層訪問設(shè)備驅(qū)動層以獲取與上述SP對應(yīng)的設(shè)備信息,將該設(shè)備信息存入共享內(nèi)存。在本實施例中,SP層130通過設(shè)備驅(qū)動接口訪問設(shè)備驅(qū)動層140,從設(shè)備驅(qū)動層140獲取當前AP進程對應(yīng)的SP的設(shè)備信息,并將該設(shè)備信息存入預(yù)先向SP層分配的共享內(nèi)存中。
在步驟S240中,SP層根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程。首先,SP層向dbus守護進程獲取一個會話dbus,再通過該會話dbus創(chuàng)建一個dbus消息,設(shè)置與dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名,其中dbus總線名為當前AP進程的dbus總線的名稱,dbus對象名為當前AP進程的dbus對象名,最后根據(jù)dbus消息對應(yīng)的dbus總線名連接dbus守護進程,向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息并將其傳遞給dbus守護進程。在本實施例中,SP層130通過調(diào)用dbus_bus_get_private函數(shù)向dbus守護進程獲取一個會話dbus,然后調(diào)用dbus_message_new_method_call函數(shù)創(chuàng)建一個dbus消息,并設(shè)置與該dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名。其中,dbus總線名的格式在步驟S210中已進行說明,固定為org.lfs.manager.p<pid>,<pid>為當前AP進程的進程號,該dbus總線名為當前AP進程的dbus總線的名稱,而dbus接口名固定為org.lfs.windows_compatible_intf,dbus方法名固定為event_callback。由此可知,在一個dbus消息中,dbus總線名、dbus接口名與dbus方法名均是固定的,AP層僅需要向SP層傳遞當前AP進程對應(yīng)的dbus對象名即可,這樣處理也是為了與Windows系統(tǒng)下的XFS實現(xiàn)中的窗口句柄兼容。同時,dbus消息的數(shù)據(jù)格式也是預(yù)先定義好的。在dbus消息中,每個數(shù)據(jù)段之前都有數(shù)據(jù)格式的定義,例如121(y)表示字節(jié),117(u)表示32位無符號整數(shù),115(s)表示字符串,圓括號表示結(jié)構(gòu)體,例如(uu)表示有兩個32位無符號整數(shù)的結(jié)構(gòu)體等,dbus消息在通信過程中符合上述數(shù)據(jù)格式標準來保證消息類型的正確性。最后,SP層130根據(jù)該dbus消息對應(yīng)的dbus總線名連接dbus守護進程,調(diào)用dbus_message_iter_append_basic函數(shù)向dbus消息中加入共享內(nèi)存中的設(shè)備指針信息,并通過dbus_connection_send函數(shù)將此dbus消息傳遞給dbus守護進程。
此時,dbus守護進程接收SP層傳遞的dbus消息,根據(jù)dbus消息對應(yīng)的dbus總線名定位當前AP進程,將dbus消息發(fā)送至AP層。具體來說,dbus守護進程根據(jù)接收到的dbus消息對應(yīng)的dbus總線名查找其對應(yīng)的總線編號及相應(yīng)的unix套接字,再將dbus消息發(fā)送至該unix套接字中以發(fā)送至AP層。在本實施例中,dbus守護進程預(yù)先存儲了總線編號與dbus總線的名稱的映射關(guān)系及相應(yīng)的unix套接字,則在dbus守護進程接收到SP層130傳遞的dbus消息后,通過上述映射關(guān)系即可查找到該dbus總線的名稱對應(yīng)的總線編號和相應(yīng)的unix套接字,將接收到的dbus消息發(fā)送至該unix套接字中再發(fā)送至AP層110。關(guān)鍵代碼如下所示:
最后,在步驟S250中,AP層接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取當前AP進程對應(yīng)的SP的設(shè)備信息,并釋放共享內(nèi)存。AP層接收unix套接字并對其解碼以獲取相應(yīng)的dbus消息,從dbus消息中獲取共享內(nèi)存中的設(shè)備信息指針,通過設(shè)備信息指針從共享內(nèi)存里獲取該SP對應(yīng)的設(shè)備信息。在本實施例中,AP層110在步驟S210中向dbus守護進程注冊當前AP進程的dbus總線后,會調(diào)用dbus_connection_read_write_dispatch函數(shù)來等待dbus消息,而此時AP層110在獲知有dbus消息傳來后,從dbus_connection_read_write_dispatch函數(shù)返回,并通過dbus_connection_pop_message函數(shù)從接收到的unix套接字中解碼獲取相應(yīng)的dbus消息,調(diào)用bus_message_get_args函數(shù)獲取對應(yīng)的各參數(shù)進行處理,從而得到共享內(nèi)存中的設(shè)備信息指針,最終從根據(jù)該指針從共享內(nèi)存里獲取當前AP進程對應(yīng)的SP的設(shè)備信息,并釋放共享內(nèi)存。在上述過程完成后,AP層110重新進入dbus_connection_read_write_dispatch函數(shù)的循環(huán),等待新的dbus消息傳來。
在Linux系統(tǒng)下的XFS實現(xiàn)方法200中,為進一步提高AP層和SP層之間dbus通信的可靠性,可通過命令行的dbus監(jiān)控工具,如dbus-monitor,監(jiān)控指定dbus總線上發(fā)生通信,還可以利用圖形化的dbus監(jiān)控工具,如d-feet,以圖形化的方式對所有dbus對象進行監(jiān)控,檢查所有dbus總線、dbus對象、dbus接口、dbus方法與方法的參數(shù)。此外,考慮方法200適用于在金融終端設(shè)備中執(zhí)行,而金融系統(tǒng)通常對安全性要求較高,因此還可通過polkit來控制dbus消息與總線的權(quán)限,限定只有特定的進程可以向特定的dbus總線發(fā)消息或者接收消息,以保證系統(tǒng)的整體安全。而且,金融終端設(shè)備的系統(tǒng)中常常對操作權(quán)限也有所限制。以ATM(Automatic Teller Machine)系統(tǒng)為例,其AP層中的各AP需要以普通用戶的身份運行,以避免不必要的高權(quán)限造成整體系統(tǒng)的不安全。但是按照ATM的需求,其AP應(yīng)該具備關(guān)機、重啟、修改網(wǎng)絡(luò)配置等功能,在傳統(tǒng)意義上,這些功能具有高權(quán)限,應(yīng)該只有root用戶可以使用。為避免權(quán)限與AP的不合理匹配,對dbus接口設(shè)定相應(yīng)的權(quán)限,使得ATM中的AP可以通過訪問這些接口使用相應(yīng)的功能,如在deepin系統(tǒng)這種Linux系統(tǒng)中設(shè)置有com.deepin.daemon.Network此類dbus接口。
現(xiàn)有的以Linux系統(tǒng)為基礎(chǔ)的XFS實現(xiàn)方法中,采用C++回調(diào)類方式或Linux底層的進程間通信方式進行通信,有可能帶來嚴重的可移植性與可擴展性問題,或由于操作層次過低導(dǎo)致開發(fā)繁瑣,容易出錯。根據(jù)本發(fā)明實施例的Linux系統(tǒng)下的XFS實現(xiàn)的技術(shù)方案,AP層、LFS管理器、SP層之間的通信是基于dbus總線完成的。AP層首先注冊當前AP進程的dbus總線并調(diào)用LFS管理器連接SP層,SP層從驅(qū)動設(shè)備層獲取與當前AP進程對應(yīng)的SP的設(shè)備信息后,由此生成dbus消息傳遞至dbus守護進程,AP層接收dbus守護進程轉(zhuǎn)發(fā)的dbus消息并從中獲取該設(shè)備信息。上述技術(shù)方案中,通過dbus通信實現(xiàn)AP層、LFS管理器和SP層之間的消息傳遞,dbus消息本身可以提供豐富的類型信息,保證消息類型的正確性,并提供大容量的數(shù)據(jù)傳輸。此外,dbus通信機制還具有多種實現(xiàn)方式,同時具有較好的可擴展性和可管理性。
B11.如B10所述的方法,所述AP層向dbus守護進程注冊當前AP進程的dbus總線包括:
AP層向dbus守護進程獲取一個會話dbus;
通過所述會話dbus注冊當前AP進程的dbus總線;
設(shè)置當前AP進程的dbus總線的名稱。
B12.如B11所述的方法,還包括:
dbus守護進程根據(jù)當前AP進程的dbus總線的名稱創(chuàng)建對應(yīng)的總線編號;
保存所述總線編號與所述dbus總線的名稱的映射關(guān)系,并創(chuàng)建相應(yīng)的unix套接字。
B13.如B12所述的方法,所述AP層通過API接口調(diào)用LFS管理器連接SP層包括:
AP層通過API接口啟動LFS管理器;
AP層調(diào)用LFS管理器動態(tài)載入并連接SP層。
B14.如B10所述的方法,所述LFS管理器根據(jù)AP層的調(diào)用指令,通過SPI接口在SP層中定位與當前AP進程相關(guān)的SP包括:
LFS管理器根據(jù)AP層的調(diào)用指令獲取與當前AP進程相關(guān)的SP的SP編號和當前AP進程的dbus對象名;
根據(jù)所述SP編號,通過調(diào)用SPI接口在SP層定位與當前AP進程相關(guān)的SP,并向其傳遞當前AP進程的dbus對象名。
B15.如B14所述的方法,所述SP層根據(jù)共享內(nèi)存中的設(shè)備信息指針生成dbus消息,傳遞給dbus守護進程包括:
SP層向dbus守護進程獲取一個會話dbus;
通過所述會話dbus創(chuàng)建一個dbus消息,設(shè)置與所述dbus消息對應(yīng)的dbus總線名、dbus對象名、dbus接口名和dbus方法名,其中所述dbus總線名為當前AP進程的dbus總線的名稱,所述dbus對象名為當前AP進程的dbus對象名;
根據(jù)所述dbus消息對應(yīng)的dbus總線名連接dbus守護進程,向所述dbus消息中加入共享內(nèi)存中的設(shè)備指針信息并將其傳遞給dbus守護進程。
B16.如B15所述的方法,還包括:
dbus守護進程接收SP層傳遞的dbus消息,根據(jù)所述dbus消息對應(yīng)的dbus總線名定位當前AP進程,將所述dbus消息發(fā)送至AP層。
B17.如B16所述的方法,所述根據(jù)所述dbus消息對應(yīng)的dbus總線名定位當前AP進程,將所述dbus消息發(fā)送至AP層包括:
根據(jù)所述dbus消息對應(yīng)的dbus總線名查找其對應(yīng)的總線編號及相應(yīng)的unix套接字;
將所述dbus消息發(fā)送至所述unix套接字中以發(fā)送至AP層。
B18.如B17所述的方法,所述AP層接收dbus守護進程發(fā)送的dbus消息,從dbus消息中獲取所述SP對應(yīng)的設(shè)備信息包括:
AP層接收unix套接字并對其解碼以獲取相應(yīng)的dbus消息;
從dbus消息中獲取共享內(nèi)存中的設(shè)備信息指針;
通過所述設(shè)備信息指針從共享內(nèi)存里獲取所述SP對應(yīng)的設(shè)備信息。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下被實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員應(yīng)當理解在本文所公開的示例中的設(shè)備的模塊或單元或組件可以布置在如該實施例中所描述的設(shè)備中,或者可替換地可以定位在與該示例中的設(shè)備不同的一個或多個設(shè)備中。前述示例中的模塊可以組合為一個模塊或者此外可以分成多個子模塊。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
此外,所述實施例中的一些在此被描述成可以由計算機系統(tǒng)的處理器或者由執(zhí)行所述功能的其它裝置實施的方法或方法元素的組合。因此,具有用于實施所述方法或方法元素的必要指令的處理器形成用于實施該方法或方法元素的裝置。此外,裝置實施例的在此所述的元素是如下裝置的例子:該裝置用于實施由為了實施該發(fā)明的目的的元素所執(zhí)行的功能。
如在此所使用的那樣,除非另行規(guī)定,使用序數(shù)詞“第一”、“第二”、“第三”等等來描述普通對象僅僅表示涉及類似對象的不同實例,并且并不意圖暗示這樣被描述的對象必須具有時間上、空間上、排序方面或者以任意其它方式的給定順序。
盡管根據(jù)有限數(shù)量的實施例描述了本發(fā)明,但是受益于上面的描述,本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員明白,在由此描述的本發(fā)明的范圍內(nèi),可以設(shè)想其它實施例。此外,應(yīng)當注意,本說明書中使用的語言主要是為了可讀性和教導(dǎo)的目的而選擇的,而不是為了解釋或者限定本發(fā)明的主題而選擇的。因此,在不偏離所附權(quán)利要求書的范圍和精神的情況下,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。對于本發(fā)明的范圍,對本發(fā)明所做的公開是說明性的,而非限制性的,本發(fā)明的范圍由所附權(quán)利要求書限定。