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

ดูซอร์สโค้ดใน GitHub

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

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

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

สร้างและแฟลช RCP

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

ดูภาพรวมของการสร้าง OpenThread ได้ที่คู่มือการสร้าง

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

ติดตั้ง OTBR

OTBR สื่อสารกับ RCP ผ่าน Spinel หากต้องการติดตั้ง 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