Configurer l'environnement de compilation

<ph type="x-smartling-placeholder"></ph> Consulter le code source sur GitHub

Pour promouvoir le développement sans frais et ouvert, OpenThread utilise CMake dans à la chaîne d'outils de compilation. Actuellement, cette chaîne d'outils est requise pour le portage OpenThread vers une nouvelle plateforme matérielle.

D'autres chaînes d'outils de compilation pourraient être compatibles à l'avenir, mais elles ne sont pas incluses le champ d'application de ce guide de portage.

Créer un dépôt

La première étape consiste à configurer un nouvel espace 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 l'avons 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 plateforme existants dans 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 optional Exemples d'applications
openthread Le dépôt openthread en tant que sous-module
script Scripts pour la compilation, les tests et le linting
src L'implémentation de la couche d'abstraction de la plate-forme
third_party Emplacement des 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.

Pour cet exemple, nous allons ajouter une version allégée du SDK Gecko de 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 compilation et l'exécution d'un linter de code, ainsi qu'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 plate-forme 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 tout ce dont vous avez besoin pour créer la pile OpenThread.

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

build

Le script de compilation CMake doit permettre aux utilisateurs de créer 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 de macro propres à la plate-forme.

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

test

Un script de test peut être utile aux utilisateurs pour tester les modifications à l'aide des tests que vous avez définis. Cela peut aller de l'exécution de builds d'évaluation de l'intégrité ou du lancement d'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 obtenir un exemple.

make-pretty

Pour assurer la cohérence des styles, ce script doit formater le code, les scripts et les fichiers Markdown.

Vous pouvez définir ce script vous-même, mais il peut être plus simple d'utiliser le script make-pretty utilisé par les dépôts de plate-forme existants. Le script appelle les scripts de style de openthread et permet d'assurer un style cohérent dans tous les dépôts OpenThread.

Configuration du script Linker

Script GNU Linker décrit comment mapper toutes les sections dans les fichiers d'entrée (.o fichiers "objet" généré par GNU Compiler Collection (GCC) dans le fichier de sortie final (par (.elf, par exemple). Il détermine également l'emplacement de stockage de chaque segment d'une programme exécutable, ainsi que l’adresse d’entrée. L'éditeur de liens spécifique à la plate-forme du script est souvent fourni avec la page "Récapitulatif de facturation" de la plate-forme.

Configurez l'outil ld pour qu'il pointe vers le script de lien spécifique à la plate-forme à l'aide de target_link_libraries sur la cible CMake de votre 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 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 vectorielle d'interruption.
  3. Initialise le tas 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 de l'application

Le code de démarrage (C ou code source de l'assembly) doit être inclus dans le fichier openthread-platform-name. Sinon, certaines variables de clé sont utilisées dans l'éditeur de liens. Le script ne peut pas être cité 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
    $
)