当前位置: 首页 > 科技观察

跟小白学鸿蒙——OpenHarmony软总线能力浅析

时间:2023-03-19 00:57:41 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.com分布式软总线是软总线的重要能力OpenHarmony,其设计目标是实现多设备间的通信模式。分布式软总线是分布式硬件和分布式软总线的重要基础。分布式软总线提供了设备之间不区分链路的发现、组网和传输能力:Discovery:利用WiFi和Bluetooth相关协议实现设备的可发现性。组网:提供统一的设备组网和拓扑管理能力。Transmission:提供数据传输能力,支持消息、字节、流、文件数据传输能力。概述在OpenHarmony的源代码中,大部分与系统功能相关的部分都放在文件夹foundation中,而与通信相关的部分则放在文件夹communication中。本篇我们要分析的软总线函数在foundation/communication/dsoftbus这个路径下。具体目录结构如下:.├──adapter//适配层│├──BUILD.gn│├──common//适配层管理、网络适配、协议适配等│└──default_config//适配层配置├──BUILD.gn├──bundle.json├──check_sub_module.py├──components//依赖组件│├──mbedtls//开源ssl库,在第三方库中│└──nstackx//tcp/ip协议管理模块├──config.py├──core//核心层│├──adapter//适配接口│├──authentication//认证接口│├──BUILD.gn│├──bus_center//网络码│├──common//公共码│├──connection//连接码│├──discovery//发现码│├──frame//帧码│└──传输//传输代码├──dsoftbus.gni├──figures│├──dsoftbus-architecture.png│└──dsoftbus-architecture_zh.png├──hisysevent.yaml├──interfaces//外部头文件│├──inner_kits│└──kits├──Kconfig├──LICENSE├──OAT.xml├──README.md├──README_zh.md├──sdk//外部应用sdk│├──BUILD.gn│├──bus_center//network│├──discovery//discovery│├──frame//frame│└──transmission//transmission├──tests│├──adapter│├──BUILD.gn│├──core│├──include│└──sdk└──tools//Tools├──BUILD.gn└──device_info约束:设备发现需要在同一个二层网络(即同一个交换机,同一WiFi路由器或近场通信范围内)联网前需要进行设备认证过程(绑定)。结构简要分析根据目录结构、内部文件和编译框架,结构归纳如下:SDK:为其他服务提供软总线的能力接口,如发现设备、发布服务、设备连接、远程设备信息获取、时间同步、注册回调接收设备下线、下线消息、设备信息变更消息;SDK提供softbus_client.so,头文件在interfaces/kits目录下;工具:提供SoftBusDumpDeviceInfo工具,可以查看本地设备信息和所有发现的设备信息Core:软总线核心实现部分,提供softbus_server库,实现系统能力框架,提供系统能力。discovery:提供发布、发现和连接网络设备和蓝牙设备的能力。authentication:设备认证模块针对不同类型的连接方式提供不同的认证实现和统一的认证能力,为分布式设备服务提供DeviceAuthCallback;设备认证模块依赖。依赖//base/security/device_auth/services:deviceauth_sdk库。认证模块提供认证连接对应的处理,如连接处理(OnConnectResult)、数据处理(OnDataReceived)、断开处理(OnDisconnected)三个基本入口,提供设备的连接认证能力。连接:提供ble、br、tcp、p2p连接方式。连接模块将启动后台连接服务。该连接服务提供默认的tcp、ble、br、p2p连接处理接口。服务内部通过线程池处理连接任务;认证模块通过连接模块对连接进行认证,同时连接模块也提供了回调接口,为业务模块提供数据返回。连接模块是通过具体的连接业务实现代码,为业务模块提供设备连接和信息传输通道;目前提供的连接方式主要有socket或者蓝牙;接口声明在接口目录中。transmission:提供消息发送接口,可以发送加密信息或未加密信息。加密方法是根据认证信息来确认的。使用认证会话的密钥作为密钥值,加密方式为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(授权认证))、属性(软总线配置)、实用程序(工具、超时、十六进制、随机等)。frame:框架层,不同类型的系统(小型系统L0、轻量级系统L1、标准系统L2)提供不同的对外接口实现;adapter:适配层,目前适配不同类型的设备,如WiFi、蓝牙等。Adapter:软总线适配层,针对不同系统裁剪配置能力,封装调用外部依赖。组件:components、mbedtls(SSL算法库)、nstackx(网络协议库,为coap提供网络协议服务)。分布式硬件和工具功能分析-->>softbus_client(sdk):so库引用,接口调用softbus_client(sdk)-->bus_center_sdk_deps:链接对应服务so,c++调用softbus_client(sdk)-->trans_session_manager_sdk_deps:链接对应服务so,c++调用softbus_client(sdk)-->softbus_adapter:链接对应服务so,c++调用softbus_client(sdk)-->softbus_utils:链接对应服务so,c++调用bus_center_sdk_deps-->ipc_single:链接对应idlso,c接口调用bus_center_sdk_deps-->samgr:应用SystemAbility服务框架trans_session_manager_sdk_deps-->nstackx(FillpSo/congestion/dfile/util):链接对应的服务so,c调用distributedhardware(分布式硬件管理),由以下部分组成:devicemanager:DeviceManager组件在OpenHarmony上,提供了与账户无关的分布式设备认证组网能力,并为monito提供了一套接口为开发者提供分布式设备之间的环、发现和认证。分布式摄像头:分布式摄像头是同时使用多个设备的摄像头的能力。分布式摄像头组件是为分布式硬件子系统提供这种能力的组件。该组件不直接连接到应用程序,而只是为分布式硬件框架子系统提供一个C++接口。应用程序可以使用分布式摄像头组件通过摄像头框架的接口操作其他设备的摄像头,使用方法与本地摄像头相同。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:Frame层接口实现。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传输代理的应用,提供建立、配置和管理传输通道的接口。softbus_server(核心):分布式软总线核心服务库,以系统能力为框架,支持ipc通信。auth_server_src:认证服务。bus_center_server_src:主要服务。conn_manager_src:连接服务。disc_server_src:发现服务。trans_session_src:会话服务。softbus_permission_src:softbus的权限配置。softbus_adapter,软总线适配层,连接底层系统接口(kernel),连接ssl加密通道(mbedtls或openssl),为核心服务提供功能实现。softbus_utils,软总线的通用库,核心层的公共库,提供了基本方法的实现,包括:bitmap:位图,目前用于蓝牙设备Capability识别。dfx:面向未来的设计,实现了hidumper(信息打印)和hisystemevent(OpenHarmony的事件埋点,通过在关键路径埋点记录系统运行过程中的重要信息,帮助开发者定位问题)。json_utils:提供cjson函数适配,软总线信令使用json数据传输,该函数用于信令的发送和接收。message_handler:提供软总线消息处理机制,包括消息处理Looper、消息同步发送、异步发送接口等,所有需要处理的消息都在Looper队列中管理,过期后调用具体模块的handler进行处理.消息处理程序包括(auth、lnnlane、lnntimesync、lnnnetbuilder、buscenternotify、lnnasync、lnnstatemachine、hisysevent、bleconnnect、blegattclient、blegattserver、p2plink、bledisc、trans)。总结软总线服务依赖于监控系统事件和网络扫描(coap、br、ble)进行设备发现和认证后的设备连接。软总线服务不直接向应用层提供调用接口,而是通过分布式设备管理提供NAPI接口供应用层调用。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。