Firmwareentwicklung-Firmware selberbauen: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
(+neue pakete)
 
 
(14 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
===Neue Firmware selbst bauen (buildprozess, howto, SVN)===
+
{{Vorlage:überarbeiten}}
−
* Dies ist ein Notizzettel zum bauen einer neuen Firmware. Saemtliche Schritte habe ich fuer ein Linux-System dokumentiert. Eigentlich kann man ein komplettes Copy&Paste machen und schon ist alles fertig.
 
−
* Der normale Weg ist, sich die aktuelle Weimarnetz-Firmware auf den Router zu packen, alle Aenderungen auf dem Router vorzunehmen und dann diese Anleitung nachzumachen.
 
−
* zum Arbeiten mit dem SVN empfiehlt sich die Lektüre [[Subversion - Versionskontrolle im Weimarnetz]]
 
−
* einfaches Einsehen des SVNs: http://svn.sourceforge.net/viewvc/weimarnetz-fw/trunk/firmware/
 
  
−
<pre>
+
=Wo?=
−
EIGENER_ROUTER=$(route|awk '/default/{printf $2}')
+
* Die Erweiterungen zur OpenWRT-Firmware für das Weimarnetz sowie die Bauanleitung liegen auf github.
−
ssh $EIGENER_ROUTER
+
* Ein Repository ist z.B. das hier: https://github.com/andibraeu/weimarnetz
 +
* Jeder kann dieses Repository verwenden und eine Firmware daraus erstellen. Hilfe und Änderungen sind gern willkommen, wer aktiv mitentwickeln möchte kann sich das Repository auch gabeln (aka forken)
  
−
# nun sind wir auf dem Router
+
=Wie?=
 +
==Vorbereitungen==
 +
* Zur Entwicklung und zum Bauen der Firmware empfiehlt sich die Nutzung von Linux.
 +
* auf Debian müssen diese Pakete installiert sein: build-essential libncurses5-dev m4 flex git git-core zlib1g-dev unzip subversion gawk python libssl-dev quilt
 +
* man sollte einen Nutzer verwenden, der nicht root ist, da die openWRT-scripte das überprüfen und es ein wenig Krampf ist, alles umzubiegen
  
−
cd /
+
==Bauen einer Firmware==
−
tar cvzhf www/fw.tgz usr/sbin/*weimar* etc/init.d/*weimar* www/*nervseite www/*info* www/*registr* www/cgi-bin/*kinder* www/cgi-bin-speed www/cgi-bin-map www/cgi-bin/telnet
+
* Alle Schritte zum Bauen einer Firmware sind grundlegend in der README des Repositories beschrieben
 +
* Um ein vtund ohne SSL und ohne Komprimierung zu erstellen, muss das Makefile entsprechend angepasst werden.
 +
* Außerdem wurden Abhängigkeiten aus der LuCI-Freifunkkonfiguration entfernt
 +
* Diese Dateien liegen im Repository unter openwrt-build/, später soll das kopieren automatisch erfolgen
  
−
# nun haben wir eine direkt herunterladbare Datei fw.tgz, die  
+
==Ablauf==
−
# alle (evtl. geaenderten) weimarnetz-spezifischen Dateien enthaelt.
+
* Die im README gezeigten Schritte erstellen eine Standardfirmware, die auf die gewählte Hardware installiert werden kann
−
# nun muessen wir noch alle zusaetzlich installierten
+
* Änderungen am OpenWRT können über ''make menuconfig'' vorgenommen werden. Den Kernel passt man mit ''make kernel_menuconfig'' an
−
# Software-Pakete herausfinden und in ein Archiv packen:
+
* Der erste komplette Buildprozess kann je nach Rechenleistung mehrere Stunden in Anspruch nehmen. Nachfolgende Builds sind erheblich schneller (1 min auf schnellen Rechnern, 30 Minuten auf unserem Rootserver)
−
# das Archiv wird aus Platzgruenden in die RAM-Disk geleitet
 
−
# und ein zusaetzlicher, umgebogener Webserver gestartet
 
  
−
ipkg update
+
==Probleme im Build-Prozess==
−
ipkg install freifunk-recommended-de (statistik,horst,tcpdump,dnsmasq,olsrviz)
+
* nach Auswahl eines Hardwaremodels und kopieren der Build-Config sind immer wieder gewisse Standardwerte gesetzt, wie z.B. der b43legacy-Treiber beim Linksys
−
ipkg install iptables-extra (viele Ziele)
 
−
ipkg install batman2
 
  
−
PAKETE="$(ipkg status|awk '{if(s==1&&$1=="Package:")printf $2" ";if($2=="dropbear")s=1}')"
+
=Weitere Forks=
−
F1="/usr/lib/ipkg/info/*"
+
* [https://github.com/bittorf/kalua Basti]: Entwicklung hauptsächlich für bittorf wireless
−
F2="/usr/lib/ipkg/status"
+
* [https://github.com/weimarnetz/storchi Storchi]
−
F3="$(for F in $PAKETE;do ipkg files $F|awk '{if($0!="/")system("ls -ld "sprintf("%s",substr($0,2)))}'|awk '{if($5>0)print $9}';done)"
 
−
tar cvzf /tmp/ipkg.tgz $F1 $F2 $F3
 
−
tar cvzf /tmp/images.tgz www/images/Info_* www/images/*.swf www/images/intro.jpg
 
−
httpd -h /tmp/ -p 81
 
−
exit
 
  
−
# nun haben wir eine direkt herunterladbare Datei ipkg.tgz,
+
[[Kategorie:Firmware]]
−
# haben also alles was wir brauchen und sind wieder auf unserem Rechner
 
−
# wir laden und das aktuelle Kit von sven-ola's freifunk-seite
 
−
# herunter und entpacken dieses auf unserem Rechner
 
−
 
 
−
KIT_URL="http://styx.commando.de/sven-ola/testing/_kit/"
 
−
KIT_VERSION="freifunk-openwrt-kit-1.3.6-de"
 
−
wget "$KIT_URL$KIT_VERSION.tar.gz"
 
−
tar xvzf "$KIT_VERSION.tar.gz"
 
−
cd $KIT_VERSION
 
−
 
 
−
# nun machen wir uns ein Verzeichnis in der die komplette
 
−
# Verzeichnisstruktur und alle Dateien wie sie auf dem Router
 
−
# sind reinkopiert werden. Das Grundsystem ist im Kit schon dabei.
 
−
# die zwei Dateien, die wir eben auf dem Router erstellt
 
−
# haben, nehmen wir von dort oder aus dem SVN
 
−
 
 
−
wget "http://$EIGENER_ROUTER:81/fw.tgz"
 
−
wget "http://$EIGENER_ROUTER:81/ipkg.tgz"
 
−
wget "http://$EIGENER_ROUTER:81/images.tgz"
 
−
mkdir weimar
 
−
cd weimar
 
−
tar xvzf ../root.tgz
 
−
tar xvzf ../fw.tgz
 
−
tar xvzf ../ipkg.tgz
 
−
tar xvzf ../images.tgz
 
−
 
 
−
# ok,nun ist fast alles fertig. Wir haben nun noch die Chance
 
−
# nach www/ ein eigenes bild zu kopieren und ein paar kleine
 
−
# Aenderungen durchzufuehren, z.b.:
 
−
 
 
−
# holen und formatieren der aktuellen nervseite:
 
−
 
 
−
URL="http://wireless.subsignal.org/index.php?title=Nervseite"
 
−
F1="www/nervseite-vorlage"
 
−
wget -O - "$URL"|sed '/-- NERVSEITE:START --/,/-- NERVSEITE_LEEREKONTAKTDATEN:END --/!d' >"$F1"
 
−
 
 
−
# nun alles wieder einpacken und neues firmwareimage erzeugen
 
−
# das firmwareimage wird schon nach unixzeit und datum benannt:
 
−
 
 
−
tar cvzf ../root.tgz *
 
−
cd ..
 
−
X=$(date -Ih|awk -F[-T] '{print($1-1970)*31536000+$2*2592000+$3*86400+$4*3600}')
 
−
Z=$(date -R|awk -F"[, :]" '{printf("%s%s%s-%suhr%s",$3,tolower($4),$5,$6,$7)}')
 
−
N="weimarnetz_firmware-$X-$Z-trx.bin"
 
−
./gen-openwrt -v $N trx >../$N
 
−
 
 
−
# Nun muessen wir noch eine Schmalspur-Variante fuer Geraete mit
 
−
# nur 2Mb Flash-Speicher bauen. Dazu schmeissen wir scheinbar
 
−
# ueberfluessigen Muell raus. Insbesondere grosse Dateien 8-)
 
−
# erstmal verschaffen wir uns einen Ueberblick:
 
−
 
 
−
cd weimar
 
−
ls -alR|awk '{if(substr($0,1,2)=="./")dir=substr($0,3,length($0)-3);print $5,dir"/"$9,$10,$11,$12}'|sort -n
 
−
 
 
−
# nun sehen wir den ganzen Kram,der sich lohnt. Hier mein Vorschlag:
 
−
 
 
−
rm www/images/intro.jpg
 
−
RRD="$(find -name "*rrd*")"
 
−
rm $RRD
 
−
rm usr/bin/dropbearmulti
 
−
rm usr/bin/netcat
 
−
rm www/cgi-bin-registrator.html
 
−
rm usr/sbin/batman
 
−
rm usr/sbin/tcpdump
 
−
rm lib/libncurses.so.5.2
 
−
rm usr/lib/libpcap.so.0.8.3
 
−
 
 
−
 
 
−
# und die neue version bauen:
 
−
 
 
−
tar cvzf ../root.tgz *
 
−
cd ..
 
−
N="weimarnetz_firmware-schmalspur-$X-$Z-trx.bin"
 
−
./gen-openwrt -v $N trx >$N
 
−
 
 
−
# nun haben wir zwei firmware-dateien, die schmalspurvariante ist ca. 300Kb kleiner
 
−
# und wenn man moechte, nun noch das SVN aktualisieren
 
−
 
 
−
#NUR BEIM ERSTEN MAL:
 
−
svn checkout https://svn.sourceforge.net/svnroot/weimarnetz-fw/
 
−
 
 
−
cd firmware/
 
−
#Sonst:
 
−
cd firmware/
 
−
svn update
 
−
#weiter
 
−
wget "http://$EIGENER_ROUTER:81/fw.tgz"
 
−
tar xvzf --overwrite fw.tgz
 
−
rm fw.tgz
 
−
svn add * --force
 
−
svn commit -m "$X-$Z"
 
−
 
 
−
</pre>
 

Aktuelle Version vom 6. April 2014, 00:25 Uhr

Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung.

Wo?

  • Die Erweiterungen zur OpenWRT-Firmware für das Weimarnetz sowie die Bauanleitung liegen auf github.
  • Ein Repository ist z.B. das hier: https://github.com/andibraeu/weimarnetz
  • Jeder kann dieses Repository verwenden und eine Firmware daraus erstellen. Hilfe und Änderungen sind gern willkommen, wer aktiv mitentwickeln möchte kann sich das Repository auch gabeln (aka forken)

Wie?

Vorbereitungen

  • Zur Entwicklung und zum Bauen der Firmware empfiehlt sich die Nutzung von Linux.
  • auf Debian müssen diese Pakete installiert sein: build-essential libncurses5-dev m4 flex git git-core zlib1g-dev unzip subversion gawk python libssl-dev quilt
  • man sollte einen Nutzer verwenden, der nicht root ist, da die openWRT-scripte das überprüfen und es ein wenig Krampf ist, alles umzubiegen

Bauen einer Firmware

  • Alle Schritte zum Bauen einer Firmware sind grundlegend in der README des Repositories beschrieben
  • Um ein vtund ohne SSL und ohne Komprimierung zu erstellen, muss das Makefile entsprechend angepasst werden.
  • Außerdem wurden Abhängigkeiten aus der LuCI-Freifunkkonfiguration entfernt
  • Diese Dateien liegen im Repository unter openwrt-build/, später soll das kopieren automatisch erfolgen

Ablauf

  • Die im README gezeigten Schritte erstellen eine Standardfirmware, die auf die gewählte Hardware installiert werden kann
  • Änderungen am OpenWRT können über make menuconfig vorgenommen werden. Den Kernel passt man mit make kernel_menuconfig an
  • Der erste komplette Buildprozess kann je nach Rechenleistung mehrere Stunden in Anspruch nehmen. Nachfolgende Builds sind erheblich schneller (1 min auf schnellen Rechnern, 30 Minuten auf unserem Rootserver)

Probleme im Build-Prozess

  • nach Auswahl eines Hardwaremodels und kopieren der Build-Config sind immer wieder gewisse Standardwerte gesetzt, wie z.B. der b43legacy-Treiber beim Linksys

Weitere Forks

  • Basti: Entwicklung hauptsächlich für bittorf wireless
  • Storchi