使用可视化功能测试线程网络

1. 简介

5abd22afa2f2ee9a.png

什么是 Thread、OpenThread、OTNS 和 Silk?

Thread 是基于 IP 的低功耗无线网状网络协议,支持设备到设备和设备到云的安全通信。线程网络可以适应拓扑变化,以避免单点故障。

Google 发布的 OpenThread 是 Thread 的开源实现。尽管线程大小和内存占用量较小,但 OpenThread 支持线程规范中定义的所有功能。

OpenThread Network Simulator (OTNS) 可通过在 posix 平台上运行模拟的 OpenThread 节点来模拟 Thread 网络。OTNS 提供了一个易于使用的网页界面 (OTNS-Web),用于直观呈现和运行模拟 Thread 网络。

Silk 是一个完全自动化的测试平台,用于通过真实设备验证 OpenThread 功能、功能和系统性能。

学习内容

  • OpenThread 的功能验证框架:Silk
  • 在启用了 OTNS 功能的实际设备上构建 OpenThread
  • 使用 OTNS-Web 界面监控通过运行 Silk 测试用例形成的 Thread 网络的状态

此 Codelab 将重点介绍如何使用 Silk 和 OTNS。本指南不涵盖 Silk 和 OTNS 的其他功能。

所需条件

硬件:

  • 6 北欧半导体 nRF52840 开发板
  • 6 根 USB 转 Micro USB 线缆,用于连接开发板
  • USB 集线器

软件:

  • Linux x86_64。
  • Git
  • Go 1.11+
  • 网络浏览器。OTNS-Web 使用网络浏览器来显示模拟结果。

前提条件:

2. 前提条件

完成之前的基本 Codelab

检查软件包前提条件

确保满足所有前提条件。

  1. 运行 which otns 以检查 $PATH 中的 otns 可执行文件是否可搜索。
  2. 运行 which wpantund 以确保 wpantund 可用。
  3. 确保 ARM GNU 工具链、J-Link 和 nrfjprog 软件包均可用。

注意:如需设置指南,请参阅链接的文档。前提条件为使用 OTNS 模拟线程网络,其他则来自使用 nRF52840 开发板和 OpenThread 构建线程网络

3. 丝绸设置

如需克隆 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 编号,或由 J-Link 产品 usbinfo 显示。

[DEFAULT] 部分中的 LayoutCenterLayoutRadius 字段定义了当设备在网页界面上直观呈现时布局的形状。将这些值设置为此处显示的值是个不错的起点。

之后,它会为每个测试设备定义一个部分,并提供相关的硬件信息。

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

如需刷写开发板,请按照“构建线程网络”Codelab 第 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 消息描述应如何直观呈现线程网络,而不是运行多个 ot-cli 进程来模拟网络。您的浏览器应该会自动打开一个显示空白画布的可视化页面。

4dd5b41bf7e71334.png

6. 运行支持 OTNS 的 Silk 测试用例

Silk 是一个全自动化测试平台,用于通过真实设备验证 OpenThread 功能、功能和系统性能。项目 README 中的说明介绍了如何使用它。

位于 silk/unit_testssilk_run_test.py 文件可让您快速上手。运行测试用例时,Silk 会提供 OTNS 支持。由于 OTNS 实际模式服务已在本地运行,因此我们只需要修改输出文件、输入测试脚本和 hwconfig.ini 文件的 silk_run_test.py 文件。-s localhost 参数会告知 Silk 向 localhost 发送 OTNS 消息。

例如,您可以针对 silk_run_test.py 文件进行以下修改,运行名为 ot_test_form_network.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 网页界面中。

ee443b66e0a6620b.png

左上角会显示可视化图表统计信息、OT 版本和测试标题。左下角包含日志窗口的控件(如右图所示)。最初,系统会添加节点,但不会形成网络。随着测试的进行,每个节点的模式和角色都会发生变化,并形成链路。

5c38e2c72519e620.png

7. 恭喜

恭喜,您已成功在实体 Thread 设备上运行 Silk 测试,并使用 OTNS 对其进行可视化!

您还使用开发了支持 OTNS 的固件的开发板执行了 Silk 测试。该开发板负责向 Silk 服务器报告其状态,该服务器会监控并汇总所有这些组件,并会连同其他测试信息一起发送给 OTNS 服务。在真实模式下运行的 OTNS 会直观呈现网页界面上的 Thread 网络。

后续操作

尝试运行 Silk 软件包中包含的其他 OpenThread 测试用例。

深入阅读

访问 openthread.ioSilk,获取各种 OpenThread 资源。

参考文档