Firmware selber bauen: Unterschied zwischen den Versionen

Aus Freifunk Dresden - Anwender-Wiki
Zur Navigation springen Zur Suche springen
Zeile 10: Zeile 10:
  
 
= Quellcode =
 
= Quellcode =
== Github ==
 
Github enthält einen relativen stabilen Softwarestand. Jede freigegebene Software erhält einen Tag.
 
 
https://github.com/Freifunk-Dresden/firmware-freifunk-dresden
 
  
 
== Haupt Git-Repository ==
 
== Haupt Git-Repository ==
Zeile 20: Zeile 16:
 
  HTTPS: https://gitlab.freifunk-dresden.de/firmware-developer/firmware.git
 
  HTTPS: https://gitlab.freifunk-dresden.de/firmware-developer/firmware.git
 
  SSH: ssh://git@git.freifunk-dresden.de:2201/~/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 ==
 
== Firmware Bauen ==
Zeile 51: Zeile 52:
 
Das Bauen übernimmt dann das Script <code> build.sh</code>.
 
Das Bauen übernimmt dann das Script <code> build.sh</code>.
  
  ./build.sh all
+
<pre>
 +
> ./build.sh
 +
Version: 6
 +
usage: build.sh list | clean | feed-revisions | (target | all [menuconfig ] [rerun] [ <make params ...> ])
 +
list            - lists all available targets
 +
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
 +
          'ramips.*'              - builds all ramips targets only
 +
          'ramips.rt305x.generic' - builds exact this target
 +
          '^rt30.*'              - builds all that start with 'rt30'
  
Alle Parameter dahinter werden an den make Prozess weitergeleitet. "list" zeigt die verfügbaren Pfade an. Ohne Parameter erscheint die Hilfe.
+
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
  
~/firmware-freifunk-dresden$ ./build.sh list
+
</pre>
  ar71xx.tiny                                        
+
''list'' liefert Informationen über die aktuell möglichen Targets. Verschiede Targets können dabei
  ar71xx.generic                          
+
aber mit verschiedenen Versionen von openwrt, feeds, files gebaut werden. Das hängt davon ab, wie die
  x86.generic                            
+
Unterstützung durch openwrt noch gegeben ist.
  ramips.mt7621.ubiquiti-edgerouter-x    
+
<pre>
  ipq40xx.generic
+
./build.sh list
 +
-------------------------------------------------------------------------------------------------
 +
target                              | wrt_rev | wrt_var | config  | feeds  | files  | patches
 +
--------------------------------------+---------+---------+---------+---------+---------+--------
 +
  ar71xx.tiny.lowmem                  | f6de1fa | lowmem  | 18.06  | 18.06  |        | 18.06
 +
ar71xx.generic.lowmem                | f6de1fa | lowmem  | 18.06  | 18.06  |        | 18.06
 +
ar71xx.generic                      | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
  ar71xx.generic.gl-mifi              | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
ar71xx.nand                          | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
  x86.generic                         | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
x64.generic                          | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
ramips.mt7621.generic                | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
  ramips.mt7621.ubiquiti-edgerouter-x | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
ramips.mt76x8.generic                | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
ramips.lantiq.xrx200                | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
sunxi.cortexa7.generic              | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
ath79.generic                        | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
  ipq40xx.generic                     | 74a8e36 |        | 19.07  | 19.07  |        | 19.07
 +
-------------------------------------------------------------------------------------------------
 +
</pre>
  
 
=== Neue Plattformen hinzufügen ===
 
=== Neue Plattformen hinzufügen ===
 +
 +
Das Hinzufügen neuer Targets ist etwas komplex. Es gibt dazu mehrere Schritte:
 +
Wenn ein Router hinzugefügt werden soll, für den es ein Target bereits existiert, so sollte das '''generic''' target
 +
genutzt werden. <br>
 +
Beispiel:
 +
./build.sh ar71xx.generic menuconfig
 +
 +
Nun wird die Konfiguration von openwrt angezeigt, in der der neue Router hinzugefügt werden kann. Alles andere bleibt
 +
unverändert. Nach dem Speichern und beenden, wird das entsprechende Config-File in openwrt-config/.../ angepasst.<br>
 +
Gebaut wird dann mit
 +
./build.sh ar71xx.generic -j4  # -j4 ist optional und gibt die Anzahl der CPU cores an, die das Bauen beschleunigen.
 +
 +
Muss eine neue Plattform angelegt werden, so erfolgt diese in mehreren Schritten mit Hilfe des folgenden Scripts:
 +
~/firmware/openwrt-configs/post-process-config.sh
 +
Dieses Zeigt ohne Parameter die Schritte an, wie die Konfiguration angelegt werden muss.
 +
 +
Generell dürfen für eine Platform nicht pauschal Module hinzugefügt werden,
 +
da Kernelmodule unkontrolliert im firmware Image landen. Das hat zur Folge, dass die images zu groß werden, oder ein Softwareupdate
 +
anschliessend nicht mehr möglich ist.

Version vom 28. März 2020, 14:07 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.

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 16.04/18.04 64bit (z. B.: Ubuntu-Mate)

Benötigte Softwarepakete

apt-get install unzip wget time rsync jq gawk gettext
apt-get install git subversion build-essential flex python
apt-get install libssl-dev libncurses5-dev zlib1g-dev zlib1g-dev gcc-multilib

Firmware-Checkout

Um die Firmware auf den eigenen Rechner zu bringen, wird das Kommando git verwendet. Wechsel dazu im Usermodus auf dem Entwicklungsrechner (wo die Firmware gebaut werden soll) in ein Verzeichnis, in welchem git das eigentliche Firmware-Verzeichnis anlegen soll.

git clone https://github.com/freifunk-dresden/firmware-freifunk-dresden.git
cd firmware-freifunk-dresden

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 lede-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: 6
usage: build.sh list | clean | feed-revisions | (target | all  [menuconfig ] [rerun] [ <make params ...> ])
 list             - lists all available targets
 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
          'ramips.*'              - builds all ramips targets only
          'ramips.rt305x.generic' - builds exact this target
          '^rt30.*'               - builds all that start with 'rt30'

 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
-------------------------------------------------------------------------------------------------
 target                               | wrt_rev | wrt_var | config  | feeds   | files   | patches
--------------------------------------+---------+---------+---------+---------+---------+--------
 ar71xx.tiny.lowmem                   | f6de1fa | lowmem  | 18.06   | 18.06   |         | 18.06
 ar71xx.generic.lowmem                | f6de1fa | lowmem  | 18.06   | 18.06   |         | 18.06
 ar71xx.generic                       | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ar71xx.generic.gl-mifi               | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ar71xx.nand                          | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 x86.generic                          | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 x64.generic                          | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ramips.mt7621.generic                | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ramips.mt7621.ubiquiti-edgerouter-x  | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ramips.mt76x8.generic                | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ramips.lantiq.xrx200                 | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 sunxi.cortexa7.generic               | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ath79.generic                        | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
 ipq40xx.generic                      | 74a8e36 |         | 19.07   | 19.07   |         | 19.07
-------------------------------------------------------------------------------------------------

Neue Plattformen hinzufügen

Das Hinzufügen neuer Targets ist etwas komplex. Es gibt dazu mehrere Schritte: Wenn ein Router hinzugefügt werden soll, für den es ein Target bereits existiert, so sollte das generic target genutzt werden.
Beispiel:

./build.sh ar71xx.generic menuconfig

Nun wird die Konfiguration von openwrt angezeigt, in der der neue Router hinzugefügt werden kann. Alles andere bleibt unverändert. Nach dem Speichern und beenden, wird das entsprechende Config-File in openwrt-config/.../ angepasst.
Gebaut wird dann mit

./build.sh ar71xx.generic -j4  # -j4 ist optional und gibt die Anzahl der CPU cores an, die das Bauen beschleunigen.

Muss eine neue Plattform angelegt werden, so erfolgt diese in mehreren Schritten mit Hilfe des folgenden Scripts:

~/firmware/openwrt-configs/post-process-config.sh

Dieses Zeigt ohne Parameter die Schritte an, wie die Konfiguration angelegt werden muss.

Generell dürfen für eine Platform nicht pauschal Module hinzugefügt werden, da Kernelmodule unkontrolliert im firmware Image landen. Das hat zur Folge, dass die images zu groß werden, oder ein Softwareupdate anschliessend nicht mehr möglich ist.