help/howtos/development/integrate_own_files

Howtos: Entwicklung

  1. Entpacken und Packen von Firmware-Images
    1. Tools und Syntax
    2. Vorgehensweise
  2. Kernel konfigurieren und kompilieren
  3. Developer Information
  4. Flash Partitionierung
    1. Hidden SquashFS
    2. Contiguous SquashFS
    3. Hidden Root
  5. trac-post-commit-hook
  6. ADAM2-Bootloader
    1. ADAM2-Backup anlegen
    2. ADAM2 überschreiben
    3. ADAM2-Befehle
    4. ADAM-Quellcode
  7. Einstellungen speichern im Urlader-Environment
    1. Vorwort und Motivation
    2. Lösungsmöglichkeiten
    3. Bootloader Environment
    4. Variable "kernel_args"
    5. Kernel_Args-API
    6. Mögliche Anwendungsfälle
  8. Erstellen einer GUI für Pakete in Freetz
    1. Motivation
    2. Grundlagen
    3. Wie funktioniert das mit der GUI?
  9. Eigene Dateien in die Firmware integrieren
    1. Feste Integration über das Freetz Image
    2. Erzeugen der Dateien aus der debug.cfg
    3. Nachladen vom Webserver
    4. Nachladen vom USB-Stick
    5. WebDAV Share mounten
    6. NFS-Share mounten
  10. Addon Paket installieren
  11. Patches in Freetz einspielen
  12. Freetz Build-Prozeß
    1. Vorwort und Motivation
    2. Grundsätzliches
  13. Ablauf eines Firmware-Updates
  14. Flash-Partitionen im laufenden Betrieb sichern
    1. Motivation
    2. Voraussetzungen
    3. Lösungsweg
    4. Wege, sich schnell einen Überblick zu verschaffen
    5. Zusammenfassung
  15. Flash-Partitionen von außen mit FTP sichern
    1. Motivation
    2. Voraussetzungen
    3. Allgemeine Informationen zur Datensicherung
    4. Sicherung mit Linux-Standard-FTP (ftp)
    5. Sicherung mit Linux-NcFTP (ncftpget)
    6. Sicherung mit Cygwin-NcFTP (ncftpget)
    7. Uploads via FTP
  16. Wie die FritzBox Manipulationen erkennt
    1. Ursachen
    2. Diagnose
    3. Lösungen
    4. Schlußwort und Ausblick
  17. Eigene Programme kompilieren
  18. Busybox konfigurieren und kompilieren
  19. Dynamische Bandbreitenanzeige per SVG
    1. Anleitung zur Test-Installation
  20. Platz sparen im Dateisystem der FritzBox
    1. Vorwort und Motivation
    2. Bestandsaufnahme: Wo stecken die Platzfresser?
    3. Weitere Spartricks
    4. Schlußwort
  21. Shell Coding Conventions
    1. Shell Language
    2. Basic Format
    3. If, For, and While
    4. Test Built-in
    5. Single-line if-statements
    6. Infinite Loops
    7. Exit Status and If/While Statements
    8. Variable References
    9. Variable Naming
    10. Quoting
    11. Variable Assignments
    12. Testing for (Non-)Empty Strings
    13. Commenting
    14. Pathnames
    15. Interpreter Magic
  22. Wie baue ich ein eigenes Paket für Freetz?
  23. Package Development
    1. Persistent Package Settings
  24. Cross-Compiler / Toolchain erstellen
  25. First steps - How to start your first freetz package
    1. Foreword and Motivation
    2. Where to Ask Questions and to Discuss
    3. Build Environment
    4. Use of the "empty" Package as Starting Point
    5. Add New Package for "make menuconfig"
    6. Call Procedures "make menuconfig" and "make"
    7. Testing
    8. Preparing New Package for Public Integration to Freetz Trunk

Eigene Dateien in die Firmware integrieren

Die Fritzbox besitzt zwei Speicherbereiche:

  1. den Flash?
  2. den Arbeitsspeicher (RAM)

Um im laufenden Betrieb Dateien anzulegen und zu verändern, lässt sich das Verzeichnis /temp nutzen. Es liegt im Arbeitsspeicher in einer RAM-Disk und arbeitet wie ein normales beschreibbares Dateisystem. Folgende Dinge sind jedoch zu beachten:

  • Es nutzt den vorhandenen Arbeitsspeicher mit, der je nach Box bis zu 64MB gross ist. Wird die Menge der Daten im Arbeitsspeicher zu groß, startet die Box ohne Vorwarnung neu.
  • Alles, was im Arbeitsspeicher liegt, ist nach einem Reboot oder Stromausfall verloren.

Für die "feste Integration" gibt es mehrere Möglichkeiten:

Variante Pros Contras
via Freetz Image
  • einfaches Handling
  • keine bestehende Internetverbindung erforderlich
  • die modifizierte Firmware muss geflasht werden
  • der Flash-Speicher ist kleiner als das RAM und oft eh schon fast voll
via debug.cfg
  • funktioniert auf jeder Box
  • keine bestehende Internetverbindung erforderlich
  • funktioniert nur mit ASCII-Dateien, wie z.B. mit Skripten oder Konfigurationsdateien
  • werden Änderungen an diesen Dateien vorgenommen, müssen diese auch wieder in die debug.cfg übernommen werden
Nachladen von Webserver
  • funktioniert mit allen Dateien, auch mit binären. Notwendig z.B. für nachgeladene Programme wie z.B. bFTP, dropbear(SSH) oder OpenVPN,
  • funktioniert auf jeder Box
  • Umgeht die Probleme des knappen Flash-Speichers
  • Änderungen lassen sich leicht am Rechner mit dem eigenen Editor (z.B. TextPad) vornehmen (Achtung: Auf UNIX-Formatierung achten!) und dann auf den Webspace hochladen.
  • wer mehrere Fritz!Boxen oder Router hat, kann so auf einmal die Konfiguration für alle gleichzeitig anpassen
  • bestehende Internetverbindung oder laufender interner Webserver erforderlich
  • private Dateien wie z.B. secret keys für SSH oder VPN dürfen keinesfalls im Web abgelegt werden! Wer dies tut, kann sich Verschlüsselung gleich sparen.
Nachladen vom USB Stick
  • funktioniert mit allen Dateien, auch mit binären. Notwendig z.B. für nachgeladene Programme wie z.B. bFTP, dropbear(SSH) oder OpenVPN,
  • Umgeht die Probleme des knappen Flash-Speichers
  • Änderungen lassen sich leicht am Rechner mit dem eigenen Editor (z.B. Notepadplus) vornehmen
  • funktioniert nur bei vorhendenem USB Slot mit einem USB Stick (bzw. anderem USB Speichermedium)
  • Die USB devices werden, je nach Firmware, leider unter verschiedenen Namen eingebunden, sodaß in der debug.cfg darau eingegangen werden muß.
WebDAV- bzw. NFS- Share mounten
  • RAM wird nicht mit lokalen Kopien von Dateien gefüllt (abgesehen von der Ausführung)
  • funktioniert mit allen Dateien, auch mit binären
  • funktioniert auf jeder Box
  • umgeht die Probleme des knappen Flash-Speichers
  • sehr komfortabel, da kein Nachladen per debug.cfg nötig ist
  • Änderungen lassen sich leicht am Rechner mit dem eigenen Editor (z.B. TextPad) vornehmen (Achtung: Auf UNIX-Formatierung achten!) und dann auf den WebDAV-Share hochladen.
  • wer mehrere Fritz!Boxen oder Router hat, kann so auf einmal die Konfiguration für alle gleichzeitig anpassen
  • bestehende Internetverbindung und WebDAV-Server (z.B. GMX/1&1 MediaCenter) erforderlich
  • private Dateien wie z.B. secret keys für SSH oder VPN dürfen keinesfalls im Web abgelegt werden! Wer dies tut, kann sich Verschlüsselung gleich sparen.

Die "perfekte Lösung" gibt es natürlich nicht. Je nach Anwendungsfall werden die Möglichkeiten kombiniert.

Feste Integration über das Freetz Image

Dies kann ohne großen Aufwand über das Verzeichnis ./root/ realisiert werden. Einfach die gewünschten Dateien in das Verzeichnis ./root/ an die Stelle kopieren, an der sie im root Dateisystem der Box landen sollen (außer ./root/lib/ und ./root/usr/lib/, welche seperat behandelt werden). Beispiel: eine Datei ./root/usr/bin/foo wird auf der Box in /usr/bin/foo landen.

Erzeugen der Dateien aus der debug.cfg

Beim Booten werden die gewünschten Dateien im Verzeichnis /temp neu erstellt. Dazu wird das Script debug.cfg missbraucht, das beim Starten der FritzBox automatisch ausgeführt wird. Da die debug.cfg selbst im beschreibbaren TFFS des Flash (mtd3/4) liegt, gehen ihre Inhalte beim Reboot nicht verloren.

Beispiel:

Der Code wird einfach in die debug.cfg eingefügt. Am einfachsten geht es mit Putty:

  • mit der Box via telnet / SSH verbinden
  • nvi /var/flash/debug.cfg
  • an der passenden stelle "i" drücken
  • Code in Zwischenablage kopieren
  • rechte Maustaste auf Putty fügt den Text ein (leider verschiebt sich das Einrücken, was aber der Funktion keinen Abbruch tut)
  • nacheinander ESC ESC : w q RETURN drücken (Abbrechen wäre: ESC ESC : q ! RETURN)
  • Neustarten

Hier wird ein Skript erzeugt, das sich mit /var/tmp/checkonline.sh aufrufen lässt. Es zeigt an, welcher der neun Rechner im FB-LAN online ist. Wichtig ist, daß der "Endmarker" (hier 'ENDCHECK') nicht eingerückt ist. Die letzte Zeile macht das Script ausführbar. Abbruch mit STRG+C.

cat > /var/tmp/checkonline.sh << 'ENDCHECK'
#!/bin/sh

while [ 1 = 1 ]
do
     clear
     echo Online:
     date
     echo ------------------------------------------------
     for a in "2 Desktop1" "3 Michael" "20 Christina" "21 -" "22 -" "23 -" "24 -" "25 -" "26 -" "27 -" "28 -"  "29 -" "45 FB WLAN SL(WDS)"

     do
              ping -c 1 192.168.178.$a |grep "bytes from ">/dev/null && echo 192.168.178.$a &
     done
     sleep 1
     echo ------------------------------------------------
     sleep 9
done

ENDCHECK
chmod +x /var/tmp/checkonline.sh

Nachladen vom Webserver

Beim Booten werden alle gewünschten Dateinen aus dem Internet oder von einem Webserver im Intranet auf die Box geladen.

Nachladen vom USB-Stick

Beim Booten werden alle gewünschten Dateinen direkt vom USB Stick bzw. via FTP vom internen FTP Server auf die Box geladen.

WebDAV Share mounten

Für Freetz gibt es das Paket WebDAV, über das man einen WebDAV-Share direkt mounten kann. Als Konsequenz werden alle Remote-Dateien so behandelt, als wären sie lokal vorhanden, und zwar ohne gesondertes Nachladen.

NFS-Share mounten

Mit dem NFS Paket lässt sich gleiches erreichen wie mit WebDAV (s.o.), nur etwas stabiler :)