OpenThread ボーダー ルーターのビルドと構成

GitHub でソースを見る

このガイドでは、OpenThread Border Router(OTBR)の基本的なビルドと構成について説明します。この手順が完了すると、無線コプロセッサ(RCP)設計でフルスレッド デバイス(FTD)として機能する OTBR が作成されます。

プラットフォームを構成する

サポートされているハードウェア プラットフォームを構成します。

RCP をビルドしてフラッシュする

OTBR は RCP 設計で実行されます。RCP として使用するサポートされている OpenThread プラットフォームを選択し、そのプラットフォームのビルドと書き込みの手順に沿って操作します。

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(省略可):

    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 デバイスを接続して構成する

フラッシュされた RCP デバイスを USB 経由で境界ルーター プラットフォームに接続します。

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 がバインドされている 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 のステータスを再度確認します。