การสร้างและกำหนดค่า Border Router ของ OpenThread

ดูแหล่งที่มาใน GitHub

คู่มือนี้มีเนื้อหาเกี่ยวกับการสร้างและการกำหนดค่าพื้นฐานของ OpenThread Border Router (OTBR) เมื่อเสร็จสิ้นขั้นตอนนี้ คุณจะมี OTBR ที่ทำงาน เป็นอุปกรณ์ Full Thread (FTD) ในการออกแบบ RCP

กำหนดค่าแพลตฟอร์ม

กำหนดค่าแพลตฟอร์มฮาร์ดแวร์ที่รองรับ ดังนี้

สร้างและ Flash RCP

OTBR จะทำงานบนการออกแบบ RCP เลือก OpenThread ที่รองรับ แพลตฟอร์มเพื่อใช้เป็น RCP และตามสิ่งปลูกสร้างและการกะพริบ วิธีการสำหรับแพลตฟอร์มนั้น

สำหรับภาพรวมของการสร้าง OpenThread โปรดดูที่ คู่มือการสร้าง

สามารถบอกวิธีการเฉพาะในการสร้างแพลตฟอร์มที่รองรับด้วย GNU Autotools ได้ ที่พบในแต่ละตัวอย่าง แพลตฟอร์ม

ติดตั้ง OTBR

OTBR สื่อสารกับ RCP ผ่านสปิเนล วิธีติดตั้ง OTBR ในอุปกรณ์ที่กำหนดค่าไว้ แพลตฟอร์มฮาร์ดแวร์ ให้ทำตามขั้นตอนต่อไปนี้

โคลนที่เก็บ OTBR ด้วยคำสั่งต่อไปนี้

git clone https://github.com/openthread/ot-br-posix

ติดตั้งการอ้างอิง

การกำหนดค่าเริ่มต้นจะเปิดใช้ BORDER_ROUTING สำหรับแพลตฟอร์มส่วนใหญ่ สำหรับ รายการ Flag เริ่มต้น 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

  • การใช้งานเริ่มต้น สคริปต์การตั้งค่าจะเปิดใช้ Border Routing โดยค่าเริ่มต้น วิธีเปิดใช้งาน Border Routing ให้ระบุอินเทอร์เฟซอีเทอร์เน็ตหรือ 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 ที่กะพริบกับแพลตฟอร์ม Border Router ผ่าน USB

หากต้องการกำหนดค่าพอร์ตอนุกรมของอุปกรณ์ RCP ใน otbr-agent ก่อนอื่นให้ระบุ ชื่อพอร์ตอนุกรมสำหรับอุปกรณ์ RCP โดยตรวจสอบที่ /dev ดังนี้

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"

ปิด Border Router หากใช้แพลตฟอร์ม 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 ทำงานสำเร็จและโหนดไม่ได้เป็นสมาชิกของเทรด เครือข่าย เอาต์พุตควรมีลักษณะคล้ายกับด้านล่างนี้

disabled

หากเอาต์พุตคือ OpenThread daemon is not running ให้แก้ปัญหาดังนี้

  1. ตรวจสอบว่า Border Router มีไฟเพียงพอ (ใช้ AC ภายนอกที่เหมาะสม อะแดปเตอร์)
  2. ยกเลิกการเชื่อมต่อและเชื่อมต่อบอร์ด RCP กับแพลตฟอร์ม Border Router อีกครั้ง
  3. ยืนยันว่ามีอุปกรณ์ซีเรียล RCP อยู่ เช่น หากอุปกรณ์ ควรแนบกับ /dev/ttyUSB0:

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. รีเซ็ต RCP ด้วย sudo ot-ctl reset

โปรดตรวจสอบสถานะ RCP อีกครั้งกับ sudo ot-ctl state