1. 简介
什么是 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 集线器
软件:
前提条件:
2. 前提条件
完成之前的基本 Codelab
- Thread Primer。您需要了解线程的基本概念,以便了解此 Codelab 所学的内容。
- 构建使用 nRF52840 开发板和 OpenThread 的线程网络。本 Codelab 假定您已成功构建线程网络。
- 使用 OTNS 模拟线程网络。此 Codelab 假定您已成功运行 OTNS 工具。
检查软件包前提条件
确保满足所有前提条件。
- 运行
which otns
以检查otns
可执行文件是否可在$PATH
中搜索。 - 运行
which wpantund
以确保wpantund
可用。 - 确保 ARM GNU 工具链、J-Link 和
nrfjprog
软件包都可用。 - 确保可以生成 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]
部分中的 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 可让用户模拟线程网络。要将其用作实际物理网络的可视化工具,请使用以下命令:
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 将 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. 恭喜
恭喜,您已在物理线程设备上成功运行了 Silk 测试,并使用 OTNS 进行了可视化!
您使用刷入了采用 OTNS 支持的固件的开发板执行 Silk 测试。板向 Silk 服务器报告其状态,该服务器监控和聚合所有这些日志,并将其与其他测试信息一起发送到 OTNS 服务。在实时模式下运行的 OTNS 会在网页上直观呈现线程网络。
后续步骤
尝试运行 Silk 软件包中包含的其他 OpenThread 测试用例。
更多详情
查看 openthread.io 和 Silk 提供的各种 OpenThread 资源。