OpenThread 邊界路由器建構與設定

前往 GitHub 查看原始碼

本指南涵蓋 OpenThread Border 路由器 (OTBR) 的基本建構與設定。完成這項程序後,您會有一個 OTBR,可在 RCP 設計中以完整執行緒裝置 (FTD) 運作。

設定平台

設定支援的硬體平台:

建構及重新整理 RCP

OTBR 採用 RCP 設計。選取支援的 OpenThread 平台,以便用來當做 RCP,然後按照該平台的建築物和刷新指示操作。

如需建構 OpenThread 的總覽,請參閱建構指南

您可以在每個範例的平台資料夾中找到使用 GNU Autotools 建構支援平台的特定操作說明。

安裝 OTBR

OTBR 透過 Spinel 與 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 和 Network Manager (選用):

    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 成功執行,且節點不是 Thread 網路的成員,輸出結果應如下所示:

disabled

如果輸出結果是 OpenThread daemon is not running,請排解下列問題:

  1. 確認邊界路由器有足夠電力 (使用適當的外部 AC 變壓器)。
  2. 中斷 RCP 電路板的連接,並且重新連上邊界路由器平台。
  3. 確認存在 RCP 序列裝置。舉例來說,如果裝置應附加到 /dev/ttyUSB0

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

再次使用 sudo ot-ctl state 檢查 RCP 狀態。