跟著小白一起學(xué)鴻蒙—簡析OpenHarmony軟總線能力
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
分布式軟總線是OpenHarmony的重要能力,設(shè)計目標(biāo)是實(shí)現(xiàn)多設(shè)備間的通信方式。分布式軟總線是分布式硬件和分布式軟總線的重要基礎(chǔ),分布式軟總線提供一種不區(qū)分鏈路的設(shè)備間發(fā)現(xiàn)、組網(wǎng)和傳輸?shù)哪芰Γ?/p>
- 發(fā)現(xiàn):應(yīng)用WiFi,藍(lán)牙相關(guān)協(xié)議實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)能力。
- 組網(wǎng):提供統(tǒng)一的設(shè)備組網(wǎng)和拓?fù)涔芾砟芰Α?/li>
- 傳輸:提供數(shù)據(jù)傳輸能力,支持消息、字節(jié)、流,文件的數(shù)據(jù)傳輸能力。
概述
在OpenHarmony的源碼里和系統(tǒng)功能相關(guān)的部分大多都放在foundation這個文件夾里,而通訊相關(guān)的部分則是在communication這個文件夾內(nèi)。我們本篇要分析的軟總線功能就是在foundation/communication/dsoftbus路徑下,具體目錄結(jié)構(gòu)如下:
- 約束:
- 設(shè)備發(fā)現(xiàn)需要在同二層網(wǎng)絡(luò)中(即同交換機(jī),同WiFi路由或者近場通信范圍內(nèi))
- 組網(wǎng)前需要有設(shè)備認(rèn)證過程(綁定)
架構(gòu)簡析
- 根據(jù)目錄結(jié)構(gòu)和內(nèi)部文件及編譯框架總結(jié)架構(gòu)如下:
- SDK:為其他業(yè)務(wù)提供軟總線的能力接口,如發(fā)現(xiàn)設(shè)備,發(fā)布服務(wù),設(shè)備連接,遠(yuǎn)端設(shè)備信息獲取,時間同步,注冊回調(diào)接收設(shè)備上下線消息,設(shè)備信息變更消息;SDK對外提供softbus_client.so,頭文件均在interfaces/kits目錄里;
- Tools:提供SoftBusDumpDeviceInfo工具,可以查看本地的設(shè)備信息和所有發(fā)現(xiàn)的設(shè)備信息。
- Core:軟總線的核心實(shí)現(xiàn)部分,提供softbus_server庫,實(shí)現(xiàn)system ability框架提供系統(tǒng)能力。
- discovery:提供對網(wǎng)絡(luò)設(shè)備和藍(lán)牙設(shè)備的發(fā)布,發(fā)現(xiàn),連接的能力。
- authentication:設(shè)備認(rèn)證模塊,對不同類型的連接方式提供不同的認(rèn)證實(shí)現(xiàn)和統(tǒng)一的認(rèn)證能力,并為分布式設(shè)備業(yè)務(wù)提供DeviceAuthCallback;設(shè)備認(rèn)證模塊依。賴//base/security/device_auth/services:deviceauth_sdk庫。認(rèn)證模塊提供認(rèn)證連接對應(yīng)的處理,如連接處理(OnConnectResult),數(shù)據(jù)處理(OnDataReceived),斷開處理(OnDisconnected)三個基礎(chǔ)入口,提供設(shè)備的連接認(rèn)證能力。
- connection:提供ble,br,tcp,p2p連接方式。連接模塊會啟動一個后臺連接服務(wù),此連接服務(wù)提供默認(rèn)的tcp,ble,br,p2p的連接處理接口,服務(wù)內(nèi)部通過一個線程池處理連接的任務(wù);認(rèn)證模塊通過連接模塊進(jìn)行認(rèn)證連接,同時連接模塊也提供回調(diào)接口,為業(yè)務(wù)模塊提供數(shù)據(jù)返回。連接模塊就是通過具體的連接業(yè)務(wù)實(shí)現(xiàn)代碼為業(yè)務(wù)模塊提供設(shè)備連接和信息傳輸通道;目前主要提供的連接方式為socket或者藍(lán)牙兩種;其中接口聲明在interface目錄下。
- transmission:提供消息發(fā)送接口,可以發(fā)送加密信息或者不加密信息,加密方式根據(jù)認(rèn)證的信息確認(rèn),使用認(rèn)證會話的key作為key值,加密方式為aes加密。
- bus_center:提供核心的LNN本地網(wǎng)絡(luò)服務(wù)接口,包括網(wǎng)絡(luò)服務(wù)發(fā)現(xiàn),連接,服務(wù)發(fā)布等核心能力,以及設(shè)備管理能力。bus_center作為軟總線的管理節(jié)點(diǎn)提供本地網(wǎng)絡(luò)拓?fù)滟~本(NetLedger),消息處理回環(huán)(BusLooper),事件處理對象(Netlink,Product,Lwip,Wifi,BtState,Driver,ScreenState,DeviceName),網(wǎng)絡(luò)發(fā)現(xiàn)服務(wù)(Coap),網(wǎng)絡(luò)接口(Netif, softbus_feature_config.c里寫死),消息網(wǎng)絡(luò)構(gòu)造(NetBuilder),本地網(wǎng)絡(luò)路由管理(LaneHub),節(jié)點(diǎn)地址分配(NodeAddrAllocator)。軟總線設(shè)計目標(biāo)為無感的設(shè)備互聯(lián)互通,所以每個標(biāo)準(zhǔn)設(shè)備都可以作為一個網(wǎng)絡(luò)節(jié)點(diǎn)也可以作為一個網(wǎng)關(guān),而bus_center就是作為網(wǎng)關(guān)實(shí)現(xiàn)的部分。軟總線服務(wù)通過收聽系統(tǒng)的事件,包括設(shè)備事件,網(wǎng)絡(luò)事件以感知本設(shè)備的每一處變化,然后根據(jù)變化來決定是否可以感知到周圍新的節(jié)點(diǎn)設(shè)備加入網(wǎng)絡(luò),并提供設(shè)備認(rèn)證,連接,傳輸數(shù)據(jù)的服務(wù)。
- common:核心部分的基礎(chǔ)代碼,如bitmap(位圖),dfx(DesignForX,未來設(shè)計),json,messagehandler(軟總線信令),network(網(wǎng)絡(luò)頻率參數(shù)),queue(隊列),security(權(quán)限認(rèn)證),property(軟總線配置),utils(工具集,timeout,hextobytes,random,等等)。
- frame:框架層,不同類型的系統(tǒng)(小型系統(tǒng)L0,輕量系統(tǒng)L1,標(biāo)準(zhǔn)系統(tǒng)L2)提供不同的對外接口實(shí)現(xiàn);
- adapter:適配層,目前適配不同的設(shè)備類型,如WiFi,藍(lán)牙等。
- Adapter:軟總線適配層,對不同系統(tǒng)進(jìn)行裁剪和能力配置,對外部依賴進(jìn)行包裝和調(diào)用。
- Component:組件,mbedtls(SSL算法庫),nstackx(網(wǎng)絡(luò)協(xié)議庫,為coap提供網(wǎng)絡(luò)協(xié)議服務(wù))。
功能簡析
- distributedhardware(分布式硬件管理),由以下幾個部分組成:
- devicemanager:DeviceManager組件在OpenHarmony上提供賬號無關(guān)的分布式設(shè)備的認(rèn)證組網(wǎng)能力,并為開發(fā)者提供了一套用于分布式設(shè)備間監(jiān)聽、發(fā)現(xiàn)和認(rèn)證的接口。
- distributedcamera:分布式相機(jī)是多個設(shè)備的相機(jī)同時協(xié)同使用的能力。分布式相機(jī)部件是為分布式硬件子系統(tǒng)提供這一能力的部件。本部件不直接對接應(yīng)用,只向分布式硬件框架子系統(tǒng)提供C++接口。應(yīng)用可以通過相機(jī)框架的接口使用分布式相機(jī)部件操作其他設(shè)備的Camera,使用方式與本地相機(jī)一致。
- distributedhardwarefwk:分布式硬件管理框架是為分布式硬件子系統(tǒng)提供信息管理能力的部件。分布式硬件管理框架為分布式硬件子系統(tǒng)提供統(tǒng)一的硬件接入、查詢和使能等能力。
- distributedscreen:分布式屏幕是一種屏幕虛擬化能力,支持用戶指定組網(wǎng)認(rèn)證過的其他OpenHarmony設(shè)備的屏幕作為Display的顯示區(qū)域。在分布式硬件子系統(tǒng)中,分布式屏幕組件提供跨設(shè)備屏幕能力調(diào)用,為OpenHarmony操作系統(tǒng)提供系統(tǒng)投屏、屏幕鏡像、屏幕分割等能力的實(shí)現(xiàn)。
- tools(分布式軟總線工具),提供打印本地設(shè)備信息和分布式軟總線上發(fā)現(xiàn)的遠(yuǎn)程節(jié)點(diǎn)信息。
- softbus_client(sdk),分布式軟總線的框架層接口,利用ipc通信同softbus_server交互實(shí)現(xiàn)具體功能,包括以下部分:
- bus_center_sdk_src:包括bus_center_service_sdk_src和bus_center_manager_sdk_src,軟總線管理層接口。
- disc_sdk_src:網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)現(xiàn)接口。
- softbus_client_frame_src:框架層接口實(shí)現(xiàn)。
- trans_session_manager_sdk_src:傳輸層接口實(shí)現(xiàn),包括(trans_ipc_proxy_sdk_src,trans_session_sdk_src,trans_channel_sdk_src)。
- trans_ipc_proxy_sdk_src:提供傳輸通道,通過systemability獲取服務(wù)并進(jìn)行交互的能力。
- trans_session_sdk_src:應(yīng)用ipc傳輸代理提供傳輸會話建立,配置的接口。
- trans_channel_sdk_src:應(yīng)用ipc傳輸代理提供傳輸channel建立,配置,管理的接口。
- softbus_server(core):分布式軟總線的核心服務(wù)庫,以system ability為框架,支持ipc通信。
- auth_server_src:認(rèn)證服務(wù)。
- bus_center_server_src:主服務(wù)。
- conn_manager_src:連接服務(wù)。
- disc_server_src:發(fā)現(xiàn)服務(wù)。
- trans_session_src:會話服務(wù)。
- softbus_permission_src:軟總線的權(quán)限配置。
- softbus_adapter,軟總線適配層,對接底層系統(tǒng)接口(kernel),對接ssl加密通道(mbedtls或openssl),并為核心服務(wù)提供功能實(shí)現(xiàn)。
- softbus_utils,軟總線的通用庫,核心層里的公共庫,提供基礎(chǔ)方法的實(shí)現(xiàn),包括:
- bitmap:位圖,目前是用于藍(lán)牙設(shè)備Capability標(biāo)識。
- dfx:面向未來設(shè)計,實(shí)現(xiàn)hidumper(信息打?。┖蚳isystemevent(OpenHarmony的事件埋點(diǎn),通過在關(guān)鍵路徑埋點(diǎn)記錄系統(tǒng)在運(yùn)行過程中的重要信息,輔助開發(fā)者定位問題)。
- json_utils:提供cjson的功能適配,軟總線的信令均使用json數(shù)據(jù)傳輸,此功能為信令的收發(fā)服務(wù)。
- message_handler:提供軟總線報文處理機(jī)制,包括報文處理Looper,報文同步發(fā)送、異步發(fā)送接口等,所有待處理的報文在Looper的隊列里管理,到期后調(diào)用具體模塊的handler處理,處理報文的handler包括(auth,lnnlane,lnntimesync,lnnnetbuilder,buscenternotify,lnnasync,lnnstatemachine,hisysevent,bleconnnect,blegattclient,blegattserver,p2plink,bledisc,trans)。
總結(jié)
- 軟總線服務(wù)依賴于監(jiān)聽系統(tǒng)事件和網(wǎng)絡(luò)掃描(coap,br,ble)進(jìn)行設(shè)備發(fā)現(xiàn)和認(rèn)證后的設(shè)備連接。
- 軟總線服務(wù)不對應(yīng)用層直接提供調(diào)用接口,通過分布式設(shè)備管理提供NAPI接口供應(yīng)用層調(diào)用。