Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Configurer l'environnement de construction

Pour promouvoir le développement libre et ouvert, OpenThread utilise GNU Autotools dans la chaîne d'outils de construction. Actuellement, cette chaîne d'outils est requise pour le portage d'OpenThread sur une nouvelle plate-forme matérielle.

D'autres chaînes d'outils de construction pourraient être prises en charge à l'avenir, mais ne sont actuellement pas dans le cadre de ce guide de portage.

GNU Autoconf

Le script Autoconf contient les options de configuration système de base, y compris les définitions de macros spécifiques à la plate-forme. Ces macros peuvent être exposées pour la compilation conditionnelle dans d'autres Makefiles pendant la phase de pré-compilation.

Le script OpenThread Autoconf se trouve dans: /openthread/configure.ac

Nom d'exemple de plateforme

Dans la AC_ARG_WITH(examples ...) , ajoutez le nouveau nom d'exemple de plate-forme matérielle. Le nom doit être ajouté par ordre alphabétique.

Exemple:

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

Symbole de préprocesseur C spécifique à la plate-forme

Définissez un symbole de préprocesseur C spécifique à la plateforme pour l'exemple de plateforme et exposez-le.

Le symbole de préprocesseur C spécifique à la plate-forme est exposé dans include/openthread-config.h . En incluant le symbole dans ce fichier d'en-tête, nous pouvons l'exploiter dans notre code source pour les cas de compilation conditionnelle du préprocesseur.

Exemple:

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

Répertoire de sortie Makefile

Dans la macro AC_CONFIG_FILES , ajoutez un répertoire de sortie Makefile pour l'exemple de plateforme.

Exemple:

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

GNU Automake

Créez et modifiez des fichiers Automake pour prendre en charge le nouvel exemple de plateforme.

Les fichiers Automake suivants spécifiques à la plate-forme doivent être créés:

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

Voir /examples pour des /examples d'implémentation de ces fichiers.

Les fichiers Automake suivants doivent également être mis à jour avec les informations de votre plate-forme:

Configuration du script de l'éditeur de liens

Le script GNU Linker décrit comment mapper toutes les sections des fichiers d'entrée ( .o fichiers "objet" générés par la collection de compilateurs GNU (GCC)) au fichier de sortie final (par exemple, .elf ). Il détermine également l'emplacement de stockage de chaque segment d'un programme exécutable, ainsi que l'adresse d'entrée. Le script de l'éditeur de liens spécifique à la plate-forme est souvent fourni avec le BSP de la plate-forme.

Configurez l'outil ld pour qu'il pointe vers le script de l'éditeur de liens spécifique à la plate-forme à l'aide de l'option -T de la variable LDADD_COMMON .

Créez /openthread/examples/platforms/ platform-name /Makefile.platform.am et pointez la nouvelle plateforme vers son script de liaison:

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

Ajoutez la configuration du script de l'éditeur de liens de la plateforme à l'utilitaire /openthread/examples/platforms/Makefile.platform.am Makefile:

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

Configuration du sous-répertoire

Modifiez /openthread/examples/platforms/Makefile.am pour configurer les sous-répertoires du package pour le nouvel exemple de plateforme.

Ajoutez le nom du sous-répertoire de la plateforme dans la liste pour make dist , par ordre alphabétique:

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

Ajoutez le nom du sous-répertoire de la plateforme à la variable SUBDIRS :

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

Code de démarrage de la chaîne d'outils

Le code de démarrage de la chaîne d'outils est souvent fourni avec le BSP de la plate-forme. Ce code généralement:

  1. Implémente la fonction d'entrée ( Reset_Handler ) du programme exécutable
  2. Définit la table des vecteurs d'interruption
  3. Initialise le tas et la pile
  4. Copie la section .data de la mémoire non volatile vers la RAM
  5. Passe à la fonction principale de l'application pour exécuter la logique de l'application

Le code de démarrage (C ou code source de l'assembly) doit être ajouté au Makefile.am spécifique à la plate-forme, sinon certaines variables clés utilisées dans le script de l'éditeur de liens ne peuvent pas être correctement citées:

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

Exemple:

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 \