长期支持版本

    社区创新版本

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

      背景简介

      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开发板)操作均在windows机器上进行,下同。
      
      # 分布式软总线服务端能力已集成到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

      代码运行

      前置准备

      配置设备ID

      openEuler侧(树莓派)

      由于当前openEuler版本的分布式软总线暂时去除了对设备管理模块的依赖,为适配和简化获取设备ID的代码,采用了读取/etc/SN文件中内容作为设备ID的方式,所以在启动分布式软总线服务侧之前需要将设备ID(自定义数字)写入/etc/SN,注意多个设备的ID不要设置成同一个值,否则可能造成认证和通信失败问题。

      # 举例设置该设备ID为1
      echo "1" >>/etc/SN
      

      连接网络

      两台设备需要在同一局域网内,两台设备的 ip可以相互 ping 通,可在各自操作系统中使用ip a查看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 模块进行认证。详情请参考可信设备添加,如下使用“pin码弹窗”方式认证的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
        
        # 在ARM环境下该方法还需要依赖/lib64/1d-linux-aarch64.so.1,否则会出现no such file的报错。
        ln -s /lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.so.1
        
      • 运行认证客户端

        # 认证客户端demo可执行文件同样在softbus_client_app仓库中,hichain_sample—>devicemanager
        
        chmod 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即可。
      文档捉虫
      编组 3备份