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