Skip to content

integrate_own_files

JBBgameich edited this page May 1, 2018 · 4 revisions

Howtos: Entwicklung

  1. Entpacken und Packen von Firmware-Images

    1. Tools und Syntax
    2. Vorgehensweise
    3. Verwendung von fwmod im "no freetz"-Modus
  2. Patches in Freetz einspielen

  3. Example 3: NZBGet

    1. Build manually
    2. Add package to Freetz
    3. Create new image with added package
    4. Testing
    5. Preparing New Package for Public Integration to Freetz Trunk
  4. Example 2: par2cmdline

    1. Build manually
    2. Add package to Freetz
    3. Create new image with added package
    4. Testing
    5. Preparing New Package for Public Integration to Freetz Trunk
  5. Example 1: Httptunnel

    1. Build manually
    2. Add package to Freetz
    3. Call Procedures "make menuconfig" and "make"
    4. Testing
    5. Preparing New Package for Public Integration to Freetz Trunk
    1. Signieren von Firmware
    2. Konkrete Anwendung in Freetz
  6. Ablauf eines Firmware-Updates

  7. Eigene Programme kompilieren

  8. Dynamische Bandbreitenanzeige per SVG

    1. Anleitung zur Test-Installation
  9. Platz sparen im Dateisystem der FritzBox

    1. Vorwort und Motivation
    2. Bestandsaufnahme: Wo stecken die Platzfresser?
    3. Weitere Spartricks
    4. Schlußwort
  10. Flash-Partitionen im laufenden Betrieb sichern

    1. Motivation
    2. Voraussetzungen
    3. Lösungsweg
    4. Wege, sich schnell einen Überblick zu verschaffen
    5. Zusammenfassung
  11. Release Management

    1. Subversion Repository
    2. Checklists
    3. GIT
    4. Downloads
    5. References
  12. First steps - How to start your first freetz package

    1. Info
    2. Build Environment
    3. File Structure
    4. Examples Binary Package
    5. Configuration Handling
    6. Examples Web-Interface
    7. Trouble shooting
  13. Kernel konfigurieren und kompilieren

  14. Menükonfiguration pflegen

    1. Einstieg
    2. Beispiel-Konfiguration für ein neues Paket
    3. Menuconfig-Warnungen beheben
    4. Erklärung und Anwendung der erweiterten MK-Targets
    5. Syntax-Fehler in MK-Dateien finden
    6. Syntax-Hervorhebung für MK-Dateien
  15. ADAM2-Bootloader

    1. Bootloader-Backup anlegen
    2. Bootloader überschreiben
    3. Bootloader-Befehle
    4. Bootloader-Quelltext
    5. Aufbau des Bootloaders
    6. Bootloader und Freetz
  16. 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
  17. Busybox konfigurieren und kompilieren

  18. Wie baue ich ein eigenes Paket für Freetz?

  19. Firmware-Image-Namen analysieren und interpretieren

    1. Einleitung
    2. Skript-Code
    3. Daten im Rohformat
    4. Ausgabe grundlegender Informationen
    5. Ausgabe erweiterter Informationen
    1. Web-interface HTTPTunnel
  20. Developer Information

  21. Addon Paket installieren

  22. Paketverwaltung für Freetz

    1. Erweiterung des Dateisystems
    2. Paketverwaltung
    3. Links
    4. Kommentare
  23. Wie die FritzBox Manipulationen erkennt

    1. Ursachen
    2. Diagnose
    3. Lösungen
    4. Schlußwort und Ausblick
  24. Shell Coding Conventions

    1. Shell Language
    2. Basic Format
    3. If, For, and While
    4. Test Built-in
    5. Single-line conditional 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
  25. Package Development

    1. Persistent Package Settings
  26. Erstellen einer GUI für Pakete in Freetz

    1. Motivation
    2. Grundlagen
    3. Wie funktioniert das mit der GUI?
  27. Flash Partitionierung

    1. Hidden SquashFS
    2. Contiguous SquashFS
    3. Hidden Root
    4. NAND Root
    5. Dateisystem
    6. Kernel
    7. Weblinks
  28. Trac Hooks

    1. trac-post-commit-hook
    2. trac-post-revprop-change-hook
  29. Package Developing - Advanced Topics

    1. Adding conditional patches
    2. Adding multi-binary packages
  30. 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
  31. Freetz Build-Prozeß

    1. Vorwort und Motivation
    2. Grundsätzliches
  32. 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
  33. libmodcgi.sh

    1. cgi
    2. cgi_begin
    3. cgi_end
    4. sec_begin
    5. sec_end
    6. html
    7. check, select
    8. href
    9. back_button
    10. sec_level
    11. stat_bar
    12. cgi_param
    13. cgi_error, print_error
    14. path_info
    15. valid
  34. Cross-Compiler / Toolchain erstellen

  35. Eigene Download-Toolchain erstellen

  36. Target/Native-Compiler-Toolchain erstellen

    1. Using the dev-tools package to install compiler and tools

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 /tmp 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 | - die modifizierte | | | Handling | Firmware muss | | | - keine bestehende | geflasht werden | | | Internetverbindun | - der | | | g | Flash-Speicher | | | erforderlich | ist kleiner als | | | | das RAM und oft | | | | eh schon fast | | | | voll | +-----------------------+-----------------------+-----------------------+ | via debug.cfg | - funktioniert auf | - funktioniert nur | | | jeder Box | mit | | | - keine bestehende | ASCII-Dateien, | | | Internetverbindun | wie z.B. mit | | | g | Skripten oder | | | erforderlich | Konfigurationsdat | | | | eien | | | | - werden Änderungen | | | | an diesen Dateien | | | | vorgenommen, | | | | müssen diese auch | | | | wieder in die | | | | debug.cfg | | | | übernommen werden | +-----------------------+-----------------------+-----------------------+ | Nachladen von | - funktioniert mit | - bestehende | | Webserver | allen Dateien, | Internetverbindun | | | auch mit binären. | g | | | Notwendig z.B. | oder laufender | | | für nachgeladene | interner | | | Programme wie | Webserver | | | z.B. bFTP, | erforderlich | | | dropbear(SSH) | - private Dateien | | | oder OpenVPN, | wie z.B. secret | | | - funktioniert auf | keys für SSH oder | | | jeder Box | VPN dürfen | | | - Umgeht die | keinesfalls im | | | Probleme des | Web abgelegt | | | knappen | werden! Wer dies | | | Flash-Speichers | tut, kann sich | | | - Änderungen lassen | Verschlüsselung | | | sich leicht am | gleich sparen. | | | 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 | | +-----------------------+-----------------------+-----------------------+ | Nachladen vom USB | - funktioniert mit | - funktioniert nur | | Stick | allen Dateien, | bei vorhendenem | | | auch mit binären. | USB Slot mit | | | Notwendig z.B. | einem USB Stick | | | für nachgeladene | (bzw. anderem USB | | | Programme wie | Speichermedium) | | | z.B. bFTP, | - Die USB devices | | | dropbear(SSH) | werden, je nach | | | oder OpenVPN, | Firmware, leider | | | - Umgeht die | unter | | | Probleme des | verschiedenen | | | knappen | Namen | | | Flash-Speichers | eingebunden, | | | - Änderungen lassen | sodaß in der | | | sich leicht am | debug.cfg darau | | | Rechner mit dem | eingegangen | | | eigenen Editor | werden muß. | | | (z.B. | | | | Notepadplus) | | | | vornehmen | | +-----------------------+-----------------------+-----------------------+ | WebDAV- bzw. NFS- | - RAM wird nicht | - bestehende | | Share mounten | mit lokalen | Internetverbindun | | | Kopien von | g | | | Dateien gefüllt | und WebDAV-Server | | | (abgesehen von | (z.B. GMX/1&1 | | | der Ausführung) | MediaCenter) | | | - funktioniert mit | erforderlich | | | allen Dateien, | - private Dateien | | | auch mit binären | wie z.B. secret | | | - funktioniert auf | keys für SSH oder | | | jeder Box | VPN dürfen | | | - umgeht die | keinesfalls im | | | Probleme des | Web abgelegt | | | knappen | werden! Wer dies | | | Flash-Speichers | tut, kann sich | | | - sehr komfortabel, | Verschlüsselung | | | da kein Nachladen | gleich sparen. | | | 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 | | +-----------------------+-----------------------+-----------------------+

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

Feste Integration über das Freetz Image

  • Freetz-1.1.x: Die Datei kann unter ./root an die gewünschte Stelle kopiert werden.
  • Ab Freetz-1.2: Dies kann ohne großen Aufwand über das Beispiel Addon own-files-0.1 realisiert werden. Einfach das Kommentarzeichen vor own-files-0.1 in addon/static.pkg entfernen und die gewünschten Dateien in das Verzeichnis ./addon/own-files-0.1/root/ an die Stelle kopieren, an der sie im root Dateisystem der Box landen sollen.
    Beispiel: eine Datei ./addon/own-files-0.1/root/usr/bin/foo wird auf der Box in /usr/bin/foo landen.

Dateien und Verzeichnisse, die unterhalb von /var liegen sollen können nach ./addon/own-files-0.1/var.tar kopiert werden. Änderungen an diesen Dateien gehen bei jedem Reboot verloren.

Erzeugen der Dateien aus der debug.cfg

Beim Booten werden die gewünschten Dateien im Verzeichnis /tmp 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:

  • Code in Zwischenablage kopieren
  • mit der Box via telnet / SSH verbinden
  • nvi /var/flash/debug.cfg
  • mit : set paste RETURN in den Einfügen/Paste Modus wechseln
  • an der passenden stelle "i" für insert drücken
  • rechte Maustaste auf Putty fügt den Text ein
  • 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 :)

Clone this wiki locally