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 ~/reposcd ~/reposgit clone git@github.com:SiliconLabs/ot-efr32.gitCloning 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 statusOn 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_partygit submodule add git@github.com:SiliconLabs/sdk_support.gitCloning 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:
- Implementa la funzione entry (
Reset_Handler) del programma eseguibile - Definisce la tabella dei vettori di interruzione
- Inizializza heap e stack
- Copia la sezione
.datadalla memoria permanente alla RAM - 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
$
)