Configura l'ambiente di build

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Visualizza origine su GitHub

Per promuovere lo sviluppo senza costi e aperto, OpenThread utilizza CMake nella toolchain. Al momento, questa portachiavi è necessaria per trasferire OpenThread su una nuova piattaforma hardware.

In futuro potrebbero essere supportate altre catene di strumenti di compilazione, ma non rientrano nell'ambito di questa guida al trasferimento.

Crea un nuovo repository

Il primo passaggio consiste nel configurare una nuova home page per la tua piattaforma hardware. In questa guida creeremo un nuovo repository denominato ot-efr32, che contiene il livello di astrazione della piattaforma, l'SDK della piattaforma hardware e alcuni script utili.

In questo esempio, abbiamo creato il repository SiliconLabs/ot-efr32 su GitHub e lo abbiamo clonato in ~/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

Struttura del repository

Per mantenere la coerenza con i repository delle piattaforme esistenti nell'organizzazione GitHub di OpenThread, ti consigliamo di strutturare il repository in questo modo:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
cartella Descrizione
examples Facoltativo Applicazioni di esempio
openthread Il repository openthread come sottomodulo
script Script per creazione, test, analisi tramite lint
src L'implementazione del livello di astrazione della piattaforma
third_party Posizione per eventuali fonti di terze parti

Aggiungere sottomoduli

Il passaggio successivo consiste nell'aggiungere openthread e qualsiasi altro repository obbligatorio come sottomodulo.

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.

Per questo esempio aggiungeremo una versione Lite del Silicon Labs Gecko SDK come sottomodulo in 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.

Script

Per semplificare le attività comuni, puoi creare alcuni script nella cartella script. Potrebbero essere inclusi script per attività come bootstrap, creazione, esecuzione di un code-linter e script di test per i controlli CI di GitHub.

Di seguito sono riportati alcuni esempi di script standard per la maggior parte dei repository di piattaforme esistenti.

bootstrap

Questo script dovrebbe installare tutti gli strumenti e i pacchetti richiesti dalla tua piattaforma hardware. Dovrebbe anche eseguire lo script di bootstrap di openthread per assicurarsi che l'utente abbia tutto ciò che serve per creare lo stack OpenThread.

Ad esempio, vedi lo script di bootstrap in ot-efr32.

build

Lo script di build CMake dovrebbe consentire agli utenti di creare lo stack OpenThread per la tua piattaforma. Se il repository definisce eventuali applicazioni di esempio, questo script dovrebbe crearle. Questo script deve contenere le opzioni di configurazione di base del sistema, incluse le definizioni delle macro specifiche per la piattaforma.

Per un esempio, consulta lo script sulla build in ot-efr32.

test

Uno script di test può essere utile agli utenti per testare le modifiche utilizzando qualsiasi test da te definito. Potrebbe trattarsi di una semplice operazione, come l'esecuzione di build del controllo di sicurezza o complicata, come il lancio di una suite di test di unità.

In ot-efr32, lo script esegue semplicemente lo script build per ogni piattaforma supportata su ciascuna delle piattaforme efr32.

Per un esempio, consulta lo script di test in ot-efr32.

make-pretty

Per mantenere lo stile coerente, questo script dovrebbe formattare il codice, gli script e i file di Markdown.

Puoi definire personalmente questo script, ma potrebbe essere più semplice utilizzare lo script make-pretty utilizzato dai repository esistenti della piattaforma. Lo script richiama gli script di stile openthread e contribuisce a garantire uno stile coerente in tutti i repository OpenThread.

Configurazione dello script linker

Lo script GNU Linker descrive come mappare tutte le sezioni dei file di input (.o "object" file generati dalla GNU Compiler Collection (GCC)) al file di output finale (ad esempio, .elf). Determina anche la posizione di archiviazione di ciascun segmento di un programma eseguibile, nonché l'indirizzo della voce. Lo script di collegamento specifico della piattaforma è spesso fornito con il BSP della piattaforma.

Configura lo strumento ld in modo che rimandi allo script di collegamento specifico per la piattaforma tramite target_link_libraries sul target CMake della tua piattaforma in 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
)

Codice di avvio di Toolchain

Il codice di avvio di Toolchain viene spesso fornito insieme al BSP della piattaforma. In genere questo codice:

  1. Implementa la funzione di voce (Reset_Handler) del programma eseguibile
  2. Definisce la tabella vettoriale di interruzione
  3. Inizializza heap e stack
  4. Copia la sezione .data dalla memoria non volatile alla RAM
  5. Passa alla funzione principale dell'applicazione per eseguire la logica dell'applicazione

Il codice di avvio (C o codice sorgente dell'assemblaggio) deve essere incluso nella libreria openthread-platform-name della tua piattaforma, altrimenti alcune variabili chiave utilizzate nello script linker non possono essere racchiuse correttamente:

  • src/CMakeLists.txt

Esempio: startup-gcc.c in ot-cc2538 - src/CMakeLists.txt

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