简析OpenHarmony软总线能力

分布式软总线是 OpenHarmony 的重要能力,设计目标是实现多设备间的通信方式。分布式软总线是分布式硬件和分布式软总线的重要基础,分布式软总线提供一种不区分链路的设备间发现、组网和传输的能力:

  • 发现:应用 WiFi,蓝牙相关协议实现设备发现能力;
  • 组网:提供统一的设备组网和拓扑管理能力;
  • 传输:提供数据传输能力,支持消息、字节、流,文件的数据传输能力;
概述

在 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								//框架代码
│   └── transmission						//传输代码
├── 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							//组网
│   ├── discovery							//发现
│   ├── frame								//框架
│   └── transmission						//传输
├── tests
│   ├── adapter
│   ├── BUILD.gn
│   ├── core
│   ├── include
│   └── sdk
└── tools									//工具
    ├── BUILD.gn
    └── device_info
  • 约束:
    • 设备发现需要在同二层网络中(即同交换机,同 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和tools -->> 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调用
  1. distributedhardware(分布式硬件管理),由以下几个部分组成:
    • devicemanager:DeviceManager 组件在 OpenHarmony 上提供账号无关的分布式设备的认证组网能力,并为开发者提供了一套用于分布式设备间监听、发现和认证的接口。
    • distributedcamera:分布式相机是多个设备的相机同时协同使用的能力。分布式相机部件是为分布式硬件子系统提供这一能力的部件。本部件不直接对接应用,只向分布式硬件框架子系统提供 C++ 接口。应用可以通过相机框架的接口使用分布式相机部件操作其他设备的 Camera,使用方式与本地相机一致。
    • distributedhardwarefwk:分布式硬件管理框架是为分布式硬件子系统提供信息管理能力的部件。分布式硬件管理框架为分布式硬件子系统提供统一的硬件接入、查询和使能等能力。
    • distributedscreen:分布式屏幕是一种屏幕虚拟化能力,支持用户指定组网认证过的其他 OpenHarmony 设备的屏幕作为 Display 的显示区域。在分布式硬件子系统中,分布式屏幕组件提供跨设备屏幕能力调用,为 OpenHarmony 操作系统提供系统投屏、屏幕镜像、屏幕分割等能力的实现。
  2. tools(分布式软总线工具),提供打印本地设备信息和分布式软总线上发现的远程节点信息;
  3. 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 建立,配置,管理的接口
  4. 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:软总线的权限配置
  5. softbus_adapter,软总线适配层,对接底层系统接口(kernel),对接 ssl 加密通道(mbedtls 或 openssl),并为核心服务提供功能实现;
  6. 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)

总结

  1. 软总线服务依赖于监听系统事件和网络扫描(coap,br,ble)进行设备发现和认证后的设备连接;
  2. 软总线服务不对应用层直接提供调用接口,通过分布式设备管理提供 NAPI 接口供应用层调用;

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/539016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QA测试开发工程师面试题满分问答11: web前端页面视频组件无法播放如何定位bug

当 web 前端页面的视频组件无法播放时,可以从以下维度进行分析和定位可能的 bug,分析维度包括但不限于:前端功能点、缓存、异常、后端功能点、资源占用、并发、网络等: 前端功能点: HTML5 视频支持:检查视频…

更换淘宝镜像地址,旧的已经失效(https://registry.npm.taobao.org )

旧的镜像地址:npm install --registryhttps://registry.npm.taobao.org 新的镜像地址:npm install --registryhttps://registry.npmmirror.com

【Python细类】全局日志调试模式

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

DMA的认识

DMA介绍 Q:什么是DMA? DMA( Direct Memory Access,直接存储器访问 ) 提供在 外设与内存 、 存储器和存储器 、 外设 与外设 之间的 高速数据传输 使用。它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU ,在这个时间中&am…

超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯片

产品概述 DP32RF002是深圳市动能世纪科技有限公司研制的基于ARMCortex-MO内核的超低功耗 高性能的、单片集成(G)FSK/OOK 无线收发机的32位SoC芯片。工作于200 ~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频…

BoostCompass(建立正排索引和倒排索引模块)

阅读导航 一、模块概述二、编写正排索引和倒排索引模块✅安装 jsoncpp✅Jieba分词库的安装1. 代码基本框架2. 正排索引的建立3. 倒排索引的建立 三、整体代码⭕index.hpp 一、模块概述 这个模块我们定义了一个名为Index的C类,用于构建和维护一个文档索引系统。该系…

微信小程序 uniapp+vue城市公交线路查询系统dtjl3

小程序Android端运行软件 微信开发者工具/hbuiderx uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 前端:HTML5,CSS3 VUE 后端:java(springbootssm)/python(flaskdja…

Uniapp+基于百度智能云完成AI视觉功能(附前端思路)

本博客使用uniapp百度智能云图像大模型中的AI视觉API(本文以物体检测为例)完成了一个简单的图像识别页面,调用百度智能云API可以实现快速训练模型并且部署的效果。 uniapp百度智能云AI视觉页面实现 先上效果图实现过程百度智能云Easy DL训练图…

【Python】什么是pip,conda,pycharm,jupyter notebook?conda基本教程

pip--conda--pycharm--jupyter notebook 🍃pip🍃conda🍃Pycharm🍃jupyter notebook🍃Conda基本教程☘️进入base环境☘️创建一个新的环境☘️激活环境☘️退出环境☘️查看电脑上都安装了哪些环境☘️删除已创建的项目…

时间序列分析 #ARMA模型的识别与参数估计 #R语言

掌握ARMA模型的识别和参数估计。 原始数据在文末!!! 练习1、 根据某1915-2004年澳大利亚每年与枪支有关的凶杀案死亡率(每10万人)数据(题目1数据.txt),求: 第1小题&…

Vim:强大的文本编辑器

文章目录 Vim:强大的文本编辑器Vim的模式命令模式常用操作光标移动文本编辑查找和替换 底行命令模式常用操作Vim的多窗口操作批量注释与去注释Vim插件推荐:vimforcpp结论 Vim:强大的文本编辑器 Vim,代表 Vi IMproved,…

【python】图像边缘提取效果增强方法-高斯模糊

一、介绍 高斯模糊是一种常用的图像处理技术,用于减少图像中的噪声和细节。它通过对图像中的每个像素点进行加权平均来实现模糊效果。具体而言,高斯模糊使用一个高斯核函数作为权重,对每个像素点周围的邻域进行加权平均。这样可以使得每个像…

软件开发安全备受重视,浙江某运营商引入CWASP认证课程,

​浙江省某大型运营商是一家实力雄厚、服务优质的通信运营商,致力于为全省用户提供优质、高效的通信服务。数字时代,该运营商顺应信息能量融合发展趋势,系统打造以5G、算力网络、能力中台为重点的新型信息基础设施,夯实产业转型升…

npm install 报 ERESOLVE unable to resolve dependency tree 异常解决方法

问题 在安装项目依赖时,很大可能会遇到安装不成功的问题,其中有一个很大的原因,可能就是因为你的npm版本导致的。 1.npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 2.ERESOLVE unable to resolve dependenc…

【力扣】17.04.消失的数字

这道题的题目意思就是从0-n中的数字中找出缺失的那一个,n是数组的长度,因此我的想法就是先将数组进行排序,往sort()里面一扔,完了以后看前一个与后一个之差中哪个不是等于1的,就求出来即可。 法…

STM32学习和实践笔记(10): Systick定时器介绍

1.SysTick定时器介绍 sysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个外设,被嵌入在 NVIC中。(NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能) 它是一个24位(注…

javaweb day29

事务 写法 事务的四大特性

【C++题解】1027 - 求任意三位数各个数位上数字的和

问题:1027 - 求任意三位数各个数位上数字的和 类型:基础问题 题目描述: 对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 S 。 输入: 输入一行,只有一个整数 x(100≤x≤999) 。 输出&…

三种网络安全行业整合模式深度解读

注:本文写于PANW更新及其引发的所有关于平台化的讨论之前几周。之后,这篇文章没有经过编辑,我相信它在今天仍然和以前一样具有现实意义。 在过去几年里,我一直在讨论网络安全行业的复杂性、细微差别和错综复杂性。在讨论过程中&am…

力扣2923、2924.找到冠军I、II---(简单题、中等题、Java、拓扑排序)

目录 一、找到冠军I 思路描述: 代码: 二、找到冠军II 思路描述: 代码: 一、找到冠军I 一场比赛中共有 n 支队伍,按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足…