作者:ZhangChuang,華為分布式硬件技術(shù)專家
一
硬件資源池理念產(chǎn)生背景
隨著智能設(shè)備的發(fā)展和普及,越來越多的智能設(shè)備已經(jīng)深入人們的生活,比如手機(jī),PC,平板,各類穿戴設(shè)備等。當(dāng)前單個設(shè)備的外設(shè)資源已經(jīng)非常豐富,硬件能力也很強(qiáng)大。像我們的手機(jī)、PC、平板都有相機(jī),音頻,屏幕,鍵鼠等各種外設(shè)資源;但是這些硬件外設(shè)是屬于各個設(shè)備自身的,如果涉及到跨設(shè)備的協(xié)同操作就會比較繁瑣。比如用戶正在PC上編輯文檔,需要從平板復(fù)制一段文字,或者使用手機(jī)拍攝照片,然后插入文檔作為素材,需要用戶在各個設(shè)備上分別操作,然后發(fā)送文字或者圖片到PC,然后再回到PC進(jìn)行編輯,非常繁瑣。如果應(yīng)用開發(fā)者從應(yīng)用層實現(xiàn)設(shè)備間硬件能力共享,對于應(yīng)用開發(fā)者工作量和難度非常大,而且各個應(yīng)用之間需要重復(fù)開發(fā),能力難以復(fù)用和繼承。
圖1 單設(shè)備硬件孤立難以共享
為此,鴻蒙系統(tǒng)提出了硬件資源池的理念,打破了各個設(shè)備硬件的孤立狀態(tài),能夠做到設(shè)備間硬件外設(shè)全局共享。我們把各個設(shè)備的硬件外設(shè)抽象為外設(shè)信息單元,外設(shè)信息在各個可信設(shè)備之間自動同步,如此,實現(xiàn)了外設(shè)信息的全局可見;結(jié)合分布式硬件虛擬化技術(shù),實現(xiàn)任意設(shè)備之間的硬件外設(shè)能力跨設(shè)備調(diào)用;分布式硬件資源池作為系統(tǒng)能力下沉系統(tǒng)底層,北向開發(fā)者不感知資源池的存在;跨設(shè)備硬件和本地硬件使用同一套API,開發(fā)者調(diào)用跨設(shè)備硬件體驗和本地硬件一致,如此明顯的便利了開發(fā)者調(diào)用跨設(shè)備硬件,開發(fā)者無需關(guān)注硬件底層細(xì)節(jié),專注于業(yè)務(wù)創(chuàng)新。
圖2 硬件資源池打破硬件邊界,全局共享
二
鴻蒙系統(tǒng)硬件資源池支持場景
鴻蒙系統(tǒng)采用硬件資源池的理念,能夠結(jié)合多個設(shè)備的優(yōu)勢硬件為用戶提供更優(yōu)的體驗,同時支持了消費者和開發(fā)者的多種創(chuàng)新體驗。
2.1消費者場景
在消費者層面,華為分布式硬件支持智慧辦公,智慧出行等多種創(chuàng)新場景。例如智慧辦公場景中,使用一套PC鍵鼠即可和周邊平板等設(shè)備跨設(shè)備操作,使用到鍵鼠外設(shè)的跨設(shè)備操控能力;多屏協(xié)同場景中,手機(jī)屏幕顯示到平板,手機(jī)視頻通話可以使用平板的麥克風(fēng)和攝像頭,用戶在平板上即可同時操作手機(jī)平板兩臺設(shè)備,避免設(shè)備間來回切換,操作方便,這個場景使用到了麥克風(fēng),揚聲器,攝像頭和屏幕等硬件的跨設(shè)備分布式能力。
在智慧出行場景中,用戶在手機(jī)上聽音樂或者視頻通話,進(jìn)入座艙后,手機(jī)上的音樂和通話可以自動接續(xù)到車機(jī),使用車機(jī)的音頻外設(shè)播音和拾音,使用車機(jī)的攝像頭進(jìn)行視頻通話,更加符合用戶在座艙中的使用習(xí)慣;手機(jī)導(dǎo)航接續(xù)到車機(jī)后,車機(jī)的GPS信號可以共享給手機(jī),結(jié)合手機(jī)GPS信號提供更高精度的定位數(shù)據(jù);可以看到,在智慧出行場景中,可以通過分布式硬件資源池結(jié)合手機(jī)和車機(jī)的優(yōu)勢硬件,為用戶提供更好的服務(wù)體驗。
圖3 鴻蒙硬件資源池支持各類消費者場景
2.2開發(fā)者場景
對于開發(fā)者來說,由于分布式硬件資源池將跨設(shè)備硬件調(diào)用的復(fù)雜度都封裝在了系統(tǒng)底層,跨設(shè)備硬件復(fù)用本地硬件的API,開發(fā)者學(xué)習(xí)和適配難度可以做到最低。
以分布式相機(jī)為例,相機(jī)接口可以同時查詢到本地相機(jī)和跨設(shè)備相機(jī)外設(shè),本地相機(jī)和跨設(shè)備相機(jī)通過ConnectionType.CAMERA_CONNECTION_REMOTE屬性相區(qū)分,開發(fā)者通過該屬性過濾出分布式相機(jī)后,其他操作和本地相機(jī)完全一致。無需為使用跨設(shè)備硬件學(xué)習(xí)一套獨立的API,很大程度上的簡化了開發(fā)者開發(fā)難度。圖4 分布式硬件開發(fā)者使用示例
三
硬件資源池原理
以相機(jī)和音頻為例,假設(shè)設(shè)備A和設(shè)備B都有各自的相機(jī)和音頻外設(shè),驅(qū)動層有對應(yīng)的本地相機(jī)和本地音頻驅(qū)動。
圖5分布式硬件資源池原理示意
分布式硬件從各自設(shè)備本地采集相機(jī)和音頻驅(qū)動信息,存入分布式數(shù)據(jù)庫。如果AB兩個設(shè)備建立了可信關(guān)系并且通過軟總線組網(wǎng)上線成功,分布式數(shù)據(jù)庫會在AB兩個設(shè)備之間自動同步各自的本地外設(shè)數(shù)據(jù)信息,這樣,設(shè)備A分布式硬件可以拿到設(shè)備B的相機(jī)和音頻外設(shè)規(guī)格數(shù)據(jù),同樣,設(shè)備B也可以拿到設(shè)備A的相機(jī)和音頻外設(shè)規(guī)格數(shù)據(jù)。
以設(shè)備A的流程為例,分布式硬件收到對端設(shè)備B的硬件規(guī)格數(shù)據(jù)后,在驅(qū)動層注冊對應(yīng)的虛擬相機(jī)和虛擬音頻驅(qū)動,虛擬驅(qū)動相當(dāng)于對端設(shè)備物理硬件在本地的代理;虛擬驅(qū)動實現(xiàn)和本地硬件驅(qū)動相同的HDI接口,區(qū)別在于,本地硬件驅(qū)動操作本地物理硬件,虛擬硬件驅(qū)動控制和數(shù)據(jù)傳輸通過軟總線作用于對端分布式硬件。
由于和本地硬件實現(xiàn)同樣的HDI接口,設(shè)備B相機(jī)和音頻對應(yīng)的虛擬硬件可以被相機(jī)服務(wù)和音頻服務(wù)發(fā)現(xiàn)并管理,包括外設(shè)的查詢,相機(jī)的預(yù)覽拍照錄像,音頻的播放,聲音的錄制等功能。
對稱的,在設(shè)備B上會執(zhí)行同樣的過程,為設(shè)備A相機(jī)和音頻外設(shè)注冊對應(yīng)虛擬驅(qū)動,從而實現(xiàn)設(shè)備B上對設(shè)備A硬件外設(shè)的查詢和使用。
如此就實現(xiàn)了外設(shè)信息在設(shè)備間互通共享,信息感知自動注冊虛擬硬件,注冊后即可用,成為一個無中心對稱的分布式硬件外設(shè)管理系統(tǒng)。同時,分布式硬件框架定義了外設(shè)熱插拔,虛擬硬件保活等機(jī)制,保證業(yè)務(wù)可靠性。在運行時,各個硬件外設(shè)的業(yè)務(wù)運行于獨立進(jìn)程中,在進(jìn)程層面保證不同硬件的虛擬化業(yè)務(wù)互相隔離,提高了業(yè)務(wù)可靠性。
詳細(xì)實現(xiàn)可以參考分布硬件管理框架源碼:https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk
四
硬件資源池接入實踐
4.1接口定義
通過前文分析,可以看到分布式硬件與南向硬件的交互涉及"硬件信息采集"和"驅(qū)動注冊"兩類業(yè)務(wù),與此對應(yīng),分布式硬件針對南向硬件接入定義了兩類接口。一類是硬件規(guī)格采集接口,一類是驅(qū)動注冊與準(zhǔn)備接口。
圖6 分布式硬件資源池接入接口
(1)硬件規(guī)格采集接口
硬件規(guī)格采集接口定義了規(guī)格信息的采集以及外設(shè)熱插拔事件監(jiān)聽等功能。
接口鏈接:https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk/blob/master/common/utils/include/ihardware_handler.h
(2)驅(qū)動注冊與準(zhǔn)備接口
由于我們是跨設(shè)備硬件調(diào)用,涉及雙端設(shè)備的硬件,我們定義使用周邊其他設(shè)備硬件外設(shè)的一端為Source端,共享本地硬件給其他設(shè)備調(diào)用的一端為Sink端。
驅(qū)動注冊與準(zhǔn)備接口包括Source和Sink兩端。
Source端包括初始化,釋放以及虛擬驅(qū)動注冊/去注冊等功能;Sink端主要是初始化和釋放接口,用于響應(yīng)Source端的控制指令,比如播放聲音或者采集視頻畫面。在設(shè)備組網(wǎng)上線后,分布式硬件框架調(diào)用各個硬件類型的南向接口實現(xiàn),分別初始化各類硬件的Source和Sink端業(yè)務(wù)進(jìn)程,為后續(xù)的硬件跨設(shè)備調(diào)用做好準(zhǔn)備。
Source端接口鏈接:https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk/blob/master/common/utils/include/idistributed_hardware_source.h
Sink端接口鏈接:https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk/blob/master/common/utils/include/idistributed_hardware_sink.h
4.2硬件接入實例
由于分布式硬件良好的南向接入解耦設(shè)計,如果有新硬件外設(shè)接入,只需要如下三步即可,以分布式相機(jī)配置為例。
Step1:定義硬件外設(shè)類型枚舉值CAMERA。
enumclassDHType:uint32_t{
UNKNOWN=0x0,//unknowndevice
CAMERA=0x01,//Camera
AUDIO=0x02,//Mic
SCREEN=0x08,//Display
GPS=0x10,//GPS
INPUT=0x20,//Keyboard
MAX_DH=0x80000000
};
(左右滑動查看更多)文件鏈接:https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk/blob/master/common/utils/include/device_type.h
Step2:實現(xiàn)分布式硬件框架定義的南向接入接口,分別實現(xiàn)為三個so。
1、實現(xiàn)分布式硬件框架定義的硬件規(guī)格采集接口IHardwareHandler,并編譯獲得接口實現(xiàn)libdistributed_camera_handler.z.so。
參考代碼:https://gitee.com/openharmony/distributedhardware_distributed_camera/blob/master/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h
2、實現(xiàn)Source側(cè)接入接口IDistributedHardwareSource,并編譯獲得接口實現(xiàn)libdistributed_camera_source_sdk.z.so。
參考代碼:https://gitee.com/openharmony/distributedhardware_distributed_camera/blob/master/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h
3、實現(xiàn)Sink側(cè)接入接口IDistributedHardwareSink,并編譯獲得接口實現(xiàn)libdistributed_camera_sink_sdk.z.so。
參考代碼:
https://gitee.com/openharmony/distributedhardware_distributed_camera/blob/master/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h
Step3:在分布式硬件子部件配置文件中,添加新硬件外設(shè)相關(guān)配置,包括外設(shè)類型,南向接口實現(xiàn)的so名稱,版本號,以及Source和Sink端服務(wù)分配的服務(wù)Id。
該配置由產(chǎn)品定義確定,不同的產(chǎn)品可能使用不同的分布式能力。以RK3568開發(fā)板為例,配置如下:
{
"name":"distributed_camera",
"type":"CAMERA",
"comp_handler_loc":"libdistributed_camera_handler.z.so",
"comp_handler_version":"1.0",
"comp_source_loc":"libdistributed_camera_source_sdk.z.so",
"comp_source_version":"1.0",
"comp_source_sa_id":4803,
"comp_sink_loc":"libdistributed_camera_sink_sdk.z.so",
"comp_sink_version":"1.0",
"comp_sink_sa_id":4804
}
(左右滑動查看更多)
配置鏈接:https://gitee.com/openharmony/device_board_hihope/blob/master/rk3568/distributedhardware/distributed_hardware_components_cfg.json
三個接口的so實現(xiàn)后,編譯打包到系統(tǒng)庫路徑下,同時配置到分布式硬件部件配置文件中,設(shè)備組網(wǎng)上線后,可以看到分布式相機(jī)的dcamera進(jìn)程已經(jīng)成功啟動,表明相機(jī)外設(shè)已經(jīng)納入資源池管理,成為分布式相機(jī)。
從下述截圖也可以看到分布式硬件其他相關(guān)進(jìn)程,dhardware就是分布式硬件資源池管理框架進(jìn)程,顧名思義,dcamera是分布式相機(jī)進(jìn)程,dinput是分布式鍵鼠輸入進(jìn)程,dscreen是分布式屏幕進(jìn)程。
圖7 分布式硬件相關(guān)進(jìn)程
五
社區(qū)已開源分布式硬件代碼倉
當(dāng)前在OpenHarmony開源社區(qū),已經(jīng)開源了硬件資源池管理框架,分布式相機(jī),分布式音頻,分布式屏幕,分布式輸入的代碼倉,開放了相機(jī),音頻,屏幕和鍵鼠輸入外設(shè)的跨設(shè)備控制源碼,關(guān)于硬件資源池的詳細(xì)實現(xiàn),可以參考我們的開源代碼倉。1、分布式硬件框架(distributedhardware_distributed_hardware_fwk)https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk
2、分布式相機(jī)(distributedhardware_distributed_camera)
https://gitee.com/openharmony/distributedhardware_distributed_camera
3、分布式音頻(distributedhardware_distributed_audio)
https://gitee.com/openharmony/distributedhardware_distributed_audio
4、分布式屏幕(distributedhardware_distributed_screen)
https://gitee.com/openharmony/distributedhardware_distributed_screen
5、分布式輸入(distributedhardware_distributed_input)
https://gitee.com/openharmony/distributedhardware_distributed_input
更多推薦
點擊下方圖片鏈接,查看更多欄目內(nèi)容
-
HarmonyOS
+關(guān)注
關(guān)注
79文章
1974瀏覽量
30149
原文標(biāo)題:【技術(shù)視界】分布式系統(tǒng)硬件資源池原理和接入實踐
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論