O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Configure o ambiente de construção

Para promover o desenvolvimento livre e aberto, OpenThread usa GNU Autotools na cadeia de ferramentas de construção. Atualmente, este conjunto de ferramentas é necessário para portar OpenThread para uma nova plataforma de hardware.

Outros conjuntos de ferramentas de construção podem ser suportados no futuro, mas atualmente não estão no escopo deste guia de portabilidade.

GNU Autoconf

O script Autoconf contém as opções básicas de configuração do sistema, incluindo definições específicas de macro relativas à plataforma. Essas macros podem ser expostas para compilação condicional em outros Makefiles durante a fase de pré-compilação.

O script OpenThread Autoconf está localizado em: /openthread/configure.ac

Nome de exemplo de plataforma

Na AC_ARG_WITH(examples ...) , adicione o novo nome de exemplo da plataforma de hardware. O nome deve ser adicionado em ordem alfabética.

Exemplo:

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 pré-processador C específico da plataforma

Defina um símbolo de pré-processador C específico da plataforma para o exemplo de plataforma e exponha-o.

O símbolo do pré-processador C específico da plataforma é exposto em include/openthread-config.h . Incluindo o símbolo neste arquivo de cabeçalho, podemos aproveitá-lo em nosso código-fonte para casos de compilação condicional de pré-processador.

Exemplo:

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"])

Diretório de saída do Makefile

Na macro AC_CONFIG_FILES , inclua um diretório de saída Makefile para o exemplo de plataforma.

Exemplo:

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

GNU Automake

Crie e modifique arquivos Automake para suportar o novo exemplo de plataforma.

Os seguintes arquivos Automake específicos da plataforma precisam ser criados:

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

Consulte /examples para /examples de implementações desses arquivos.

Os seguintes arquivos do Automake também precisam ser atualizados com as informações da plataforma:

Configuração de script do linker

O script GNU Linker descreve como mapear todas as seções nos arquivos de entrada (arquivos .o "objeto" gerados pela GNU Compiler Collection (GCC)) para o arquivo de saída final (por exemplo, .elf ). Ele também determina o local de armazenamento de cada segmento de um programa executável, bem como o endereço de entrada. O script de vinculador específico da plataforma geralmente é fornecido com o BSP da plataforma.

Configure a ferramenta ld para apontar para o script do vinculador específico da plataforma usando a opção -T da variável LDADD_COMMON .

Crie /openthread/examples/platforms/ platform-name /Makefile.platform.am e aponte a nova plataforma para seu script de vinculador:

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

Adicione a configuração do script do vinculador da plataforma ao /openthread/examples/platforms/Makefile.platform.am Makefile do utilitário /openthread/examples/platforms/Makefile.platform.am :

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

Configuração de subdiretório

Modifique /openthread/examples/platforms/Makefile.am para configurar os subdiretórios do pacote para o novo exemplo de plataforma.

Adicione o nome do subdiretório da plataforma na lista para make dist , em ordem alfabética:

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

Anexe o nome do subdiretório da plataforma à variável SUBDIRS :

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

Código de inicialização do conjunto de ferramentas

O código de inicialização do conjunto de ferramentas geralmente é fornecido junto com o BSP da plataforma. Este código normalmente:

  1. Implementa a função de entrada ( Reset_Handler ) do programa executável
  2. Define a tabela de vetor de interrupção
  3. Inicializa o Heap e Stack
  4. Copia a seção .data da memória não volátil para a RAM
  5. Salta para a função principal do aplicativo para executar a lógica do aplicativo

O código de inicialização (código-fonte C ou assembly) deve ser adicionado ao Makefile.am específico da plataforma, caso contrário, algumas variáveis-chave usadas no script do vinculador não podem ser citadas corretamente:

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

Exemplo:

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 \