OpenThread 边界路由器构建和配置

在 GitHub 上查看源代码

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

配置平台

配置受支持的硬件平台:

构建并刷写 RCP

OTBR 采用 RCP 设计。选择一个受支持的 OpenThread 平台用作 RCP,然后按照该平台的构建和刷写说明操作。

如需大致了解如何构建 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 提供的命令行实用程序。它用于与 RCP 设计中 otbr-agent 绑定的线程 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 状态。