OpenThread 边界路由器构建和配置

在 GitHub 上查看源代码

本指南将介绍 OpenThread 边界路由器 (OTBR) 的基本构建和配置。完成此过程后,您将有一个 OTBR,在 RCP 设计中用作全线程设备 (FTD)。

配置平台

配置受支持的硬件平台:

构建并刷写 RCP

OTBR 采用 RCP 设计。选择要用作 RCP 的受支持的 OpenThread 平台,并按照该平台的构建和刷写说明执行操作。

如需简要了解如何构建 OpenThread,请参阅构建指南

如需了解有关如何使用 GNU Autotools 构建受支持平台的具体说明,请参阅每个示例的平台文件夹

安装 OTBR

OTBR 通过脊柱与 RCP 进行通信。如需在配置的硬件平台上安装 OTBR,请完成以下步骤。

克隆 OTBR 代码库:

git clone https://github.com/openthread/ot-br-posix

安装依赖项

默认配置会为大多数平台启用 BORDER_ROUTING。如需查看 OTBR 默认标志的完整列表,请参阅 GitHub 上的平台示例。选择平台,然后点击 default(如果有)。

  • 默认用法:

    cd ot-br-posix
    ./script/bootstrap
    
  • 带有网络管理器的 BeagleBone Black(可选):

    cd ot-br-posix
    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/bootstrap
    

编译和安装 OTBR

  • 默认用法。设置脚本默认启用边界路由。如需启用边界路由,请指定平台的以太网或 Wi-Fi 接口:

    使用以太网:

    INFRA_IF_NAME=eth0 ./script/setup
    

    使用 Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone Black。使用网络管理器(可选):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

连接和配置 RCP 设备

通过 USB 将刷写的 RCP 设备连接到边界路由器平台。

如需在 otbr-agent 中配置 RCP 设备的串行端口,请先检查 /dev,确定 RCP 设备的串行端口名称:

ls /dev/tty*

接下来,检查 otbr-agent 设置。

cd /etc/default
cat otbr-agent

otbr-agent 配置文件包含您的 Thread 接口名称、以太网或 Wi-Fi 接口名称以及 RCP 串行端口名称。

OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"

并非所有设备都使用同一串行端口名称。最常见的端口名称是 ttyACM*ttyUSB*。请参阅设备的文档以确定预期的串行端口名称。

如果需要,请更新 otbr-agent 配置文件。例如,对于 Wi-Fi 接口和串行端口名称 ttyUSB0

OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB0 trel://wlan0"

如需更新以太网接口,请执行以下操作:

OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0"

重启边界路由器。如果使用的是 BeagleBone Black 平台,请务必按住 BOOT 按钮

OTBR 服务应在启动时启动。

验证服务

验证是否启用了所有必需的服务:

sudo systemctl status

如果 setup 脚本运行成功,输出中将显示以下服务:

  • mdns.service
  • otbr-agent.service
  • otbr-web.service

例如:

● raspberrypi
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Thu 1970-01-01 00:00:01 UTC; 47 years 7 months ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   ├─user@1000.service
           │   │ └─init.scope
           │   │   ├─576 /lib/systemd/systemd --user
           │   │   └─580 (sd-pam)
           │   └─session-c1.scope
           │     ├─480 /bin/login --
           │     └─585 -bash
           ├─init.scope
           │ └─1 /sbin/init
           └─system.slice
             ├─systemd-timesyncd.service
             │ └─334 /lib/systemd/systemd-timesyncd
             ├─dbus.service
             │ └─339 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─hciuart.service
             │ └─442 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow -
             ├─ssh.service
             │ └─621 /usr/sbin/sshd -D
             ├─avahi-daemon.service
             │ ├─341 avahi-daemon: running [raspberrypi.local]
             │ └─361 avahi-daemon: chroot helper
  # enabled  ├─otbr-web.service
             │ └─472 /usr/sbin/otbr-web
             ├─triggerhappy.service
             │ └─354 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
             ├─systemd-logind.service
             │ └─353 /lib/systemd/systemd-logind
  # enabled  ├─otbr-agent.service
             │ └─501 /usr/sbin/otbr-agent -I wpan0
             ├─cron.service
             │ └─350 /usr/sbin/cron -f
             ├─systemd-udevd.service
             │ └─154 /lib/systemd/systemd-udevd
             ├─rsyslog.service
             │ └─345 /usr/sbin/rsyslogd -n
             ├─bluetooth.service
             │ └─445 /usr/lib/bluetooth/bluetoothd
  # enabled  ├─mdns.service
             │ └─725 /usr/sbin/mdnsd
             ├─systemd-journald.service
             │ └─136 /lib/systemd/systemd-journald
             └─dhcpcd.service
               ├─409 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
               └─466 /sbin/dhcpcd -q -w

如果这些服务正在运行,但 RPi 处于降级状态,则表示某些其他服务未能启动。查看哪些设备:

sudo systemctl --failed

您还可以单独检查每项服务:

sudo service mdns status
sudo service otbr-agent status
sudo service otbr-web status

对于大多数平台otbr-web 默认处于启用状态。如果未安装 otbr-web,请尝试传递 WEB_GUI 标志:

WEB_GUI=1 ./script/bootstrap
INFRA_IF_NAME=wlan0 WEB_GUI=1 ./script/setup

验证 RCP

验证 RCP 是否处于正确状态:

sudo ot-ctl state

ot-ctl 是随 OTBR 一起提供的命令行实用程序。它用于与 otbr-agent 在 RCP 设计中绑定的线程 PAN 接口(默认值为 wpan0)通信。

如果 RCP 成功运行,并且节点不是线程网络的成员,则输出应类似于以下内容:

disabled

如果输出为 OpenThread daemon is not running,请排查以下问题:

  1. 验证边界路由器是否有足够的电量(使用适当的外部交流电源适配器)。
  2. 断开 RCP 板的连接,然后重新连接到边界路由器平台。
  3. 验证 RCP 串行设备是否存在。例如,如果设备应附加到 /dev/ttyUSB0

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. 使用 sudo ot-ctl reset 重置 RCP。

使用 sudo ot-ctl state 再次检查 RCP 状态。