网状调试

在 GitHub 上查看源代码

Commissioner 和 Joiner

调试需要一台具有调试器角色的设备和一台具有加入者角色的设备。专员可以是现有 Thread 网络中的 Thread 设备,也可以是 Thread 网络外部的设备(例如手机),但必须能够执行专员角色。加入者是希望加入 Thread 网络的设备。

Thread 委托方用于对设备进行身份验证,以将其加入网络。它不会转移或拥有 Thread 网络凭据(例如网络密钥)。

本指南介绍了在没有外部调试器或边界路由器的情况下进行的基本网内调试。如需了解如何使用外部调试器,请参阅外部 Thread 调试

如需查看使用虚拟设备进行调试的示例,请参阅 OpenThread 模拟 Codelab

启用角色

如需启用 Commissioner 和 Joiner 角色,请使用以下 cmake 选项:

选项 说明
-DOT_COMMISSIONER=ON 启用“专员”角色
-DOT_JOINER=ON 启用加入者角色

例如,如需构建 CC2538 示例平台以仅用作加入设备,请执行以下操作:

./script/build -DOT_JOINER=ON

将每个二进制文件刷入所需设备。一个设备充当调试器,另一个充当加入器。

有关构建和刷写受支持平台的具体说明,请参阅每个平台的 OpenThread 代码库。如需查找代码库,请访问 OpenThread GitHub 组织

创建网络

在充当调试器的设备上创建网络:

dataset init new
Done
dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: d63e8e3e495ebbc3
Mesh Local Prefix: fd3d:b50b:f96d:722d/64
Network Key: dfd34f0f05cad978ec4e32b0413038ff
Network Name: OpenThread-8f28
PAN ID: 0x8f28
PSKc: c23a76e98f1a6483639b1ac1271e2e27
Security Policy: 0, onrcb
Done
dataset commit active
Done
ifconfig up
Done
thread start
Done

等待几秒钟,然后验证设备是否已成为 Thread Leader:

state
leader
Done

开始担任专员角色

在同一设备上,启动 Commissioner 角色:

commissioner start
Done

使用 * 通配符可允许任何具有指定加入者凭据的加入者委托加入网络。联接器凭据用于(与扩展 PAN ID 和网络名称一起)为设备生成预共享密钥 (PSKd)。然后,在 Thread 调试期间,使用 PSKd 对设备进行身份验证。加入者凭据应对于每个设备都是唯一的。

commissioner joiner add * J01NME
Done

仅限特定加入者

如需将调试限制为特定加入设备,请使用 eui64 参数,该参数是设备出厂时分配的 IEEE EUI-64。

在充当加入者的设备上,获取 EUI-64:

eui64
2f57d222545271f1
Done

在 Commissioner 设备上使用该值,而不是 commissioner joiner 命令中的 * 通配符:

commissioner joiner add 2f57d222545271f1 J01NME
Done

启动加入者角色

在充当 Joiner 的设备上,执行恢复出厂设置,然后使用 Commissioner 上指定的相同 Joiner 凭据启用 Joiner 角色:

factoryreset
ifconfig up
Done
joiner start J01NME
Done

等待几秒钟以确认:

Join success!

加入者设备已成功通过身份验证,并已从专员设备收到 Thread 网络凭据。

现在,在加入者设备上启动 Thread:

thread start
Done

验证身份验证

检查加入者设备上的状态,以验证其是否已加入网络。在两分钟内,状态从子设备过渡到路由器:

state
child
Done
...
state
router
Done