configura l'ambiente di creazione

Visualizza il codice sorgente su GitHub

Per promuovere lo sviluppo senza costi e aperto, OpenThread utilizza CMake in la toolchain di creazione. Attualmente, questa toolchain è obbligatoria per la portabilità su una nuova piattaforma hardware.

Potrebbero essere supportate altre toolchain di creazione in futuro, ma non all'interno di gli ambiti di questa guida al trasferimento.

Crea un nuovo repository

Per prima cosa devi configurare una nuova casa per la tua piattaforma hardware. In questa guida, creeremo un nuovo repository denominato ot-efr32 contenente 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 della piattaforma esistenti nell'organizzazione GitHub OpenThread, puoi strutturare il repository come segue:

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 la creazione, il test e l'analisi tramite lint
src Implementazione del livello di astrazione della piattaforma
third_party Posizione di eventuali origini di terze parti

Aggiungi sottomoduli

Il passaggio successivo consiste nell'aggiungere openthread ed eventuali altri repository richiesti come sottomoduli

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 dell'SDK Silicon Labs Gecko 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, ti consigliamo di creare alcuni script nella cartella script. Potrebbero essere inclusi script per attività come bootstraping, 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 piattaforma hardware. Dovrebbe anche eseguire lo script di bootstrap di openthread per garantire che l'utente abbia tutto il necessario per creare lo stack OpenThread.

Per un esempio, vedi lo script 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 applicazioni di esempio, questo script dovrebbe creare anche queste. Questo script deve contenere le opzioni di configurazione di base del sistema, incluse eventuali definizioni di macro specifiche della piattaforma.

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

test

Uno script per il test può essere utile per testare le modifiche utilizzando i test che hai definito. Può trattarsi di qualcosa di semplice come eseguire build di controllo di integrità o di complicato come lanciare una suite di test delle unità.

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

Per un esempio, vedi lo script per il test in ot-efr32.

make-pretty

Per mantenere uno stile coerente, questo script deve formattare il codice, gli script e i file di markdown.

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

Configurazione dello script del linker

Script GNU Linker descrive come mappare tutte le sezioni nei file di input (.o file "oggetto" generati da GNU Compiler Collection (GCC) al file di output finale (ad esempio, .elf). Determina inoltre la posizione di archiviazione di ciascun segmento di eseguibile del deployment, nonché l'indirizzo di inserimento. Linker specifico per piattaforma viene spesso fornito insieme al BSP della piattaforma.

Configura lo strumento ld in modo che punti allo script di collegamento specifico della piattaforma utilizzando target_link_libraries sulla tua piattaforma Crea target 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. Questo codice in genere:

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

Il codice di avvio (codice sorgente C o assembly) deve essere incluso nel codice libreria openthread-platform-name, altrimenti alcune variabili chiave utilizzate nel linker lo script non può essere citato 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
    $
)