Build-Umgebung einrichten

Quelle auf GitHub ansehen

Für die freie und offene Entwicklung verwendet OpenThread CMake in der Build-Toolchain. Derzeit ist diese Toolchain erforderlich, um OpenThread auf eine neue Hardwareplattform zu übertragen.

Andere Build-Toolchains werden möglicherweise in Zukunft unterstützt, jedoch nicht im Geltungsbereich dieser Anleitung zur Portierung.

Neues Repository erstellen

Im ersten Schritt richten Sie ein neues Zuhause für Ihre Hardwareplattform ein. In diesem Leitfaden erstellen wir ein neues Repository mit dem Namen ot-efr32. Es enthält die Plattformabstraktionsschicht, das SDK der Hardwareplattform und einige nützliche Skripts.

In diesem Beispiel haben wir das Repository SiliconLabs/ot-efr32 auf GitHub erstellt und in ~/repos/ot-efr32 geklont.

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

Repository-Struktur

Um die Konsistenz mit vorhandenen Plattform-Repositories in der OpenThread-GitHub-Organisation aufrechtzuerhalten, können Sie Ihr Repository so strukturieren:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Ordner Beschreibung
examples optional Beispielanwendungen
openthread Das Repository openthread als Submodul
script Skripts zum Erstellen, Testen und Linting
src Implementierung der Plattformabstraktionsebene
third_party Speicherort für Drittanbieterquellen

Submodule hinzufügen

Als Nächstes fügen Sie openthread und alle anderen erforderlichen Repositories als Submodule hinzu.

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.

In diesem Beispiel fügen wir in third_party eine Lite-Version des Gecko SDK des Silicon Labs hinzu.

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.

Skripts

Um allgemeine Aufgaben zu vereinfachen, können Sie im Ordner script einige Skripts erstellen. Dazu können Skripts für Aufgaben wie Bootstrapping, Erstellung, Ausführung eines Code-Linters und ein Testskript für GitHub-CI-Prüfungen gehören.

Im Folgenden finden Sie einige Beispiele für Skripts, die für die meisten vorhandenen Plattform-Repositories Standard sind.

bootstrap

Mit diesem Skript sollten alle von Ihrer Hardwareplattform benötigten Tools und Pakete installiert werden. Außerdem sollte das Bootstrap-Skript von openthread ausgeführt werden, um sicherzustellen, dass der Nutzer alles hat, was zur Erstellung des OpenThread-Stacks nötig ist.

Ein Beispiel finden Sie im Bootstrap-Skript in ot-efr32.

build

Das Build-Skript CMake sollte es Nutzern ermöglichen, den OpenThread-Stack für Ihre Plattform zu erstellen. Wenn in Ihrem Repository Beispielanwendungen definiert sind, sollten auch diese von diesem Skript erstellt werden. Dieses Skript sollte die grundlegenden Systemkonfigurationsoptionen enthalten, einschließlich aller plattformspezifischen Makrodefinitionen.

Ein Beispiel finden Sie im Build-Skript in ot-efr32.

test

Ein Testskript kann für Nutzer hilfreich sein, Änderungen mit von Ihnen festgelegten Tests zu testen. Dabei kann es sich um einfache Tests wie das Ausführen von Funktionalitätsprüfungs-Builds oder auch um das Starten einer Unittest-Suite handeln.

In ot-efr32 führt das Skript einfach das Skript build für jedes unterstützte Board auf jeder efr32-Plattform aus.

Ein Beispiel finden Sie im Testskript in ot-efr32.

make-pretty

Um einen einheitlichen Stil zu gewährleisten, sollte das Skript Code, Skripts und Markdown-Dateien formatieren.

Sie können dieses Skript selbst definieren, aber es ist am einfachsten, das Skript make-pretty zu verwenden, das von vorhandenen Plattform-Repositories verwendet wird. Das Skript ruft die Stilskripts von openthread auf und sorgt für einen konsistenten Stil in allen OpenThread-Repositories.

Konfiguration des Verknüpfungsskripts

Das Skript GNU Linker beschreibt, wie alle Abschnitte in den Eingabedateien (.o-Objektdateien, die von der GNU Compiler Collection (GCC) generiert wurden) der endgültigen Ausgabe zugeordnet werden. (z. B. .elf) Außerdem werden der Speicherort jedes Segments eines ausführbaren Programms sowie die Eingabeadresse bestimmt. Das plattformspezifische Verknüpfungsskript wird häufig mit dem BSP der Plattform bereitgestellt.

Konfigurieren Sie das ld-Tool so, dass es mit target_link_libraries auf dem CMake-Ziel der Plattform in src/CMakeLists.txt auf das plattformspezifische Verknüpfungsskript verweist:

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
)

Toolchain-Startcode

Der Toolchain-Startcode wird häufig zusammen mit dem BSP der Plattform bereitgestellt. Dieser Code sieht in der Regel so aus:

  1. Implementiert die Eintragsfunktion (Reset_Handler) des ausführbaren Programms
  2. Definiert die Unterbrechungsvektortabelle
  3. Initialisiert den Heap und Stack
  4. Abschnitt .data aus nichtflüchtigem Speicher in RAM kopieren
  5. Springt zur Hauptfunktion der Anwendung, um die Anwendungslogik auszuführen

Der Startskript (C- oder Assembly-Quellcode) muss in der openthread-platform-name-Bibliothek Ihrer Plattform enthalten sein, da einige Schlüsselvariablen, die im Verknüpfungsskript verwendet werden, nicht korrekt in Anführungszeichen gesetzt werden können:

  • src/CMakeLists.txt

Beispiel: startup-gcc.c in ot-cc2538src/CMakeLists.txt

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