基于分布式软总线扩展生态互联

背景简介

openEuler秉承着打造“数字化基础设施操作系统”的愿景,为促进与OpenHarmony生态的合作与互通,实现端边领域的互通和协同,首次在嵌入式领域引入分布式软总线技术。

分布式软总线是OpenHarmony社区开源的分布式设备通信基座,为设备之间的互通互联提供统一的分布式协同能力,实现设备无感发现和高效传输。OpenHarmony主要面向强交互等需求的智能终端、物联网终端和工业终端。openEuler主要面向有高可靠、高性能等需求的服务器、边缘计算、云和嵌入式设备,二者各有侧重。通过以分布式软总线为代表的技术进行生态互通,一起实现“1+1>2”的效果,支撑社区用户开拓更广阔的行业空间。

分布式软总线工作原理和流程介绍可参考:openEuler分布式软总线

环境准备

硬件设备

设备名称操作系统说明
树莓派 4BopenEuler22.03-LTS-SP1安装openEuler操作系统的树莓派
DAYU200 rk3568开发板openHarmony 3.1 Release安装openHarmony操作系统的开发板

软件环境

配置项下载路径使用说明
openEuler22.03-LTS-SP1https://www.openeuler.org/zh/download/openEuler操作系统,下载raspi_img路径中对应的image,用于烧录到树莓派,烧录可参考:树莓派openEuler的安装
openHarmony 3.1 Releasehttps://gitee.com/openharmony/manifest.gitopenHarmony操作系统,下载、编译、烧录指导:标准系统入门
HUAWEI DevEco Studiohttps://developer.harmonyos.com/cn/develop/deveco-studio#downloadopenHarmony应用开发编辑器,使用指导:DevEco Studio使用指南(openHarmony),本文档中代码需使用OpenHarmony SDK 9

代码获取

该文档使用两台设备进行生态互联演示:一台树莓派(openEuler)和一台RK3568开发板(openHarmony)。

openEuler侧(树莓派)代码获取

# openEuler侧(树莓派)操作均在树莓派中进行,下同。

# 服务端软件包已集成至openEuler22.03-LTS-SP1系统中,所以可直接使用如下命令进行安装:

dnf install dsoftbus -y

# 客户端代码可使用“项目简介”中“openEuler分布式软总线”中的“softbus_client_main.c”

openHarmony侧(RK3568开发板)代码获取

# openHarmony侧(RK3568开发板)操作均在windowns机器上进行,下同。

# 分布式软总线服务端能力已集成到openHarmony 3.1 Release镜像中,所以无需手动获取服务端代码。

# 客户端代码使用“Native C++”工程编写,可使用git命令下载参考代码。代码说明在仓库的README.md中。

git clone https://gitee.com/liheavy/softbus_client_app.git

代码编译

openEuler侧(树莓派)代码编译

# 安装dsoftbus后,将softbus_client_main.c保存到任意路径下,使用如下gcc命令进行编译,编译成功后会在路径下生成softbus_client_main可执行文件,添加执行权限:

gcc softbus_client_main.c -I/usr/include/dsoftbus/ -L /usr/lib64 -lsoftbus_client.z -lboundscheck -o softbus_client_main

chmod u+x softbus_client_main

openHarmony侧(RK3568开发板)代码编译

  • 首先需要根据“环境准备”中 HUAWEI DevEco Studio 配置指导将 IDE 环境配置完成。

  • 使用 DevEco 将下载的"softbus_client_app/softbus_client_sample"参考代码打开,DevEco 将会根据配置文件自动完成项目初始化。

    初始化完成后需要生成项目的签名文件:File –>Project Structure –> Project –> Signing Configs –>Automatically generate signature

    image-20221201101959764

  • 由于 openHarmony SDK 9 暂未提供分布式软总线的应用 API,所以该项目直接在应用中使用分布式软总线服务的 API ,需要将依赖的 so文件(libsoftbus_client.z.so、libsec_shared.z.so)拷贝到本地openHarmony SDK 的动态库路径中。so 文件会随源码一起下载到本地(required_so文件夹中);也可通过hdc_std工具拷贝RK3568中的两个 so 文件,so 文件路径/lib/xxx.so。

    本地openHarmony SDK安装路径可通过File –> Settings –> OpenHarmony SDK查看

    image-20221201103709581

    将libsoftbus_client.z.so、libsec_shared.z.so拷贝到 “OpenHarmony SDK安装路径/native/x.x.x.x/sysroot/usr/lib/arm-linux-ohos/“路径中。

    完成后便可在DevEco中进行代码编译 Build –> Build Hap(s)/App(s) –> Build Hap(s) 。

    image-20221201111227158

代码运行

前置准备

连接网络

两台设备需要在同一局域网内,两台设备的 ip可以相互 ping 通,可在各自操作系统中使用ifconfig查看ip。

openEuler侧(树莓派)

  • 启动分布式软总线服务

    # dsoftbus会提供softbus_server_main命令,可直接执行
    
    softbus_server_main
    

openHarmony侧(RK3568开发板)

  • 电脑连接 RK3568 开发板

    使用 USB 线一端连接 RK3568 开发板的 “OTG” 类型的 USB 接口,一端连接电脑的 USB 接口。打开 DevEco,界面右上方设备列表识别到开发板即为连接成功。

    image-20221201115003525

  • 修改分布式软总线权限配置文件

    由于 openHarmony 分布式软总线服务对使用其功能的应用有权限限制。故运行 demo 需要修改分布式软总线权限配置文件。

    # 可使用hdc_std工具进行权限配置文件替换,hdc_std工具会在openHarmony SDK安装时一起安装,安装路径为:
    
    OpenHarmony SDK安装路径(可根据上一章指导,通过DevEco查看)/toolchains/x.x.x.x/hdc_std.exe
    
    # 由于RK3568中分布式软总线权限配置文件为只读模式,所以需要使用如下命令将系统文件修改为可读可写模式:
    
    hdc_std.exe shell "mount -o remount,rw /"
    
    # 如下使用softbus_client_app仓库中softbus_trans_permission.json替换RK3568中对应的文件。
    
    hdc_std.exe file send softbus_trans_permission.json /system/etc/communication/softbus/
    
  • 重启分布式软总线服务

    # 使用如下命令重启分布式软总线服务,使修改的权限配置文件生效。
    
    ps -ef | grep softbus_server | grep -v grep
    
    kill -9 上面查询到的进程号
    

设备认证

openHarmony 设备和 openEuler 设备在组网过程中,需要两台设备提前将对方添加为可信设备。所以在两台设备互联互通之前,需要通过 Hichain 模块进行认证。详情请参考可信设备添加,如下使用“ping码弹窗”方式认证的demo演示,以下操作均在树莓派中进行操作。

  • 依赖动态库软连接

    # 该方式需要依赖libsec_shared.z.so,该动态库在openEuler的dsoftbus中被替换为libboundscheck.so,所以需要通过建立软连接的方式使用libsec_shared.z.so。
    
    ln -s /usr/lib64/libboundscheck.so /usr/lib64/libsec_shared.z.so
    
  • 运行认证客户端

    # 认证客户端demo可执行文件同样在softbus_client_app仓库中,hichain_sample—>devicemanager
    
    chomd u+x devicemanager
    ./devicemanager
    

    根据提示输入“l”列出同一局域网内设备。

    image-20221201145904897

    根据提示输入 openHarmony 设备编号进行认证,输入后在 RK3568 开发板中会弹出手动确认弹窗“是否允许对端设备连接”,点击“允许”,在树莓派侧再输入“l”,会发现设备的状态从“discovery”变成了“online”,表示认证成功。

    image-20221201150148988

设备通信

  • openHarmony侧(RK3568开发板)客户端烧录、运行。

    电脑连接 RK3568 开发板,点击 DevEco 上方的“Run”按钮。

    image-20221201151951393

    烧录结束后 RK3568 将直接运行 APP。

    image-20221130193253259

  • openEuler侧(树莓派)发送数据

    # 直接运行“代码编译”阶段编译出的softbus_client_main可执行文件
    
    ./softbus_client_main
    

    运行后会显示组网设备:

    image-20221201162316137

    根据提示输入“c”:

    image-20221201163115659

    根据提示输入openHarmony设备的编号:

    image-20221201163310745

​ 此时在 RK3568 开发板屏幕上方将显示接收到的字符串:

  • openHarmony侧(RK3568开发板)展示终端信息:

    点击app页面中的“刷新”图标,会显示与该设备连接的终端设备,点击终端图标将会显示设备基本信息。

    终端信息

  • openHarmony侧(RK3568开发板)发送数据:

    点击app页面“发送数据”按钮,将会向openEuler设备发送一条数据。

发送数据

​ 在openEuler侧(树莓派),将会展示接收到的信息。

image-20221201165948378

​ 至此,openEuler和openHarmony通过分布式软总线互联互通demo演示完成。

六、总结

该文档主要演示了 openHarmony 设备和 openEuler 设备如何通过分布式软总线进行互联互通。服务端代码正在持续优化,以支持更多分布式场景;客户端所用代码均属于 demo,任需优化:如openHarmony APP调用分布式软总线的方式,标准流程为开发 System Ability 来调用分布式软总线服务端 API,集成到 SDK 中并提供 API 给APP 进行调用,由于时间关系采用 APP 直接调用分布式软总线 API 的方式,欢迎各位开发爱好者参与,一起丰富openEuler的嵌入式能力。

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。