Firmware selber bauen: Unterschied zwischen den Versionen
Emploi (Diskussion | Beiträge) |
Emploi (Diskussion | Beiträge) (→Firmware konfigurieren: lede zu openwrt) |
||
Zeile 56: | Zeile 56: | ||
Die Firmware kann für verschieden Plattformen (Chipsets) gebaut werden. Alle aktuell unterstützten Plattformen/Geräte sind in <code>build.targets</code> definiert. Abhängig von der gewählten Plattform werden entweder gleich alle Router-Firmware-Varianten gebaut oder es muss jedes einzelne Geräte angegeben werden. | Die Firmware kann für verschieden Plattformen (Chipsets) gebaut werden. Alle aktuell unterstützten Plattformen/Geräte sind in <code>build.targets</code> definiert. Abhängig von der gewählten Plattform werden entweder gleich alle Router-Firmware-Varianten gebaut oder es muss jedes einzelne Geräte angegeben werden. | ||
− | Dabei gibt es für jede dieser Zeilen ein eigenes Config-File im Verzeichnis '' | + | Dabei gibt es für jede dieser Zeilen ein eigenes Config-File im Verzeichnis ''openwrt-configs''. Für mehr Informationen dazu siehe die Kommentare in diesem File. |
− | |||
=== Firmware bauen === | === Firmware bauen === |
Version vom 4. Dezember 2022, 13:48 Uhr
Die Firmware kann entweder unter Download fertig kompiliert herruntergeladen werden oder man kann sich diese selber bauen.
Ein Knoten, welcher aus diesem Repository gebaut wird, taucht dann als 'Alternativer' Knoten in der Hotspot-Liste auf. Werden keine weiteren Anpassungen gemacht, erfüllt dieser die Knoten Spezifikation.
Bei Anpassungen müssen diese Spezifikationen aber weiterhin sichergestellt sein! Falls das nicht möglich ist, bitte kontaktiert Freifunk Dresden diesbezüglich. Dann können wir sehen, inwieweit davon abgewichen werden kann.
Hinter dieser Spezifikation stecken verschiedene Ideen, um anderen Leuten eine bestimmte Funktionalität zu garantieren.
Inhaltsverzeichnis
Quellcode
Haupt Git-Repository
Das Haupt Repository ist öffentlich (schreibgeschützt) enthält immer jede Änderung. Der Hauptserver implementiert dazu einen Linux-Container.
HTTPS: https://gitlab.freifunk-dresden.de/firmware-developer/firmware.git SSH: ssh://git@git.freifunk-dresden.de:2201/~/firmware.git
Github
Github enthält einen relativen stabilen Softwarestand,wird aber nur in größeren Abständen synchronisiert.
https://github.com/Freifunk-Dresden/firmware-freifunk-dresden
Firmware Bauen
Entwicklungsumgebung
Die Entwicklungsumgebung ist ein Linux. Die Firmware wurde bisher immer auf einem Ubuntu-System entwickelt. Bei Nutzung anderer Linux-Distributionen müssen evt. weitere Softwarepakete installiert werden, die hier nicht aufgeführt sind.
System: mind. Ubuntu 20.04 64bit
Benötigte Softwarepakete
- Aktualisieren der Paketliste und bereits installierter Pakete:
apt-get update && apt-get full-upgrade -y
- Falls notwendig (z.B. in Dockercontainern oder auf Serverinstallationen, wo es fehlt).
DEBIAN_FRONTEND ist notwendig wenn Timezone Pakete installiert und konfiguriert werden sollen. Diese erfordern normalerweise eine Nutzerinteraktion, was aber beim Installieren in Docker-Containern nicht möglich ist.
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
- Installieren der notwendigen Pakete
apt-get install -y nodejs git build-essential devscripts debhelper \ dh-systemd python python3 dh-python libssl-dev libncurses5-dev unzip \ gawk zlib1g-dev subversion gcc-multilib flex gettext curl \ wget time rsync jq \ python3-pip python3-pypathlib python-pathlib2 python-scandir \ automake autoconf m4
Firmware-Checkout
Um die Firmware auf den eigenen Rechner zu bringen, wird das Kommando git verwendet. Wechsel dazu im Usermodus (Nicht ROOT!) auf dem Entwicklungsrechner (wo die Firmware gebaut werden soll) in ein Verzeichnis, in welchem git das eigentliche Firmware-Verzeichnis anlegen soll.
git clone https://gitlab.freifunk-dresden.de/firmware-developer/firmware.git cd firmware
Firmware konfigurieren
Die Firmware kann für verschieden Plattformen (Chipsets) gebaut werden. Alle aktuell unterstützten Plattformen/Geräte sind in build.targets
definiert. Abhängig von der gewählten Plattform werden entweder gleich alle Router-Firmware-Varianten gebaut oder es muss jedes einzelne Geräte angegeben werden.
Dabei gibt es für jede dieser Zeilen ein eigenes Config-File im Verzeichnis openwrt-configs. Für mehr Informationen dazu siehe die Kommentare in diesem File.
Firmware bauen
Das Bauen übernimmt dann das Script build.sh
.
$ ./build.sh Version: 13 usage: build.sh list | search <string> | clean | feed-revisions | (target | all | failed [menuconfig ] [rerun] [ <make params ...> ]) list - lists all available targets list-targets - lists only target names for usage in IDE search - search specific router (target) clean - cleans buildroot/bin and buildroot/build_dir (keeps toolchains) feed-revisions - returns the git HEAD revision hash for current date (now). The revisions then could be set in build.json target - target to build (can have regex) that are defined by build.json. use 'list' for supported targets. 'all' - builds all targets 'failed' - builds only previously failed or not built targets 'ramips.*' - builds all ramips targets only 'ramips.rt305x.generic' - builds exact this target '^rt30.*' - builds all that start with 'rt30' 'ramips.mt7621.generic ar71xx.tiny.lowmem' - space or pipe separates targets 'ramips.mt7621.generic | ar71xx.tiny.lowmem' menuconfig - displays configuration menu rerun - enables a second compilation with make option 'V=s' If first make failes a second make is tried with this option make params - all paramerters that follows are passed to make command
list liefert Informationen über die aktuell möglichen Targets. Verschiede Targets können dabei aber mit verschiedenen Versionen von openwrt, feeds, files gebaut werden. Das hängt davon ab, wie die Unterstützung durch openwrt noch gegeben ist.
$ ./build.sh list ------------------------------------------------------------------------------------------------------------ Name | Openwrt | Openwrt | Openwrt | Feeds | Files | Patches | Build date | Revision | Variant | Selector | | | | ----------------------------------------+------------+----------+----------+----------+---------+----------- + ar71xx.tiny.lowmem | 5625f5b | lowmem | 18.06 | 18.06 | 18.06 | 18.06 | Fr 27. Aug + ar71xx.generic.lowmem | 5625f5b | lowmem | 18.06 | 18.06 | 18.06 | 18.06 | Fr 27. Aug - ar71xx.generic | b12284a | | 19.07 | 19.07 | | 19.07 | - ar71xx.generic.gl-mifi | b12284a | | 19.07 | 19.07 | | 19.07 | + ar71xx.nand | b12284a | | 19.07 | 19.07 | | 19.07 | Mi 25. Aug + x86.generic | b12284a | | 19.07 | 19.07 | | 19.07 | Mi 25. Aug + x64.generic | b12284a | | 19.07 | 19.07 | | 19.07 | Fr 27. Aug - ramips.mt7621.generic | b12284a | | 19.07 | 19.07 | | 19.07 | - ramips.mt7621.ubnt-edge | b12284a | | 19.07 | 19.07 | | 19.07 | + ramips.mt76x8.generic | b12284a | | 19.07 | 19.07 | | 19.07 | Mi 25. Aug + ramips.rt305x.tiny.lowmem | 5625f5b | lowmem | 18.06 | 18.06 | 18.06 | 18.06 | Fr 27. Aug + lantiq.xrx200 | b12284a | patchset-1 | 19.07 | 19.07 | | 19.07 | Fr 27. Aug + lantiq.xway | b12284a | | 19.07 | 19.07 | | 19.07 | Fr 27. Aug + sunxi.cortexa7.generic | b12284a | | 19.07 | 19.07 | | 19.07 | Mi 25. Aug - ath79.generic | b12284a | | 19.07 | 19.07 | | 19.07 | - ath79.generic.smallbuffers | b12284a | | 19.07 | 19.07 | | 19.07 | + ipq40xx.generic | b12284a | | 19.07 | 19.07 | | 19.07 | Fr 27. Aug + ipq40xx.generic.fr-1200 | b12284a | | 19.07 | 19.07 | | 19.07 | Fr 27. Aug + bcm53xx.generic.arm | b12284a | arm | 19.07 | 19.07 | | 19.07 | Mi 25. Aug + mpc85xx.p1020 | b12284a | | 19.07 | 19.07 | | 19.07 | Mi 25. Aug - 21.ath79.generic | 134ac82 | | 21.02 | 21.02 | 21.02 | 21.02 | ------------------------------------------------------------------------------------------------------------
Neue Plattformen hinzufügen
Das Hinzufügen neuer Targets ist etwas komplex.
Wenn ein Router hinzugefügt werden soll, für den es ein Target bereits existiert, so sollte das generic target genutzt werden.
Beispiel (sobald der Befehl ausgeführt wird, werden evtl. bereits erstellte Targets gelöscht):
./build.sh ar71xx.generic menuconfig
Nun wird die Konfiguration von openwrt angezeigt, in der ein neuer Router hinzugefügt werden kann. Alles andere bleibt unverändert. Nach dem Speichern und beenden, wird das entsprechende Config-File in openwrt-config/.../ automatisch angepasst.
Gebaut wird dann mit
./build.sh ar71xx.generic
Muss eine neue Plattform angelegt werden, so erfolgt diese in mehreren Schritten:
- Anlegen eines neuen Eintrages in build.json .Meist wird generic verwendet, nur bei speziellen Anpassungen kann hier ein anderer Name spezifiziert werden. Dieses dient dazu verschiedene Openwrt-Buildumgebungen nebeneinander zu halten, die unterschiedliche Patches beinhalten.
Hat man zwei Router mit speziellen nachträglichen Anpassungen (via patches), so können diese sich gegenseitig stören und Funktionalitäten unkontrolliert beeinflussen. Damit das nicht passiert, können für eine Plattform diese Build-Umgebungen getrennt werden. - Aufruf des Buildsystems mit 'menuconfig'
./build.sh platform.generic menuconfig
Unterhalb des Konfigurationsverzeichnisses openwrt-config gibt es für jede unterstützte Openwrt Version ein eigenes Verzeichnis (18.06, 19.04, 21.04).
Hier liegt bereits eine default configuration, die beim Aufruf von build.sh automatisch als Vorlage dient, so dass mit dem Konfigurationsmenu nur noch die Freifunk Dresden spezifischen Dinge gewählt werden müssen.