Compilación y configuración del router de borde OpenThread

Ver código fuente en GitHub

En esta guía, se abordan la compilación y configuración básicas del router de borde de OpenThread (OTBR). Al completar este procedimiento, tendrás una OTBR que funcione como un dispositivo de hilo completo (FTD) en un diseño RCP.

Configurar plataforma

Configura una plataforma de hardware compatible:

Cómo compilar y escribir en la memoria flash de RCP

OTBR se ejecuta en un diseño RCP. Selecciona un OpenThread compatible plataforma para usar como RCP y seguir la compilación y la escritura en la memoria flash instrucciones para esa plataforma.

Para obtener una descripción general sobre la compilación de OpenThread, consulta la Guía de compilación.

Se pueden encontrar instrucciones específicas sobre la compilación de plataformas compatibles con GNU Autotools que se encuentran en la carpeta carpeta de la plataforma.

Instalar OTBR

OTBR se comunica con el RCP a través de Spinel. Para instalar OTBR en el dispositivo de hardware de la aplicación, completa los siguientes pasos.

Clona el repositorio OTBR:

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

Instala dependencias

La configuración predeterminada habilita BORDER_ROUTING para la mayoría de las plataformas. Para un lista completa de las marcas predeterminadas de OTBR, consulta ejemplos de la plataforma en GitHub. Selecciona tu plataforma y, luego, haz clic en default si está disponible.

  • Uso predeterminado:

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black con Network Manager (opcional):

    cd ot-br-posix
    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/bootstrap
    

Compila e instala OTBR

  • Uso predeterminado. La secuencia de comandos de configuración habilita el enrutamiento de borde de manera predeterminada. Para habilitar Enrutamiento de frontera, especifica la interfaz Ethernet o Wi-Fi de tu plataforma:

    Utiliza Ethernet:

    INFRA_IF_NAME=eth0 ./script/setup
    

    Usar Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone negro. Usa Network Manager (opcional):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

Conectar y configurar el dispositivo RCP

Conecta el dispositivo RCP en la memoria flash a la plataforma del router de borde mediante USB.

Para configurar el puerto en serie del dispositivo RCP en otbr-agent, primero determina el el nombre del puerto en serie del dispositivo RCP. Para ello, verifica /dev:

ls /dev/tty*

Luego, revisa la configuración de otbr-agent.

cd /etc/default
cat otbr-agent

El archivo de configuración otbr-agent contiene el nombre de la interfaz de tu Thread, Ethernet o de la interfaz Wi-Fi, y el nombre del puerto en serie RCP.

OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"

No todos los dispositivos se conectan con el mismo nombre de puerto en serie. El más los nombres de puertos comunes son ttyACM* y ttyUSB*. Consulta la documentación para el dispositivo para determinar el nombre del puerto en serie esperado.

Si es necesario, actualiza el archivo de configuración otbr-agent. Por ejemplo, para una conexión Wi-Fi y un nombre de puerto en serie de ttyUSB0:

OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB0 trel://wlan0"

Sigue estos pasos para actualizar una interfaz Ethernet:

OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0"

Reinicia el router de borde. Si usas la plataforma BeagleBone Black, recuerda mantener presionado el botón BOOT mientras al hacerlo.

El servicio OTBR debería iniciarse en el arranque.

Verificar servicios

Verifica que todos los servicios obligatorios estén habilitados:

sudo systemctl status

Si la secuencia de comandos setup funciona correctamente, los siguientes servicios aparecen en el Resultado:

  • mdns.service
  • otbr-agent.service
  • otbr-web.service

Por ejemplo:

● 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

Si esos servicios están en ejecución, pero la RPi se encuentra degradada, algunas no se pudo iniciar el otro servicio. Verifica lo siguiente:

sudo systemctl --failed

También puedes verificar cada servicio de forma individual:

sudo service mdns status
sudo service otbr-agent status
sudo service otbr-web status

otbr-web está habilitado de forma predeterminada para la mayoría de las plataformas. Si otbr-web no está instalado, intenta pasar la marca WEB_GUI:

WEB_GUI=1 ./script/bootstrap
INFRA_IF_NAME=wlan0 WEB_GUI=1 ./script/setup

Verificar RCP

Verifica que el RCP esté en el estado correcto:

sudo ot-ctl state

ot-ctl es una utilidad de línea de comandos proporcionada con OTBR. Se usa para comunicarse con la interfaz PAN de Thread (el valor predeterminado es wpan0) que otbr-agent en el diseño de RCP.

Si el RCP se ejecuta correctamente y el nodo no es miembro de un subproceso el resultado debería ser similar al siguiente:

disabled

Si el resultado es OpenThread daemon is not running, soluciona el problema con el siguiente comando:

  1. Verifica que el router de borde tenga suficiente energía (usa la CA externa adecuada adaptador).
  2. Desconecta y vuelve a conectar la placa RCP a la plataforma del router de borde.
  3. Verifica que el dispositivo en serie RCP esté presente. Por ejemplo, si el dispositivo se debe adjuntar a /dev/ttyUSB0:

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. Restablece el RCP con sudo ot-ctl reset.

Vuelve a verificar el estado del RCP con sudo ot-ctl state.