Embedded SIG
分布式軟總線
- 特性介紹?-
背景
openEuler秉承著打造“數(shù)字化基礎設施操作系統(tǒng)”的愿景,為促進與OpenHarmony生態(tài)的合作與互通,實現(xiàn)端邊領域的互通和協(xié)同,首次在嵌入式領域引入分布式軟總線技術。
分布式軟總線是OpenHarmony社區(qū)開源的分布式設備通信基座,為設備之間的互通互聯(lián)提供統(tǒng)一的分布式協(xié)同能力,實現(xiàn)設備無感發(fā)現(xiàn)和高效傳輸。
OpenHarmony主要面向強交互等需求的智能終端、物聯(lián)網(wǎng)終端和工業(yè)終端。openEuler主要面向有高可靠、高性能等需求的服務器、邊緣計算、云和嵌入式設備,二者各有側重。通過以分布式軟總線為代表的技術進行生態(tài)互通,以期實現(xiàn)“1+1>2”的效果,支撐社區(qū)用戶開拓更廣闊的行業(yè)空間。
架構
軟總線的主要架構如下:
軟總線主體功能分為發(fā)現(xiàn)、組網(wǎng)、連接和傳輸四個基本模塊,實現(xiàn):
· 即插即用:快速便捷發(fā)現(xiàn)周邊設備。
· 自由流轉:各設備間自組網(wǎng),任意建立業(yè)務連接,實現(xiàn)自由通信。
· 高效傳輸:通過WIFI、藍牙設備下軟硬件協(xié)同最大化發(fā)揮硬件傳輸性能。
軟總線南向支持標準以太網(wǎng)通信,同時后續(xù)可持續(xù)拓展WIFI、藍牙等多種通信方式。并為北向的分布式應用提供統(tǒng)一的API接口,屏蔽底層通信機制。
軟總線依賴于設備認證、IPC、日志和系統(tǒng)參數(shù)(SN號)等周邊模塊,嵌入式系統(tǒng)中將這些依賴模塊進行了樣板性質的替換,以實現(xiàn)軟總線基本功能。實際的周邊模塊功能實現(xiàn),還需要用戶根據(jù)實際業(yè)務場景進行豐富和替換,以拓展軟總線能力。
- 應用指南?-
部署示意
軟總線支持局域網(wǎng)內多設備部署,設備間通過以太網(wǎng)通信。單設備上分為server和client,二者通過IPC模塊進行交互。
注意:
當前IPC模塊和SN號等系統(tǒng)參數(shù),嵌入式版本提供的僅為參考模板,還無法支持多節(jié)點和多client部署。用戶可根據(jù)實際業(yè)務場景進行IPC模塊和SN號系統(tǒng)參數(shù)進行功能豐富,以拓展軟總線部署能力。
服務端啟動
服務端主程序為softbus_server_main,執(zhí)行該主程序既可拉起軟總線服務端。
當服務端被拉起時,會主動通過名為ethX的網(wǎng)絡設備進行coap廣播,若探測到對端設備存在則會啟動自組網(wǎng)。
客戶端API
頭文件在sdk和initrd中均存放在/usr/include/dsoftbus/下,其中:
1. discovery\_service.h:發(fā)現(xiàn)模塊頭文件,支持應用主動探測和發(fā)布的API如下:
當服務端被拉起時,會主動通過名為ethX的網(wǎng)絡設備進行coap廣播,若探測到對端設備存在則會啟動自組網(wǎng)。
2. softbus\_bus\_center.h:組網(wǎng)模塊頭文件,支持獲取組網(wǎng)內設備信息API如下:
3. session.h:連接/傳輸模塊頭文件,支持創(chuàng)建session和數(shù)據(jù)傳輸API如下:
各API參數(shù)詳見頭文件描述。
應用示例
1.編寫客戶端程序
編寫客戶端程序依托于Embedded版本發(fā)布的SDK,按如下步驟進行SDK環(huán)境使用準備。
1.1 安裝SDK
執(zhí)行SDK自解壓安裝腳本
根據(jù)提示輸入工具鏈的安裝路徑,默認路徑是/opt/openeuler//;若不設置,則按默認路徑安裝;也可以配置相對路徑或絕對路徑。
舉例如下:
1.2 設置SDK環(huán)境變量
前一步執(zhí)行結束最后已打印source命令,運行即可。
1.3 查看是否安裝成功
運行如下命令,查看是否安裝成功、環(huán)境設置成功。
?
![pYYBAGLbrF6AXaZsAAAeNVH9g0U401.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrF6AXaZsAAAeNVH9g0U401.jpg)
?
接下來編寫客戶端程序。
創(chuàng)建一個main.c文件,源碼如下:
?
![poYBAGLbrIGAdXFWAAFRSZEGki8000.jpg](https://file.elecfans.com/web2/M00/55/2F/poYBAGLbrIGAdXFWAAFRSZEGki8000.jpg)
![pYYBAGLbrIqAE8dqAAAqCo0hrQQ491.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrIqAE8dqAAAqCo0hrQQ491.jpg)
?
創(chuàng)建一個`CMakeLists.txt`文件,源碼如下:
?
![pYYBAGLbrJyACryvAABhOnLgYVI162.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrJyACryvAABhOnLgYVI162.jpg)
?
編譯客戶端
?
![pYYBAGLbrK2AGDZhAAAszvSfyaU078.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrK2AGDZhAAAszvSfyaU078.jpg)
?
編譯完成后會得到`dsoftbus_hello`。
2. 構建QEMU組網(wǎng)環(huán)境
在host中創(chuàng)建網(wǎng)橋br0
啟動qemu1
注意
首次運行如果出現(xiàn)如下錯誤提示:
![pYYBAGLbrSSAf5BSAABJIpm2wZU739.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrSSAf5BSAABJIpm2wZU739.jpg)
?
則需要向指示的文件添加“allow br0”
?
![pYYBAGLbrTaARmg9AAAygLnFJQU149.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrTaARmg9AAAygLnFJQU149.jpg)
?
啟動qemu2
?
![pYYBAGLbrVCAOsBnAACM1tjCz6s219.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrVCAOsBnAACM1tjCz6s219.jpg)
?
注意
qemu1與qemu2的mac地址需要配置為不同的值。
配置IP
分別在host、qemu1、qemu2使用ping進行測試,確保qemu1可以ping通qemu2。
3. 啟動分布式軟總線
分別在qemu1和qemu2的根目錄下運行`dsoftbus_hello`,將得到如下輸出:
qemu1和qemu2分別輸出了發(fā)現(xiàn)的對方設備的基礎信息。
編譯指導
編譯依托于Embedded版本發(fā)布的容器鏡像,請參考容器構建指導進行容器環(huán)境準備。
1. 下載腳本所在倉庫(例如下載到`src/yocto-meta-openeuler`目錄下)
?
![pYYBAGLbrfGAbqQvAABMBGAxmfM760.jpg](https://file.elecfans.com/web2/M00/55/CC/pYYBAGLbrfGAbqQvAABMBGAxmfM760.jpg)
?
2. 執(zhí)行下載腳本
?
下載最新軟總線代碼:```bashsh src/yocto-meta-openeuler/scripts/download_code.sh dsoftbus```
?
代碼默認下載到與`yocto-meta-openeuler`同級別的路徑,如需修改軟總線或者其依賴的模塊代碼可到對應路徑下查找`dsoftbus/_standard`和`yocto-embedded-tools`倉庫進行對應修改。
3. 編譯編譯腳本
編譯工作目錄名為dsoftbus/_build,編譯生成件目錄名為dsoftbus/_output,二者均默認與yocto-meta-openeuler在同級別路徑。
- 限制約束?-
1. 僅支持局域網(wǎng)下的coap發(fā)現(xiàn)。WIFI/BLE等功能在后續(xù)版本中持續(xù)支持。
2. 目前提供的IPC、SN號等軟總線的依賴模塊均為樣例,僅支持雙設備節(jié)點部署,client-server一對一部署的能力。期待后續(xù)與社區(qū)伙伴,根據(jù)實際場景共同對這些依賴模塊進行實例化。
審核編輯:劉清
評論