OpenThread 邊界路由器的建構與設定

在 GitHub 中查看來源

本指南涵蓋 OpenThread 邊界路由器 (OTBR) 的基本建構和設定。完成這項程序後,您將在 RCP 設計中將 OTBR 當做全執行緒裝置 (FTD) 使用。

設定平台

設定支援的硬體平台:

建立並還原 RCP

OTBR 是在 RCP 設計上執行, 選取要做為 RCP 的支援的 OpenThread 平台,然後按照該平台的建構和 Flash 指示操作。

如需建構 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 設定檔包含您的執行緒介面名稱、乙太網路或 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 提供的指令列公用程式。可用來與執行緒 PAN 介面通訊 (預設值為wpan0)otbr-agent 繫結於 RCP 設計。

如果 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 狀態。