1. 簡介
什麼是 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. 必要條件
完成先前的基本程式碼研究室
- Thread Primer:您需要瞭解 Thread 的基本概念,才能瞭解本程式碼研究室的內容。
- 使用 nRF52840 主機板和 OpenThread 建構 Thread 網路。本程式碼研究室假設您已成功建構 Thread 網路。
- 使用 OTNS 模擬 Thread Networks。本程式碼研究室假設您已成功執行 OTNS 工具。
正在檢查套件必要條件
確認是否符合所有必備條件。
- 執行
which otns
,檢查otns
執行檔是否可在$PATH
中搜尋。 - 執行
which wpantund
,確認wpantund
可用。 - 確認 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]
區段中的 LayoutCenter
和 LayoutRadius
欄位會定義裝置在網路 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
程序來模擬網路。瀏覽器應會自動開啟包含空白畫布的視覺化頁面。
6. 執行支援 OTNS 的絲綢測試案例
Silk 是全自動化的測試平台,可透過真實裝置驗證 OpenThread 功能、功能和系統效能。如要瞭解使用方式,請前往 README 專案的操作說明。
位於 silk/unit_tests
的 silk_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 上將顯示成組網路的拓撲視覺化。
左上角顯示圖表統計資料、OT 版本和測試標題。記錄視窗的左下角有控制項,會顯示在右側。一開始,系統會新增節點,但沒有建立任何網路。隨著測試的進展,每個節點的模式和角色都會改變,並形成連結。
7. 恭喜
恭喜,您已成功在實體 Thread 裝置上執行絲綢測試,並使用 OTNS 以視覺化方式呈現結果!
您使用開發板執行了絲綢測試,而這些開發板採用的韌體支援 OTNS。留言板會向 Silk 伺服器回報狀態,該伺服器會監控並彙整所有主機,再將它們與其他測試資訊傳送至 OTNS 服務。在實際模式下執行的 OTNS 會以視覺化方式呈現網頁介面上的 Thread 網路。
後續步驟
嘗試執行 Silk 套件中的其他 OpenThread 測試案例。
延伸閱讀
歡迎前往 openthread.io 和 Silk 參考各種 OpenThread 資源。