以視覺化方式測試 Thread 網路

1. 簡介

5abd22afa2f2ee9a.png

什麼是 Thread、OpenThread、OTNS 和 Silk?

Thread 是一種以 IP 為基礎的低功率無線網狀網路通訊協定,可保護裝置之間和裝置之間的通訊。Thread 網路可根據拓撲變更,避免單點故障。

Google 發布的 OpenThread 是 Thread 的開放原始碼實作模式。雖然 OpenThread 的程式碼大小和記憶體用量較小,仍支援執行緒規格中定義的所有功能。

OpenThread 網路模擬工具 (OTNS) 可在 posix 平台上執行模擬 OpenThread 節點,以模擬 Thread 網路。OTNS 提供易於使用的網路介面 (OTNS-Web),以視覺化方式呈現模擬的 Thread 網路,並執行相關作業。

Silk 是全自動化的測試平台,可透過真實裝置驗證 OpenThread 函式、功能和系統效能,

課程內容

  • OpenThread 的功能驗證架構:Silk
  • 為啟用 OTNS 功能的實際裝置建構 OpenThread
  • 使用 OTNS 網頁介面監控執行 Silk 測試案例而形成的 Thread 網路狀態

本程式碼研究室著重於使用 Silk 與 OTNS 搭配使用。其他功能則不在此限。

軟硬體需求

硬體:

  • 6 北歐半導體 nRF52840 開發板
  • 6 個可連接鍵盤的 USB 轉 Micro-USB 傳輸線
  • USB 集線器

軟體:

  • Linux x86_64。
  • Git
  • Go 1.11 以上版本
  • 網路瀏覽器。OTNS-Web 使用網路瀏覽器顯示模擬結果。

需求條件:

2. 必要條件

完成先前的基本程式碼研究室

正在檢查套件必要條件

確認是否符合所有必備條件。

  1. 執行 which otns,檢查 otns 執行檔是否可在 $PATH 中搜尋。
  2. 執行 which wpantund,確認 wpantund 可用。
  3. 確認 ARM GNU 工具鍊、J-Link 和 nrfjprog 套件均可使用。

注意:請參閱連結的說明文件,瞭解設定指南。必備條件 1 取自 Simulate Thread Networks using OTNS,其他則來自使用 nRF52840 主機板和 OpenThread 的 Thread 網路

3. Silk 設定

如要複製 Silk 版本並設定環境,請在來源目錄下執行下列指令:

$ git clone https://github.com/openthread/silk.git
$ cd silk
$ ./bootstrap.sh
$ sudo make install-cluster

定義硬體設定檔

如要允許 Silk 收集連結至機器的可用測試硬體資源,請以下列格式定義 hwconfig.ini 檔案:

[DEFAULT]
ClusterID: 0
LayoutCenter: 300, 300
LayoutRadius: 100

[Dev-8A7D]
HwModel: Nrf52840
HwRev: 1.0
InterfaceSerialNumber: E1A5012E8A7D
USBInterfaceNumber: 1
DutSerial: 683536778

名為 usbinfo 的工具已安裝在 Silk 中,可用來找出介面序號和 USB 介面號碼。DutSerial 是晶片印在晶片上的 SN 號碼,或由 usbinfo 針對 J-Link 產品顯示。

[DEFAULT] 區段中的 LayoutCenterLayoutRadius 欄位會定義裝置在網路 UI 上顯示時的版面配置形狀。建議您一開始就將這些值設為這裡列出的值。

隨後,此版本會為每部測試裝置定義一個區段,並提供相關硬體資訊。

4. 編譯已啟用 OTNS 的 OpenThread

建構映像檔及刷新

根據預設,OpenThread 裝置不會發出 OTNS 相關訊息。如要允許開發板發出狀態訊息,以記錄 OTNS 視覺化所需的介面,請在 OpenThread 來源目錄下執行下列指令,建立 FTD 映像檔,並將其轉換為十六進位格式。

$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive
$ cd ot-nrf528xx
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON
$ cd ./build/bin
$ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex

如要刷新 Jamboard,請按照 Build a Thread 網路程式碼研究室的步驟 4 操作,使用 nrfjprog。之後,透過 nRF USB 連接埠將所有面板連接至主機。將同一組 USB 轉 Micro-USB 傳輸線從 J-Link 連接埠拔除,並且連接到 nRF52840 開發板的 nRF USB 連接埠。因此,只要使用這 6 條連接線,即可測試執行作業。為避免麻煩,請使用 12 條連接線,並連接兩座連接埠。

5. 以實際模式執行 OTNS 伺服器

使用預設參數執行 OTNS 即可模擬 Thread 網路。如要將其做為實際實體網路的視覺化工具,請使用以下指令執行:

otns -raw -real -ot-cli otns-silk-proxy

這些引數會指示 OTNS 預期 gRPC 和 UDP 訊息描述應如何視覺化 Thread 網路,而不是執行多個 ot-cli 程序來模擬網路。瀏覽器應會自動開啟包含空白畫布的視覺化頁面。

4dd5b41bf7e71334.png

6. 執行支援 OTNS 的絲綢測試案例

Silk 是全自動化的測試平台,可透過真實裝置驗證 OpenThread 功能、功能和系統效能。如要瞭解使用方式,請前往 README 專案的操作說明。

位於 silk/unit_testssilk_run_test.py 檔案可讓您提前開始操作。執行測試案例時,Silk 提供 OTNS 支援。由於 OTNS 真實模式服務已在本機執行,因此我們只需根據輸出記錄檔、輸入測試指令碼和 hwconfig.ini 檔案的所需位置修改 silk_run_test.py 檔案即可。-s localhost 引數會指示 Silk 將 OTNS 訊息傳送至 localhost

舉例來說,如要執行名為 ot_test_form_network.py 的測試,請對 silk_run_test.py 檔案使用下列修改內容。/opt/openthread_test/ 是 Silk 記錄輸出和設定檔的預設路徑,但您可以使用任何路徑。

silk_run_test.py

import datetime
import os

from silk.tests import silk_run

RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
                  datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'

os.chdir('~/src/silk/silk/tests/')

timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')

run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'

argv = [
    'tests/silk_run.py',
    '-v2',
    '-c', CONFIG_PATH + 'hwconfig.ini',
    '-d', run_log_path,
    '-s', 'localhost',
    'ot_test_form_network.py'
]

silk_run.SilkRunner(argv=argv)

OTNS 網頁 UI 上將顯示成組網路的拓撲視覺化。

ee443b66e0a6620b.png

左上角顯示圖表統計資料、OT 版本和測試標題。記錄視窗的左下角有控制項,會顯示在右側。一開始,系統會新增節點,但沒有建立任何網路。隨著測試的進展,每個節點的模式和角色都會改變,並形成連結。

5c38e2c72519e620.png

7. 恭喜

恭喜,您已成功在實體 Thread 裝置上執行絲綢測試,並使用 OTNS 以視覺化方式呈現結果!

您使用開發板執行了絲綢測試,而這些開發板採用的韌體支援 OTNS。留言板會向 Silk 伺服器回報狀態,該伺服器會監控並彙整所有主機,再將它們與其他測試資訊傳送至 OTNS 服務。在實際模式下執行的 OTNS 會以視覺化方式呈現網頁介面上的 Thread 網路。

後續步驟

嘗試執行 Silk 套件中的其他 OpenThread 測試案例。

延伸閱讀

歡迎前往 openthread.ioSilk 參考各種 OpenThread 資源。

參考文件