简析OpenHarmony软总线能力

news2025/1/11 22:49:26

分布式软总线是 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.鸿蒙南向开发方向

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Baichuan-7B-chat WebDemo 部署调用

Baichuan-7B-chat WebDemo 部署调用 Baichuan2 介绍 Baichuan 2 是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。 环境准备 在autodl平台中租一…

高并发高性能接口中,异步打印并采集业务日志的实现方案

一、背景 高并发接口中,为了提高接口的高性能,在需要保存审计及操作记录的时候,往往有以下常见方案: 保存到redis数据库异步保存到mysql/mongodb/es等数据库logger打印业务日志,采集与展示则交由elk模块 对于第一种…

【MATLAB源码-第4期】基于MATLAB的1024QAM误码率曲线,以及星座图展示。

1、算法描述 正交幅度调制(QAM,Quadrature Amplitude Modulation)是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度(π/2)的正弦波,因此被称作正交载波。这种调制方式因此而得…

福建单航次最大批量汽车“出海”

3月12日这一天,在福州海关的严密监管下,共有4000辆上汽名爵品牌的汽车被高效有序地装载到“安吉智慧”号滚装船上,这批车辆即将启程前往荷兰、埃及、英国等多个海外市场。在这批出口汽车中,新能源车型占据了显著的比例&#xff0c…

FFmpeg 框架分析

1 概述 按照DirectShow 对播放器模块的划分,一个完整的播放器应该需要获得以下四个模块支持: Source Filter : 数据源,可以是本地文件fopen, 也可以是网络文件,http,rtp,rtmp 等等 Demux Fliter: 解复用,下载的数据是带容器封装…

Java | Leetcode Java题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> quadruplets new ArrayList<List<Integer>>();if (nums null || nums.length < 4) {return…

循环单链表算法库

学习贺老师数据结构 数据结构之自建算法库——循环单链表_循环单链表 csdn-CSDN博客​​​​​​ 整理总结出的循环单链表算法库 v1.0 : 基本实现功能 v2.0(2024.4.6): 修复Delete_SpecificLocate_CyclicList()删除节点函数bug,添加验证删除节点是否超范围判断 目录 1.主要功能…

CSS设置文本

目录 概述&#xff1a; text-aling: text-decoration: text-transform: text-indent: line-height: letter-spacing: word-spacing: text-shadow: vertical-align: white-space: direction: 概述&#xff1a; 在CSS中我们可以设置文本的属性&#xff0c;就像Word文…

测开面经(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统&#xff0c;作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史&#xff0c;以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制&#xff1a;Git可以记录每次代码更改的…

Linux的学习之路:8、Linux调试器-gdb使用

摘要 本章主要是说一下gdb的使用&#xff0c;以及把使用指令放入放个指令手册。 目录 摘要 一、背景 二、使用 1、产生debug文件 2、进入gdb 3、使用指令 三、思维导图 一、背景 Linux调试器gdb的背景主要涉及到Linux程序发布方式和调试需求。 在Linux中&#xff0c…

加速杂交水稻走向世界 政协委员建议在湖南设立一“协会”一“中心”

中新网北京3月8日电 (刘曼)针对中国杂交水稻海外“飘香”的现象&#xff0c;全国政协委员、湖南省政协副主席、民盟湖南省委会主委何寄华建议&#xff0c;在湖南建立杂交水稻国际合作交流协会、设立杂交水稻国际科技合作技术转移中心&#xff0c;支持杂交水稻走向世界。 全国政…

mysql主从复制Slave_SQL_Running: No

1、SHOW SLAVE STATUS \G; Slave_SQL_Running: No 解决方案&#xff1a; 重新同步主库和从库的数据 1、从库先停掉slave stop slave; 2、在主库查看此时的日志文件和位置 show master status; 3、在从库中执行 change master to master_host192.168.2.177,master_userslave…

【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Artificial Bee Colony&#xff08;ABC&#xff09;算法是一种模仿蜜蜂觅食行为的优化算法&#xff0c;它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…

C语言进阶课程学习记录 - 字符串与常见问题分析

C语言进阶课程学习记录 - 字符串与字符串问题分析 字符串实验-字符串定义实验-字符串作为字符数组使用实验-字符串长度判断小结 字符串问题分析实验-snprintf实验-字符数组,strlen,sizeof实验-字符串相等比较实验-循环右移 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&…

浅入浅出之nginx

目录 工作流程正向代理概念 反向代理概念 nginx反向代理配置文件介绍解释作用 参考文章Nginx 常用指令和操作启动 Nginx测试配置文件快速关闭 Nginx优雅关闭 Nginx重载配置文件查看版本查看编译时的参数查看进程配置用户访问日志配置错误日志设置 web 根目录配置 server 块配置…

3.反转链表

1.题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&…

matplotlib手动调用默认配色

matplotlib 画图有个默认配色方案&#xff0c;在画不同图时会保持一致。如&#xff1a; import numpy as np import matplotlib.pyplot as plt# 图 1 数据 x np.arange(12).astype(np.float32) 1 y1 np.log(x) y2 1 / x y3 np.sin(x) # 图 2 数据 a np.random.randn(200…

光威神策PRO PCIe 5.0 SSD发布,国产固态硬盘进入10G俱乐部

全球半导体供应链的紧张局势和闪存资源的短缺让许多行业都面临着不小的压力 &#xff0c; 连带的也让消费者难以获取物美价廉的闪存产品 。但是&#xff0c;总有一些企业能够逆流而上&#xff0c; 像是 光威科技这家国产存储品牌&#xff0c; 最近就给国内消费者 带来了一个惊喜…

递归、搜索与回溯算法:⼆叉树中的深搜

⼆叉树中的深搜 深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的 ⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历 完毕&#xff…

工业数据采集平台:从起源到崛起的辉煌历程

关键词&#xff1a;工业数据采集平台, 工业数据采集, 工业数据采集分析,智能化 在当今数字化的时代&#xff0c;工业领域也在经历着深刻的变革。而工业数据采集平台的发展历程&#xff0c;正是这场变革中的重要篇章。 回首过去&#xff0c;工业数据采集曾是一个繁琐而复杂的过…