Kompilieren der Meshtastic Firmware
Anleitungen wie man die Meshtastic Firmware mittels Visual Studio Code und der PlatformIO IDE oder der Kommandozeile mit PlatformIO Core kompiliert. Meshtastic ist ein quelloffenes, von anderer Infrastruktur unabhängiges, dezentrales Mesh-Netzwerk, das auf günstigen Geräten mit geringem Stromverbrauch läuft. Für die Kommunikation zwischen den Geräten verwendet es LoRa. Aufgrund von LoRa ist die mögliche Datenrate niedrig, so dass es sich nur für den Austausch von Textnachrichten, Sensordaten und anderen datensparsamen Nachrichten eignet. Theoretisch kann man alles übertragen, aber die geringe Datenrate schränkt den praktischen Nutzen größerer Datenmengen ein. Vor allem in der EU mit einem Duty Cycle von 10 % reicht die verfügbare Bandbreite nicht für größere Daten wie Bilder oder Sprache. Dennoch handelt es sich um ein interessantes Projekt, mit dem man experimentieren oder nützliche Anwendungen entwickeln kann, ohne auf zentrale Infrastruktur angewiesen zu sein. Es gibt viele vorgefertigte Builds der Firmware für viele verschiedene Geräte, die entweder über den Meshtastic Web Flasher oder als Download von der GitHub Meshtastic Firmware Releases Seite verfügbar sind. Allerdings decken diese nicht alle unterstützten Geräte ab. Diese Schritt-für-Schritt-Anleitung soll diese Lücke schließen und es ermöglichen die Firmware für weitere von Meshtastic unterstützte Geräte zu erstellen. Hier werden zwei Wege beschrieben, um die Firmware zu erstellen: Kurz und knapp. Siehe weiter unten für die ausführliche Anleitung mittels Visual Studio Code oder mit der Kommandozeile. Für die folgenden Kommandos müssen In dieser Anleitung verwende ich Visual Studio Code, da die Installation der notwendigen PlatformIO IDE Erweiterung in Open Source Versionen von Visual Studio Code nicht so einfach ist. Stelle sicher, dass die PlatformIO IDE Erweiterung installiert ist. Für weiter Details zur Installation siehe auch die Installationsanleitung für Visual Studio Code. Sobald die Erweiterung installiert ist, kann das Git-Repository direkt aus Visual Studio Code heraus geklont werden. Wähle Repository klonen und gebe anschließend Wenn das Repository bereits geklont wurde, kann der Ordner direkt geöffnet werden, in dem es sich befindet. Nachdem Öffnen folgt die Frage Vertrauen Sie den Autoren der Dateien in diesem Ordner? Bestätige dies mit Ja, ich vertraue den Autoren, damit Erweiterungen aktiviert werden. PlatformIO IDE führt dann zusätzliche Installationsschritte im Hintergrund durch. Nach Abschluss dieser klicke auf Jetzt Neuladen. Nach dem Neuladen konfiguriert PlatformIO IDE das Projekt (Meshtastic Firmware). Dies dauert auch einen Moment. Ich habe die Dev Containers Erweiterung nicht installiert, indem ich die Meldung mit klicken auf x geschlossen habe. Diese Erweiterung ist für das Kompilieren der Firmware nicht notwendig. Optional: Um eine bestimmte Version der Meshtastic Firmware zu kompilieren, wähle das entsprechende Git-Tag aus. Klicke dazu auf master (das ist der aktuell ausgewählte Git-Branch) in der unteren linken Ecke. Für die Version 2.6.13, gib Falls noch nicht geschehen, wechsel zur PlatformIO IDE Ansicht. Wähle das gewünschte Gerät, für das die Firmware kompiliert werden soll, unter Project Tasks im oberen linken Bereich aus. Das Aufklappen der Aufgaben eines Geräts dauert einen Moment und die Ansicht wird anschließend neu geladen. Nach dem Neuladen der Ansicht muss das Gerät erneut ausgewählt werden. Unter Project Tasks können verschiedene Aufgaben pro Gerät ausgewählt werden: Upload (Flashen) der Firmware mittels Upload Aufgabe ist abhängig vom Gerät. Einige Geräte können direkt mittels Upload aktualisiert werden, während andere zunächst in einem entsprechenden Zustand zu versetzen sind, damit sie eine neue Firmware mittels Upload akzeptieren. Dann gibt es noch Geräte, die als externes Laufwerk erscheinen, worauf die kompilierte Firmwaredatei kopiert wird und dadurch die Firmware auf das Gerät gelangt. Ein erfolgreiches Kompilieren der Firmware wird mit dem Text SUCCESS im Terminal Fenster angezeigt. Nun sollte die Firmware erfolgreich gebaut oder sogar mittels Upload auf dem Gerät sein. Die erstellten Firmware Dateien befinden sich im Meshtastic Firmware Projektordner unter PlatformIO Core ist eine Kommandozeilenschnittstelle (CLI), das Herzstück des PlatformIO Ökosystems. Um PlatformIO Core zu installieren, folge den Schritten in der Installationsanleitung. Alternativ bieten einige Linux Distributionen auch direkt Pakete an, die mithilfe der jeweiligen Paketverwaltung installierbar sind. Z.b.: Als Erstes muss das Meshtastic Firmware Repository mit Der obige Befehl klont das Meshtastic Firmware Repository in Git-Repositorien können weitere Git-Repositorien enthalten, diese nennt man Submodule. Das Meshtastic Firmware Repository verwendet Submodule. Um sie zu Initialisieren und Aktualisieren führe Optional: Um eine bestimmte Version der Meshtastic Firmware zu kompilieren, muss das entsprechende Git-Tag ausgecheckt werden, z.B. mit Wenn man ein Git-Tag auscheckt, ohne dabei ein Git-Branch zu erstellen, wird ein losgelösten HEAD erstellt. Wenn man mit git nicht vertraut ist, kann dies verwirrend sein. Wenn man lediglich eine bestimmte Firmwareversion kompilieren möchte, braucht man der Meldung keiner weiteren Beachtung zu schenken. Alternativ kann man beim Aus-checken eines Git-Tags auch direkt einen Git-Branch erstellen. Mit Wenn man zu einem anderen Branch wechselt oder ein Tag aus-checkt, sind unter Umständen die Submodule nicht mehr aktuell bzw. nicht mehr auf dem selben Stand des Branches oder Tags. Mittels Mit dem Befehl Um die Firmware zu kompilieren, führe Ein erfolgreicher Build der Firmware sollte folgende Ausgabe erzeugen: Die Entwicklung der Meshtastic Firmware geht schnell voran. In etwa jede Woche erscheint eine neue Version (Release). Um den Quelltext aktuell zu halten, führe Inhaltsverzeichnis
Meshtastic
tl;dr
git und PlatformIO Core installiert sein.# Das Meshtastic Firmware Repository klonen
git clone https://github.com/meshtastic/firmware.git
# In das Projektverzeichnis wechseln
cd firmware
# Git Submodule Initialisieren und Aktualisieren
git submodule update --init
# Verfügbare Git-Tags anzeigen
git tag
# Ein Git-Tag aus-checken und gleichzeitig einen Git-Branch erstellen
git checkout -b v2.6.13 v2.6.13.0561f2c
# Git Submodule erneut aktualisieren
git submodule update
# Firmware für nugget-s3 kompilieren
pio run -e nugget-s3-lora
# Oder direkt kompilieren und auf das Gerät laden
pio run -e nugget-s3-lora --upload-port /dev/ttyACM0 --target upload
# Einige Tage/Wochen später... Den Quelltext und die Submodule aktualisieren
git pull --recurse-submodules
# Zum master Branch wechseln
git switch master
# Git Submodule aktualisieren
git submodule update
# Build (Kompilieren)
pio run ...
# Oder ein Tag auschecken und dabei ein Branch erstellen
git checkout -b v2.7.2 v2.7.2.f6d3782
# Git Submodule aktualisieren
git submodule update
# Build
pio run ...
# Liste der Umgebungen (Geräte), ausführlich
pio project config
# Liste der Umgebungen (Geräte), nur Namen
pio project config | grep "^env:" | cut -d':' -f2- | sort
Kompilieren mit Visual Studio Code
https://github.com/meshtastic/firmware.git ein und bestätige dies mit Enter. Anschließend kann das Ziel zum Speichern nach persönlicher Präferenz gewählt werden. Ich verwende ~/git/meshtastic-firmware.v2.6.13 ein und wähle das passende Tag (v2.6.13.0561f2) aus..pio/build/. Kompilieren in der Kommandozeile mit PlatformIO Core
dnf install platformiorpm-ostree install platformiopacman -S platformiogit clone https://github.com/meshtastic/firmware.git meshtastic-firmware geklont werden. git muss installiert sein, um den Befehl auszuführen.meshtastic-firmware. Ich speicher die Repositorien in ~/git/ in meinem Heimatverzeichnis. Da ich auch andere Projekte habe, die den selben Namen haben, stelle ich ein Präfix voran. Wie du deine Daten organisierst, bleibt dir überlassen. Du kannst Unterverzeichnisse wie z.B. ~/Projekte/meshtastic verwenden und es dorthin klonen ohne dabei meshtastic-firmware mit anzugeben. Nehmen wir also an, man befindet sich im Verzeichnis ~/Projekte/meshtastic und führt git clone https://github.com/meshtastic/firmware.git aus, was zu ~/Projekte/meshtastic/firmware führt.$ git clone https://github.com/meshtastic/firmware.git meshtastic-firmware
Klone nach 'meshtastic-firmware'...
remote: Enumerating objects: 65651, done.
remote: Counting objects: 100% (349/349), done.
remote: Compressing objects: 100% (217/217), done.
remote: Total 65651 (delta 260), reused 136 (delta 132), pack-reused 65302 (from 4)
Empfange Objekte: 100% (65651/65651), 110.86 MiB | 8.00 MiB/s, fertig.
Löse Unterschiede auf: 100% (48144/48144), fertig.
git submodule update --init aus.$ cd meshtastic-firmware
$ git submodule update --init
git checkout v2.6.13.0561f2c.git checkout -b v2.6.13 v2.6.13.0561f2c wird der Git-Branch v2.6.13 aus dem Git-Tag v2.6.13.0561f2c erstellt.$ git checkout v2.6.13.0561f2c
M protobufs
Hinweis: Wechsle zu 'v2.6.13.0561f2c'.
Sie befinden sich im Zustand eines 'losgelösten HEAD'. Sie können sich
umschauen, experimentelle Änderungen vornehmen und diese committen, und
Sie können alle möglichen Commits, die Sie in diesem Zustand machen,
ohne Auswirkungen auf irgendeinen Branch verwerfen, indem Sie zu einem
anderen Branch wechseln.
Wenn Sie einen neuen Branch erstellen möchten, um Ihre erstellten Commits
zu behalten, können Sie das (jetzt oder später) durch Nutzung von
'switch' mit der Option -c tun. Beispiel:
git switch -c <neuer-Branchname>
Oder um diese Operation rückgängig zu machen:
git switch -
Sie können diesen Hinweis ausschalten, indem Sie die Konfigurationsvariable
'advice.detachedHead' auf 'false' setzen.
HEAD ist jetzt bei 12680ad9c Update README.md
git submodule update bringt man die Submodule auf den richtigen Stand. Die --init Option vom ersten Ausführen wird nun nicht mehr benötigt.pio project config erhält man eine ausführliche Liste aller unterstützten Geräte, wofür die Meshtastic Firmware kompiliert werden kann. Mit dem Kommando werden alle Möglichen Umgebungen und ihre Parameter angezeigt. Wir sind jedoch nur an den Namen der Umgebung, der wiederum für ein Gerät steht interessiert. Um nur die Namen der Umgebungen anzuzeigen, kann man pio project config | grep "^env:" | sort verwenden.pio run -e <environment> aus, z.B. pio run -e nugget-s3-lora. Man kann die Firmware auch direkt auf das Gerät flashen (Upload), dazu sind einige weitere Optionen notwendig: pio run -e nugget-s3-lora --upload-port /dev/ttyACM0 --target upload. Stelle dabei sicher, den korrekten Pfad zum Gerät (/dev/tty...) anzugeben. Unter welchen Pfad das Gerät zu finden ist, kann man mit journalctl -f oder sudo dmesg herausfinden, während man das Gerät anschließt.===================== [SUCCESS] Took 19.37 seconds =====================
Environment Status Duration
-------------- -------- ------------
nugget-s3-lora SUCCESS 00:00:19.370
====================== 1 succeeded in 00:00:19.370 ======================
Den Quelltext aktuell halten
git pull --recurse-submodules aus. Anschließend kann man zum master Branch wechseln, was die neueste Version in der Entwicklung befindend entspricht. Oder man verwendet Git-Tags um zu einer spezifischen Version zu wechseln. Mit dem Befehl git tag kann man sich alle verfügbaren Tags anzeigen lassen, was einer Version bzw. einem Release der Firmware entspricht. Wie zuvor beschrieben, kann man somit eine neue Firmware kompilieren. Referenzen






