Firmware selberbauen

Aus Freifunk München
Wechseln zu: Navigation, Suche

Die Freifunk-Firmware ist open source und kann bei vorhandener technischer Kompetenz selbst gebaut werden.

Leser werden gebeten, ihre eigenen Erfahrungen insb. mit nativen Maschinen zu ergänzen und dabei insb. aufgetretene Probleme samt Lösungen darzustellen.

Voraussetzungen / Entwicklungsumgebung / Linux unter Windows[Bearbeiten | Quelltext bearbeiten]

Zum Bau bedarf es einer Linux-Umgebung, je mehr Kerne desto besser, mindestens 3GB RAM und Swap.

Windows-Anwender können sich mit dem Produkt VirtualBox eine virtuelle Maschine einrichten, auf der sie einen Linux-Version (z.B. Ubuntu Desktop) installieren. VirtualBox nutzt in der Standard-Installation nicht den gesamten Bildschirm, daher sollten auch der Guest Additions update for Linux guests von VirtualBox herunter geladen und installiert werden.

Ablauf:

  1. VirtualBox herunter laden und installieren.
  2. Ubuntu herunter laden.
  3. In VirtualBox eine neue virtuelle Maschine (VM) für Ubuntu einrichten.
  4. Das Ubuntu-Image in der VM installieren; die eigenen Windows-Daten werden nicht berührt, genau dafür hat man die virtuelle Maschine.
  5. Nach der Installation will Ubuntu neu starten. Beim Ausprobieren gab es einen Fehler mit einem Hinweis auf das BIOS. Die VM beenden und neu starten. Nun sollte Ubuntu laufen, aber das Fenster ist zu klein.
  6. Bei Bedarf: Guest Additions update for Linux guests gemäß Anleitung auf der Website von VirtualBox installieren und VM neu starten. Nun wird der gesamte Bildschirm verwendet. - Sofern die Guest Additions nicht automatisch starten oder von Ubuntu hartnäckig in einem falschen Verzeichnis gesucht werden, können sie auch manuell gestartet werden. Dazu assoziert man das Image in VirtualBox in Maschine-Ändern-Massenspeicher mit dem CD-Laufwerk. In Ubuntu ist dann der Image-Inhalt wie bei einer eingelegten CD sichtbar und autorun kann manuell gestartet werden.
  7. Terminal öffnen und die Schritte bei Firmware bauen ausführen, bei Test in einer virtuellen Maschine sollte von ca. 14 Stunden Laufzeit ausgegangen werden, was einen Start am frühen Morgen oder einen Lauf über Nacht nahelegt.

Beachte: Der Rechner braucht auch während des make (s.u.) eine möglichst schnelle Internetverbindung.

Firmware bauen[Bearbeiten | Quelltext bearbeiten]

Anweisungen[Bearbeiten | Quelltext bearbeiten]

sudo apt-get install build-essential git subversion gawk unzip libncurses-dev libz-dev libssl-dev python
git clone https://github.com/freifunkMUC/site-ffm.git site-ffm
cd site-ffm
make V=s

Im Verzeichnis des aktuellen Benutzers wird ein Unterverzeichnis /site-ffm/ eingerichtet, in dem sich alles weitere befindet.

Platzbedarf[Bearbeiten | Quelltext bearbeiten]

Die Angaben dazu sind unklar. In einer alten Version dieses Artikels wurde von 32 GB gesprochen, wobei nicht klar war, was mit den 32 GB genau abgedeckt ist.

Eine neu aufgesetzte virtuelle Maschine mit Ubuntu Desktop 16.04 (64 Bit) wurde mit einer virtuellen 128 GB Platte (in VirtualBox konfiguriert mit dynamischer Allozierung) versorgt. Vor dem Make waren laut Dateimanager noch ca. 122 GB frei, nach dem Durchlauf waren es noch ca. 75 GB. Damit errechnet sich ein Gesamtbedarf von ca. 47 GB zzgl. Platz für das Betriebssystem (Stand Juli 2016). Das Output-Verzeichnis, in dem sich u.a. die Firmware-Images befinden, belegt davon 1,1 GB.

Nicht gemessen wurde der Platzbedarf während des Laufes, evtl. ist zusätzlicher Platz für temporäre Dateien gegeben, die während oder nach dem Lauf wieder gelöscht werden.

Laufzeit[Bearbeiten | Quelltext bearbeiten]

Laufzeitangaben sind stets abhängig von der verwendeten Hardware und weichen stark voneinander ab.

Berichtet wurde von 17 Stunden mit einem 1,7 GHz-Prozessor, mutmaßlich mit einer virtuellen Maschine.

Berichtet wurde aber auch von 35 Minuten ohne Toolchain und unter 2 Stunden mit Toolchain für eine native Maschine mit Quadcore. Keine Aussage war für eine neu aufgesetzte native Maschine zu gewinnen.

Auf einem i7-4790K @ 4.00GHz (Quad-Core) mit 16GB RAM und einer 6000er Internet-Verbindung hat die Übersetzung nativ unter Debian gemäß obiger Anleitung 1 Std 45 Min gedauert.

Die nachfolgenden Werte basieren auf einer in VirtualBox aufgesetzten virtuellen Maschine für Ubuntu Desktop 16.04 ohne zusätzlich vorinstallierte Software. D.h., unmittelbar nach dem Aufsetzen der VM und einer Software-Aktualisierung (apt-get update bzw. apt-get upgrade) wurden die vier Anweisungen ausgeführt.

Die VM wurde unter Windows 10 auf einem Toshiba Laptop mit einem i5-Prozessor mit 2,3GHz installiert. Bei der VM wurde nicht den Empfehlungen von der Ubuntu-Website gefolgt. Stattdessen wurde die VM gemäß den Voreinstellungen und Empfehlungen von VirtualBox mit (nur) einem virtuellen Prozessor und 1 GB virtuellem Hauptspeicher aufgesetzt. Es ergaben sich für die Befüllung der Factory-Images (Verzeichnis /site-ffm/output/images/) ca. 3 Stunden für die Erzeugung der ersten und fast 14 Stunden für die Erzeugung der letzten Datei. Die gemessenen Zeiten basieren auf dem Startzeitpunkt des make und dem Zeitstempel der erzeugten Dateien. (Stand Juli 2016)

Probleme[Bearbeiten | Quelltext bearbeiten]

Hier gibt es sich widersprechende Aussagen.

  • Ein Testlauf brach ab, da ein Webserver, von dem Dateien nachgeladen werden sollten, offline war. Die fragliche Datei war bei den OpenWrt-Mirrors gar nicht im Angebot.
  • Berichtet wurde, dass die Kompilation nur mit einem Prozessor funktioniert, aber das Kompilieren funktioniert nachgewiesen auch mit vier Prozessoren.
  • Unter openSUSE bricht der Build-Prozess mit einem Fehler ab, da der verwendete gcc (Version 5) keine minor-Version zurückmeldet. In der Datei site-ffm/gluon-build/openwrt/build_dir/host/node-v0.12.14/configure war folgende Änderung erforderlich (vgl. https://github.com/nodejs/node-v0.x-archive/issues/25578):
--- configure.orig      2016-12-27 19:51:32.853282721 +0100
+++ configure 2016-12-27 19:28:02.388063665 +0100
@@ -484,6 +484,14 @@
stdout=subprocess.PIPE)
version = tuple(map(int, proc.communicate()[0].split('.')))

+ # gcc-5 returns "(5,)", but later cc_version requires at least 2 parameters
+ # existing in version tuple.
+ if len(version) < 2 :
+ proc = subprocess.Popen(shlex.split(CC) + ['--version'],
+ stdout=subprocess.PIPE)
+ minor_version = int(proc.communicate()[0].split('.')[1])
+ version = (version[0],minor_version)
+
return (version, is_clang)

Anmerkungen[Bearbeiten | Quelltext bearbeiten]

  • V=s fügt Verbosity hinzu, nicht nötig für build
  • -jXX Parameter wird vom Makefile ergänzt
  • Images im Benutzerverzeichnis und dort in /site-ffm/output/images

Firmware updaten[Bearbeiten | Quelltext bearbeiten]

cd site-ffm
git remote set-url origin https://github.com/freifunkMUC/site-ffm.git
git fetch origin
git checkout # Falls "git checkout" meckert, dann: git pull make update

Konfiguration der Firmware[Bearbeiten | Quelltext bearbeiten]

Der überwiegende Teil der Freifunk-Communities nutzt die auch von Freifunk-München verwendete Firmware. Die verwendete Software gluon ist ein Framework über openWrt. Anders formuliert: Hardware -> Hardwareabstraktionsschicht und Bootloader -> openWrt -> gluon.

Gluon wird konfiguriert über die Datei site.conf. Die Datei befindet sich nach dem git-clone im Verzeichnis site-ffm, sie wird während des Gluon-Built gelesen.

Abnahmekriterien[Bearbeiten | Quelltext bearbeiten]

Siehe Abnahmekriterien Firmware.