Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Configurar el entorno de construcción

Para promover el desarrollo libre y abierto, OpenThread usa GNU Autotools en la cadena de herramientas de construcción. Actualmente, esta cadena de herramientas es necesaria para portar OpenThread a una nueva plataforma de hardware.

Es posible que en el futuro se admitan otras cadenas de herramientas de compilación, pero actualmente no están en el alcance de esta guía de migración.

GNU Autoconf

El script Autoconf contiene las opciones básicas de configuración del sistema, incluidas las definiciones de macro específicas relativas a la plataforma. Estas macros pueden exponerse para compilación condicional en otros Makefiles durante la fase de precompilación.

El script OpenThread Autoconf se encuentra en: /openthread/configure.ac

Nombre de ejemplo de plataforma

En la AC_ARG_WITH(examples ...) , agregue el nombre del ejemplo de la nueva plataforma de hardware. El nombre debe agregarse en orden alfabético.

Ejemplo:

AC_ARG_WITH(examples,
    [AS_HELP_STRING([--with-examples=TARGET],
        [Specify the examples from one of: none, simulation, cc2538, cc2650, efr32, nrf52840 @<:@default=none@:>@.])],
    [
        case "${with_examples}" in
        none)
            ;;
        simulation|cc2538|cc2650|efr32|nrf52840)
            if test ${enable_posix_app} = "yes"; then
                AC_MSG_ERROR([--with-examples must be none when POSIX apps are enabled by --enable-posix-app])
            fi
            ;;
        *)
            AC_MSG_ERROR([Invalid value ${with_examples} for --with-examples])
            ;;
        esac
    ],
    [with_examples=none])

Símbolo de preprocesador C específico de la plataforma

Defina un símbolo de preprocesador de C específico de la plataforma para el ejemplo de plataforma y expóngalo.

El símbolo del preprocesador de C específico de la plataforma se expone en include/openthread-config.h . Al incluir el símbolo en este archivo de encabezado, podemos aprovecharlo en nuestro código fuente para casos de compilación condicional de preprocesador.

Ejemplo:

case ${with_examples} in
 
    ...
 
    efr32)
        OPENTHREAD_EXAMPLES_EFR32=1
        AC_DEFINE_UNQUOTED([OPENTHREAD_EXAMPLES_EFR32],[${OPENTHREAD_EXAMPLES_EFR32}],[Define to 1 if you want to use efr32 examples])
        ;;
 
...
 
esac
 
...
 
AC_SUBST(OPENTHREAD_EXAMPLES_EFR32)
AM_CONDITIONAL([OPENTHREAD_EXAMPLES_EFR32], [test "${OPENTHREAD_EXAMPLES}" = "efr32"])

Directorio de salida de Makefile

En la macro AC_CONFIG_FILES , agregue un directorio de salida Makefile para el ejemplo de plataforma.

Ejemplo:

AC_CONFIG_FILES ([
       examples/platforms/efr32/Makefile
])

GNU Automake

Cree y modifique archivos de Automake para admitir el ejemplo de la nueva plataforma.

Es necesario crear los siguientes archivos de Automake específicos de la plataforma:

  • /openthread/examples/Makefile- platform-name
  • /openthread/examples/platforms/ platform-name /Makefile.am
  • /openthread/examples/platforms/ platform-name /Makefile.platform.am

Vea /examples de /examples de implementaciones de estos archivos.

Los siguientes archivos de Automake también deben actualizarse con la información de su plataforma:

Configuración del script del vinculador

El script GNU Linker describe cómo mapear todas las secciones en los archivos de entrada ( .o archivos "objeto" generados por la Colección de compiladores GNU (GCC)) al archivo de salida final (por ejemplo, .elf ). También determina la ubicación de almacenamiento de cada segmento de un programa ejecutable, así como la dirección de entrada. El script del enlazador específico de la plataforma a menudo se proporciona con el BSP de la plataforma.

Configure la herramienta ld para que apunte al script del vinculador específico de la plataforma mediante la opción -T de la variable LDADD_COMMON .

Cree /openthread/examples/platforms/ platform-name /Makefile.platform.am y apunte la nueva plataforma a su script de enlace:

if OPENTHREAD_EXAMPLES_EFR32
    LDADD_COMMON                                                      += \
    $(top_builddir)/examples/platforms/efr32/libopenthread-efr32.a       \
    $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a \
    $(NULL)
 
LDFLAGS_COMMON                                                        += \
    -T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/efr32mg12p.ld \
    $(NULL)
endif # OPENTHREAD_EXAMPLES_EFR32

Agregue la configuración del script del vinculador de la plataforma a la utilidad /openthread/examples/platforms/Makefile.platform.am Makefile:

if OPENTHREAD_EXAMPLES_EFR32
include $(top_srcdir)/examples/platforms/efr32/Makefile.platform.am
endif

Configuración de subdirectorio

Modifique /openthread/examples/platforms/Makefile.am para configurar los subdirectorios del paquete para el ejemplo de la nueva plataforma.

Agregue el nombre del subdirectorio de la plataforma en la lista de make dist , en orden alfabético:

# Always package (e.g. for 'make dist') these subdirectories.
 
DIST_SUBDIRS                           = \
    cc2538                               \
    cc2650                               \
    efr32                                \
    nrf52840                             \
    simulation                           \
    utils                                \
    $(NULL)

SUBDIRS el nombre del subdirectorio de la plataforma a la variable SUBDIRS :

# Always build (e.g. for 'make all') these subdirectories.
 
if OPENTHREAD_EXAMPLES_EFR32
    SUBDIRS                           += efr32
endif

Código de inicio de la cadena de herramientas

El código de inicio de la cadena de herramientas a menudo se proporciona junto con el BSP de la plataforma. Este código normalmente:

  1. Implementa la función de entrada ( Reset_Handler ) del programa ejecutable
  2. Define la tabla de vectores de interrupción
  3. Inicializa el montón y la pila
  4. Copia la sección .data de la memoria no volátil a la RAM
  5. Salta a la función principal de la aplicación para ejecutar la lógica de la aplicación.

El código de inicio (C o código fuente ensamblador) debe agregarse al Makefile.am específico de la plataforma; de lo contrario, algunas variables clave utilizadas en el script del vinculador no se pueden citar correctamente:

  • /openthread/examples/platforms/ platform-name /Makefile.am

Ejemplo:

libopenthread_efr32_a_SOURCES   =  \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_bcc.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_stk.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/startup_efr32mg12p.c \