knb:firmware

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
knb:firmware [2021/05/01 11:22] – [Schnelleinstieg] goligoknb:firmware [2023/04/26 16:18] (aktuell) – [Schnelleinstieg] awickert
Zeile 13: Zeile 13:
 Das hier sind ohne viel Erklärung die Schritte aufgelistet um einmal die Quelltexte herunterzuladen und ein Firmware-Image zu erzeugen. Weiter unten wird dann genauer erklärt wie alles aufgebaut ist und zusammen spielt. So wie es hier steht ist es getestet auf Ubuntu 20.04 Desktop, sollte aber genauso auf anderen Linux-Distributionen funktionieren. Das hier sind ohne viel Erklärung die Schritte aufgelistet um einmal die Quelltexte herunterzuladen und ein Firmware-Image zu erzeugen. Weiter unten wird dann genauer erklärt wie alles aufgebaut ist und zusammen spielt. So wie es hier steht ist es getestet auf Ubuntu 20.04 Desktop, sollte aber genauso auf anderen Linux-Distributionen funktionieren.
  
-Dependencies installieren:+Git installieren:
 <code bash> <code bash>
-sudo apt install git make python2 libncurses5-dev libncursesw5-dev gcc g++ gawk+sudo apt-get update 
 +sudo apt-get install -y git
 </code> </code>
  
Zeile 26: Zeile 27:
 <code bash> <code bash>
 cd site-ffm cd site-ffm
 +</code>
 +
 +Dependencies installieren:
 +<code bash>
 +./scripts/install_build_dependencies.sh
 </code> </code>
  
Zeile 39: Zeile 45:
 Natürlich kann die Freifunk-Community in München nicht selber eigene Software für so viele verschiedene Routermodelle schreiben, sondern greift auf bestehende Opensource-Projekte zurück, die entsprechend den Anforderungen konfiguriert, kombiniert und angepasst werden, um zu einer Firmware zu kommen, die unseren Bedürfnissen entpricht. Natürlich kann die Freifunk-Community in München nicht selber eigene Software für so viele verschiedene Routermodelle schreiben, sondern greift auf bestehende Opensource-Projekte zurück, die entsprechend den Anforderungen konfiguriert, kombiniert und angepasst werden, um zu einer Firmware zu kommen, die unseren Bedürfnissen entpricht.
  
-Die Grundlage der Firmware ist **OpenWRT**, eine Linux-Distribution um die Standardfirmware von Endkunden-Routern zu ersetzen. Diese wird von **Gluon** erweitert und konfiguriert, so dass sie nicht mehr als normaler Heimnetzrouter funktioniert, sondern als Freifunk-Mesh-Router. **Freifunk München** wiederum sucht aus, für welche Router Firmware gebaut werden soll, welche Funktionen von Gluon aktiviert sind und hat zusätzliche Pakete geschrieben, um neue Funktionen hinzufügen.+Die Grundlage der Firmware ist **OpenWrt**, eine Linux-Distribution um die Standardfirmware von Endkunden-Routern zu ersetzen. Diese wird von **Gluon** erweitert und konfiguriert, so dass sie nicht mehr als normaler Heimnetzrouter funktioniert, sondern als Freifunk-Mesh-Router. **Freifunk München** wiederum sucht aus, für welche Router Firmware gebaut werden soll, welche Funktionen von Gluon aktiviert sind und hat zusätzliche Pakete geschrieben, um neue Funktionen hinzufügen.
  
-==== OpenWRT ====+==== OpenWrt ====
  
-[[https://openwrt.org/|OpenWRT Dokumentation]] +[[https://openwrt.org/|OpenWrt Dokumentation]] 
-[[https://openwrt.org/docs/guide-developer/source-code/start|OpenWRT Source Code]]+[[https://openwrt.org/docs/guide-developer/source-code/start|OpenWrt Source Code]]
  
-OpenWRT stellt alternative Router-Firmware für eine große Zahl von Endkunden-Routern (z.B. von D-Link, Netgear, TP-Link, AVM, Unifi) basierend auf Linux zur Verfügung. Dabei ist der Funktionsumfang von OpenWRT in der Regel größer als der der Originalfirmware und es gibt Updates für Modelle, die beim Hersteller schon aus der Wartung sind. +OpenWrt stellt alternative Router-Firmware für eine große Zahl von Endkunden-Routern (z.B. von D-Link, Netgear, TP-Link, AVM, Unifi) basierend auf Linux zur Verfügung. Dabei ist der Funktionsumfang von OpenWrt in der Regel größer als der der Originalfirmware und es gibt Updates für Modelle, die beim Hersteller schon aus der Wartung sind. 
  
-[[https://openwrt.org/toh/start?dataflt[Supported+Current+Rel*~]=19.07|Liste unterstützter Geräte der aktuellen Version 19.07]]+[[https://openwrt.org/toh/start?dataflt[Supported+Current+Rel*~]=21.02|Liste unterstützter Geräte der aktuellen Version 21.02]]
  
 Da es sich um eine Linux-Distribution handelt ist eine große Menge Software-Pakete verfügbar, der auf der Geräten installiert werden kann. Es gibt einen Paketmanager namens "opkg" mit dem Software aus dem Repository installiert werden kann. Da es sich um eine Linux-Distribution handelt ist eine große Menge Software-Pakete verfügbar, der auf der Geräten installiert werden kann. Es gibt einen Paketmanager namens "opkg" mit dem Software aus dem Repository installiert werden kann.
  
-[[https://openwrt.org/packages/index/start|OpenWRT Pakete]]+[[https://openwrt.org/packages/index/start|OpenWrt Pakete]]
  
-Der OpenWRT-Build ist umfangreich und komplex, aufgrund der Unterstützung vieler verschiedener Hardware-Plattformen. Da der Build in der Regel auf einem x86-64-System läuft, muss zunächst für jede Plattform eine entsprechende Cross-Compile-Toolchain aufgebaut werden, mit der dann der Linux-Kernel, das Userland und schliesslich die OpenWRT-Pakete für die jeweilige Plattform gebaut werden können. +Der OpenWrt-Build ist umfangreich und komplex, aufgrund der Unterstützung vieler verschiedener Hardware-Plattformen. Da der Build in der Regel auf einem x86-64-System läuft, muss zunächst für jede Plattform eine entsprechende Cross-Compile-Toolchain aufgebaut werden, mit der dann der Linux-Kernel, das Userland und schliesslich die OpenWrt-Pakete für die jeweilige Plattform gebaut werden können. 
  
 ==== Gluon ==== ==== Gluon ====
Zeile 63: Zeile 69:
 Gluon wird von vielen Freifunk-Communities genutzt. Es bietet genug Funktionalität in der Grundausstattung, um von kleinen Communities ohne viel Anpassung eingesetzt werden zu können, aber auch genug Flexibilität um eigene Komponenten einzubinden (wie zum Beispiel die Verwendung des Wireguard-Tunnels beim Freifunk München). Gluon unterstützt nur eine Teilmenge der Routermodelle, die für den Einsatz im Freifunk zweckmässig sind und getestet wurden. Gluon wird von vielen Freifunk-Communities genutzt. Es bietet genug Funktionalität in der Grundausstattung, um von kleinen Communities ohne viel Anpassung eingesetzt werden zu können, aber auch genug Flexibilität um eigene Komponenten einzubinden (wie zum Beispiel die Verwendung des Wireguard-Tunnels beim Freifunk München). Gluon unterstützt nur eine Teilmenge der Routermodelle, die für den Einsatz im Freifunk zweckmässig sind und getestet wurden.
  
-[[https://gluon.readthedocs.io/en/v2020.2.3/user/supported_devices.html|Unterstützte Geräte]]+[[https://gluon.readthedocs.io/en/v2021.1.1/user/supported_devices.html|Unterstützte Geräte v2021.1.1]]
  
-Der Gluon-Build funktioniert so, dass zunächst die Git-Repositories von OpenWRT und der zusätzlichen Gluon-spezifischen Pakete geladen werden. Dann werden Patches auf diese Projekte angewendet, um Fehler zu beheben, die im Upstream noch nicht gefixed sind, oder zusätzliche Features zu implementieren, die nicht über Pakete abgebildet werden können. Der OpenWRT-Build wird so konfiguriert, dass zum Beispiel das OpenWRT-UI LuCi weggelassen und durch das Gluon-UI ersetzt wird. Dann wird der OpenWRT-Build gestartet, um die Images zu bauen.+Der Gluon-Build funktioniert so, dass zunächst die Git-Repositories von OpenWrt und der zusätzlichen Gluon-spezifischen Pakete geladen werden. Dann werden Patches auf diese Projekte angewendet, um Fehler zu beheben, die im Upstream noch nicht gefixed sind, oder zusätzliche Features zu implementieren, die nicht über Pakete abgebildet werden können. Der OpenWrt-Build wird so konfiguriert, dass zum Beispiel das OpenWrt-UI LuCi weggelassen und durch das Gluon-UI ersetzt wird. Dann wird der OpenWrt-Build gestartet, um die Images zu bauen.
  
 ==== FFMUC ==== ==== FFMUC ====
Zeile 82: Zeile 88:
 Dann starten wir den Gluon-Build um die für Freifunk München angepassten Firmware-Images zu bauen.  Dann starten wir den Gluon-Build um die für Freifunk München angepassten Firmware-Images zu bauen. 
  
-===== Build Parameter =====+===== Branches & Tags ===== 
 + 
 +Es gibt im GitHub-Repository diverse Branches. Eine Übersicht und die Unterschiede der Branches sind im Artikel [[Contributing: Branches]] beschrieben. 
 +Wenn man das erste Mal einen anderen Remote-Branch auschecken will, so muss man ihn explizit mit angeben: 
 + 
 +<code bash> 
 +git checkout -b stable origin/stable 
 +</code> 
 + 
 +Wenn man zwischen den Branches `stable` und `next` wechselt, so sollte man vorher "make clean" machen, damit es nicht zu Komplikationen kommt. 
 + 
 +Für jeden Release gibt es einen Tag im Git-Repository. Um einen bestimmten Stand nochmal zu bauen, muss man also einen Checkout auf den gewünschten Tag machen, das geht so: 
 + 
 +<code bash> 
 +git checkout -b release tags/v2022.10.5 
 +</code> 
 + 
 +[[https://github.com/freifunkMUC/site-ffm/tags|Liste der Tags im GitHub]] 
 + 
 +===== Build Parameter & Umgebungsvariablen =====
  
 **GLUON_TARGETS** **GLUON_TARGETS**
  
-Hier kann man ein oder mehrere Targets angeben, für die Images gebaut werden sollen. Zum Testen empfiehlt sich eine VM zu benutzen, in der man x86-64 Images laufen lassen kann. Wenn man Firmware für ein bestimmtes Gerät bauen will, so muss man erst herausfinden, in welchem Target es enthalten ist. Hier lohnt sich ein Blick auf der Liste der unterstützten Geräte von OpenWRT oder Gluon.+Hier kann man ein oder mehrere Targets angeben, für die Images gebaut werden sollen. Zum Testen empfiehlt sich eine VM zu benutzen, in der man x86-64 Images laufen lassen kann. Wenn man Firmware für ein bestimmtes Gerät bauen will, so muss man erst herausfinden, in welchem Target es enthalten ist. Hier lohnt sich ein Blick auf der Liste der unterstützten Geräte von OpenWrt oder Gluon.
  
 <code bash> <code bash>
Zeile 99: Zeile 124:
 make GLUON_TARGETS="x86-64" JOBS="1" V=s  make GLUON_TARGETS="x86-64" JOBS="1" V=s 
 </code> </code>
 +
 +**GLUON_DEVICES**
 +
 +Erlaubt es Images nur für einzelne Geräte zu bauen. Den genauen Device-Namen findet man in der entsprechenden targets-Datei, als den ersten Parameter vom device()-Aufruf. 
 +
 +[[https://github.com/freifunk-gluon/gluon/tree/master/targets|Gluon targets]]
 +
 +Im unten stehenden Beispiel baut man nur das Image für den TP-Link WR841 v13, es können auch mehrere Devices und mehrere Targets angegeben werden.
 +
 +<code bash>
 +make GLUON_TARGETS="ramips-mt76x8" GLUON_DEVICES="tp-link-tl-wr841n-v13"
 +</code>
 +
 +**WEITERE**
 +
 +Gluon bietet eine Menge Umgebungsvariablen an, mit denen man den Build weiter konfigurieren kann, die vollständige Liste findet sich in der Gluon-Dokumentation:
 +
 +[[https://gluon.readthedocs.io/en/latest/user/getting_started.html#make-variables|Dokumentation Gluon Make Variablen]]
  
 Wenn man noch mehr Einfluss auf den Build nehmen will, so kann man den Gluon-Build direkt starten. Zuerst lässt man dafür "gluon-prepare" laufen, um das Git-Repository zu klonen und die Patches einzuspielen. Im Gluon-Verzeichnis kann man dann alle Gluon-Build-Parameter verwenden. Wenn man noch mehr Einfluss auf den Build nehmen will, so kann man den Gluon-Build direkt starten. Zuerst lässt man dafür "gluon-prepare" laufen, um das Git-Repository zu klonen und die Patches einzuspielen. Im Gluon-Verzeichnis kann man dann alle Gluon-Build-Parameter verwenden.
Zeile 125: Zeile 168:
 </code> </code>
  
 +===== Neue Geräte =====
 +
 +Die Motivation selber ein Firmware-Image zu bauen liegt oft darin, dass man ein Gerät hat, für das FFMUC keine Firmware anbietet. Da gibt es unterschiedliche Schwierigkeitsgrade, je nachdem wie weit der Support für diese Geräte in den zugrunde liegenden Frameworks schon vorhanden ist.
 +
 +=== Kein OpenWrt Support ===
 +
 +Als erstes ist zu prüfen, ob OpenWrt das Gerät schon unterstützt. Sollte dies nicht der Fall sein, sieht es schlecht aus. Ein neues Gerät in OpenWrt zu supporten ist aufwendig und verlangt tiefgehendes Wissen über den verwendeten SoC, den Boot-Prozess, weitere Hardware die darin verbaut ist. Hier heisst es warten, ob/wann eine Unterstützung in OpenWrt kommt. Leider gibt es viele beliebte FritzBox Geräte, für die es absehbar keine Unterstütung geben wird (z.B. 7390, 7490).
 +
 +=== Kein Gluon Support ===
 +
 +Wenn OpenWrt-Support vorhanden ist, aber kein Gluon-Support, dann sieht es schon etwas besser aus. Entweder ist das Gerät noch nicht vollständig unterstützt und deswegen absichtlich weggelassen oder es ist so exotisch, dass noch keiner danach verlangt hat. Man kann erstmal schauen, ob es vielleicht im "next" Branch schon enthalten ist, also für das kommende Release geplant ist. Man kann auch händisch die entsprechende Targets-Datei in Gluon dafür ergänzen bzw. anlegen und hat eine reelle Chance, dass ein funktionierendes Image herauskommt.
 +
 +[[https://github.com/freifunk-gluon/gluon/tree/master/targets|master-Branch Targets]]
 +[[https://github.com/freifunk-gluon/gluon/tree/next/targets|next-Branch Targets]]
 +
 +=== Kein FFMUC Support ===
 +
 +Das sollte eigentlich gar nicht passieren - die Liste der FFMUC-Geräte ist generiert aus Gluon, mittels contrib/genpkglist.py . Sollte ein Gerät bei uns fehlen, so muss man das nachgenerieren und in die site.mk kopieren, dann ist die Liste wieder aktuell:
 +
 +[[https://github.com/freifunkMUC/site-ffm/blob/stable/contrib/genpkglist.py|genpkglist.py]]
 +[[https://github.com/freifunkMUC/site-ffm/blob/stable/site.mk|FFMUC site.mk]]
  
  
  • knb/firmware.1619868143.txt.gz
  • Zuletzt geändert: 2021/05/01 11:22
  • von goligo