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 北欧半导体 nRF52840 开发板
- 6 根 USB 转 Micro USB 线缆,用于连接开发板
- USB 集线器
软件:
前提条件:
2. 前提条件
完成之前的基本 Codelab
- Thread Primer。您需要了解 Thread 的基本概念,理解此 Codelab 中所教的内容。
- 使用 nRF52840 开发板和 OpenThread 构建 Thread 网络。此 Codelab 假定您已成功构建 Thread 网络。
- 使用 OTNS 模拟线程网络。此 Codelab 假定您已成功运行 OTNS 工具。
检查软件包前提条件
确保满足所有前提条件。
- 运行
which otns
以检查$PATH
中的otns
可执行文件是否可搜索。 - 运行
which wpantund
以确保wpantund
可用。 - 确保 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]
部分中的 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
如需刷写开发板,请按照“构建线程网络”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
进程来模拟网络。您的浏览器应该会自动打开一个显示空白画布的可视化页面。
6. 运行支持 OTNS 的 Silk 测试用例
Silk 是一个全自动化测试平台,用于通过真实设备验证 OpenThread 功能、功能和系统性能。项目 README 中的说明介绍了如何使用它。
位于 silk/unit_tests
的 silk_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 网页界面中。
左上角会显示可视化图表统计信息、OT 版本和测试标题。左下角包含日志窗口的控件(如右图所示)。最初,系统会添加节点,但不会形成网络。随着测试的进行,每个节点的模式和角色都会发生变化,并形成链路。
7. 恭喜
恭喜,您已成功在实体 Thread 设备上运行 Silk 测试,并使用 OTNS 对其进行可视化!
您还使用开发了支持 OTNS 的固件的开发板执行了 Silk 测试。该开发板负责向 Silk 服务器报告其状态,该服务器会监控并汇总所有这些组件,并会连同其他测试信息一起发送给 OTNS 服务。在真实模式下运行的 OTNS 会直观呈现网页界面上的 Thread 网络。
后续操作
尝试运行 Silk 软件包中包含的其他 OpenThread 测试用例。
深入阅读
访问 openthread.io 和 Silk,获取各种 OpenThread 资源。