Google 致力于为黑人社区推动种族平等。查看具体行动

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

1. 简介

5abd22afa2f2ee9a.png

什么是 Thread、OpenThread、OTNS 和 Silk?

Thread 是一种基于 IP 的低功耗无线网格网络协议,可实现从设备到设备的安全通信,以及设备到云的通信。线程网络可以适应拓扑变化,以避免单点故障。

Google 发布的 OpenThread 是 Thread 的开源实现。虽然线程占用的空间较小且占用的内存较少,但 OpenThread 支持线程规范中定义的所有功能。

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

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

学习内容

  • OpenThread 的功能验证框架:Silk
  • 为启用了 OTNS 功能的真实设备构建 OpenThread
  • 使用 OTNS-Web 界面监控通过运行 Silk 测试用例而创建的线程网络的状态

此 Codelab 重点介绍如何在 OTNS 中使用 Silk。不包含 Silk 和 OTNS 的其他功能。

所需条件

硬件:

  • 6 个北欧半导体 nRF52840 开发板
  • 6 条用于连接板的 USB 转 Micro-USB 线
  • USB 集线器

软件:

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

前提条件:

2. 前提条件

完成之前的基本 Codelab

检查软件包前提条件

确保满足所有前提条件。

  1. 运行 which otns 以检查 otns 可执行文件是否可在 $PATH 中搜索。
  2. 运行 which wpantund 以确保 wpantund 可用。
  3. 确保 ARM GNU 工具链、J-Link 和 nrfjprog 软件包都可用。
  4. 确保可以生成 OpenThread 二进制文件,并在 openthread 文件夹下运行 make -f examples/Makefile-nrf52840

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

3.丝 Si 设置

如需克隆 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

Silk 中安装有一个名为 usbinfo 的工具,该工具可用于查找接口序列号和 USB 接口编号。DutSerial 是印在芯片上的 SN 号码,或者由 usbinfo 显示,适用于 J-Link 产品。

[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 可让用户模拟线程网络。要将其用作实际物理网络的可视化工具,请使用以下命令:

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 将 OTNS 消息发送到 localhost

例如,用户可以使用以下对 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. 恭喜

恭喜,您已在物理线程设备上成功运行了 Silk 测试,并使用 OTNS 进行了可视化!

您使用刷入了采用 OTNS 支持的固件的开发板执行 Silk 测试。板向 Silk 服务器报告其状态,该服务器监控和聚合所有这些日志,并将其与其他测试信息一起发送到 OTNS 服务。在实时模式下运行的 OTNS 会在网页上直观呈现线程网络。

后续步骤

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

更多详情

查看 openthread.ioSilk 提供的各种 OpenThread 资源。

参考文档