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