Configurer l'environnement de compilation

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Voir la source sur GitHub

Pour promouvoir le développement libre et ouvert, OpenThread utilise CMake dans la chaîne d'outils de compilation. À l'heure actuelle, cette chaîne d'outils est requise pour le transfert d'OpenThread vers une nouvelle plate-forme matérielle.

Il se peut que d'autres chaînes d'outils de compilation soient compatibles à l'avenir, mais elles ne seront pas abordées dans le guide de portage.

Créer un dépôt

La première étape consiste à configurer une nouvelle maison pour votre plate-forme matérielle. Dans ce guide, nous allons créer un dépôt nommé ot-efr32 qui contient la couche d'abstraction de la plate-forme, le SDK de la plate-forme matérielle et quelques scripts utiles.

Dans cet exemple, nous avons créé le dépôt SiliconLabs/ot-efr32 sur GitHub et le cloné dans ~/repos/ot-efr32.

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning into 'ot-efr32'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234
Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done.
Resolving deltas: 100% (194/194), done.
git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Structure du dépôt

Pour assurer la cohérence avec les dépôts de plate-forme existants de l'organisation GitHub OpenThread, vous pouvez structurer votre dépôt comme suit:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Dossier Description
examples facultatif : exemples d'applications
openthread Le dépôt openthread en tant que sous-module
script Scripts pour la création, le test et le linting
src Mise en œuvre de la couche d'abstraction de plate-forme
third_party Emplacement pour toutes les sources tierces

Ajouter des sous-modules

L'étape suivante consiste à ajouter openthread et tous les autres dépôts requis en tant que sous-modules

git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.

Dans cet exemple, nous allons ajouter une version simplifiée du SDK Gecko Silicon Labs en tant que sous-module dans third_party.

cd third_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning into '/home/user/repos/ot-efr32/third_party/sdk_support'...
remote: Enumerating objects: 32867, done.
remote: Counting objects: 100% (8181/8181), done.
remote: Compressing objects: 100% (3098/3098), done.
remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686
Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done.
Resolving deltas: 100% (19797/19797), done.

Scripts

Pour faciliter les tâches courantes, vous pouvez créer des scripts dans le dossier script. Cela peut inclure des scripts pour des tâches telles que l'amorçage, la création et l'exécution d'un outil lint/de code, et un script de test pour les vérifications CI GitHub.

Vous trouverez ci-dessous quelques exemples de scripts standards pour la plupart des dépôts de plates-formes existants.

bootstrap

Ce script doit installer tous les outils et packages requis par votre plate-forme matérielle. Il doit également exécuter le script d'amorçage de openthread pour s'assurer que l'utilisateur dispose de tous les éléments nécessaires pour créer la pile OpenThread.

Consultez le script d'amorçage dans ot-efr32 pour voir un exemple.

build

Le script de compilation CMake doit permettre aux utilisateurs de compiler la pile OpenThread pour votre plate-forme. Si votre dépôt définit des exemples d'applications, ce script doit également les créer. Ce script doit contenir les options de configuration système de base, y compris les définitions des macros propres à chaque plate-forme.

Consultez le script de compilation dans ot-efr32 pour voir un exemple.

test

Un script de test peut s'avérer utile pour tester des modifications à l'aide des tests que vous avez définis. Il peut s'agir aussi simplement d'exécuter des compilations de vérification de l'état que de lancer une suite de tests unitaires.

Dans ot-efr32, le script exécute simplement le script build pour chaque carte compatible sur chacune des plates-formes efr32.

Consultez le script de test dans ot-efr32 pour voir un exemple.

make-pretty

Pour conserver un style cohérent, ce script doit mettre en forme le code, les scripts et les fichiers Markdown.

Vous pouvez définir ce script vous-même, mais il peut être plus facile d'utiliser le script make-pretty que les dépôts existants de la plate-forme utilisent. Le script appelle les scripts de style openthread et contribue à garantir la cohérence du style entre tous les dépôts OpenThread.

Configuration du script Linker

Le script GNU Linker explique comment mapper toutes les sections des fichiers d'entrée (.o, objet et fichier) générés par la collection GNU Compiler (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 Linker propre à la plate-forme est souvent fourni avec le bouton 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 en utilisant target_link_libraries sur la cible CMake de la plate-forme dans src/CMakeLists.txt :

set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")

target_link_libraries(openthread-efr32mg12
    PRIVATE
        ot-config
    PUBLIC
        -T${LD_FILE}
        -Wl,--gc-sections -Wl,-Map=$.map
)

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 bouton BSP de la plate-forme. Généralement, ce code:

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

Le code de démarrage (C ou code source d'assemblage) doit être inclus dans la bibliothèque openthread-platform-name de votre plate-forme. Dans le cas contraire, certaines variables clés utilisées dans le script Linker ne peuvent pas être placées entre guillemets correctement:

  • src/CMakeLists.txt

Exemple : startup-gcc.c dans ot-cc2538 - src/CMakeLists.txt

add_library(openthread-cc2538
    alarm.c
...
    startup-gcc.c
...
    system.c
    logging.c
    uart.c
    $
)