1. 简介
什么是 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 块 Nordic Semiconductor nRF52840 开发板
- 6 根 USB 转 Micro-USB 线缆用于连接开发板
- USB 集线器
软件:
前提条件:
2. 前提条件
完成之前的基本 Codelab
- Thread Primer(线程入门)。您需要了解 Thread 的基本概念,才能理解此 Codelab 中介绍的内容。
- 使用 nRF52840 开发板和 OpenThread 构建 Thread 网络。此 Codelab 假定您已成功构建 Thread 网络。
- 使用 OTNS 模拟 Thread 网络。此 Codelab 假定您已成功运行 OTNS 工具。
检查软件包前提条件
让我们来确保满足所有前提条件。
- 运行
which otns
以检查otns
可执行文件是否可以在$PATH
中搜索。 - 运行
which wpantund
以确保wpantund
可用。 - 确保 ARM GNU 工具链、J-Link 和
nrfjprog
软件包都可用。
注意:如需设置指南,请参阅链接的文档。前提条件 1 来自 Simulate Thread Networks using OTNS,其他技术来自 Build a Thread network with 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
Silk 中安装了一个名为 usbinfo
的工具,该工具可用于查找接口序列号和 USB 接口编号。DutSerial 是芯片上印刷的序列号或由 usbinfo
为 J-Link 产品显示的序列号。
[DEFAULT]
部分中的 LayoutCenter
和 LayoutRadius
字段定义了在网页界面中呈现设备时的布局形状。不妨从将其设为此处显示的值作为切入点。
随后,它会为每个测试设备定义一个部分,并提供相关硬件信息。
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
如需刷写开发板,请按照“构建 Thread 网络”Codelab 的第 4 步中的说明使用 nrfjprog
。然后,通过 nRF USB 端口将所有开发板连接到宿主机。您可以从 J-Link 端口拔下同一组 USB 转 Micro-USB 线,然后连接到 nRF52840 开发板的 nRF USB 端口。因此,只需这 6 根数据线即可运行测试。为避免这种麻烦,请使用 12 根数据线并连接到两个端口。
5. 在实际模式下运行 OTNS 服务器
通过使用默认参数运行 OTNS,用户可以模拟 Thread 网络。如需将其用作实际物理网络的可视化工具,请使用以下命令运行它:
otns -raw -real -ot-cli otns-silk-proxy
这些参数会指示 OTNS 接收描述应如何可视化 Thread 网络的 gRPC 和 UDP 消息,而不是运行多个 ot-cli
进程来模拟网络。您的浏览器应该会自动打开包含空白画布的可视化页面。
6. 运行支持 OTNS 的 Silk 测试用例
Silk 是一个完全自动化的测试平台,用于在真实设备上验证 OpenThread 的功能、功能和系统性能。项目 README 中的说明介绍了如何使用它。
位于 silk/unit_tests
的 silk_run_test.py
文件可让您先行一步。Silk 在运行测试用例时提供 OTNS 支持。由于 OTNS 实际模式服务已在本地运行,因此我们只需修改 silk_run_test.py
文件,使其包含输出日志文件、输入测试脚本和 hwconfig.ini
文件的所需位置。-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 网页界面中。
左上角显示了可视化统计信息、OT 版本和测试标题。左下角具有日志窗口的控件,该窗口显示在右侧。最初,添加了节点,但没有形成网络。随着测试的进行,每个节点的模式和角色会发生变化,并且会形成链接。
7. 恭喜
恭喜,您已成功在物理 Thread 设备上运行 Silk 测试,并使用 OTNS 将其可视化!
您使用刷入了支持 OTNS 的固件的开发板执行了 Silk 测试。这些开发板将其状态报告给 Silk 服务器,Sillk 服务器会监控和聚合所有板,然后将这些板与其他测试信息一起发送到 OTNS 服务。在实际模式下运行的 OTNS 可在网页界面上直观呈现 Thread 网络。
后续操作
尝试运行 Silk 软件包中包含的其他 OpenThread 测试用例。
深入阅读
您可以访问 openthread.io 和 Silk,获取各种 OpenThread 资源。