OpenThread 邊界路由器建構和設定

在 GitHub 上查看來源

本指南將介紹 OpenThread Border Router (OTBR) 的基本建構和設定。完成這個程序後,您將擁有一個 OTBR,可在 RCP 設計中充當 Full Thread Device (FTD)。

設定平台

設定支援的硬體平台:

建構及閃記 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 的指令列公用程式。用於與 otbr-agent 繫結至 RCP 設計中的 Thread 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 狀態。