help/howtos/development/package_creation

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

Wie baue ich ein eigenes Paket für Freetz?

Anmerkung: Dieser Beitrag Beitrag vermischt zwei verschiedenen Fragestellungen:

  • Wie schreibe ich mein erstes Programm?
  • Wie integriere ich ein vorhandenes Programm als Package in Freetz?

Die zweite Frage wird schon an anderer Stelle behandelt. Wenn Interesse an der ersten Frage besteht, sollte man das entsprechend aufteilen. Normalerweise werden eher fertige Programme in Freetz integriert und nicht welche, die komplett neu geschrieben werden. Als Grundlage für ein komplexeres Programm ist möglicherweise GNU Hello besser geeignet, da hier auch mit automake eine cofigure-Datei erstellt wird. (ralf)

Da dies mein erster Wiki-Eintrag ist, möchte ich Euch um Nachsicht bitten, wenn nicht gleich alles so aussieht wie es sein sollte.

Um für Freetz ein Paket selbst zu erstellen, musste ich erst einmal ein geeignetes "Projekt" finden, für das es auch Sourcecode gibt, der sich für die Fritzbox überhaupt kompilieren lässt.

Bei der Suche stieß ich auf den HTTP Tunnel Server. Mit httptunnel kann man TCP-Verbindungen über das http-Protokoll tunneln und damit von überall sogar durch sehr restriktive Proxies Zugriff zu seiner Fritzbox bekommen. Näheres dazu ist hier nachzulesen.

Die Evolution meiner Erfahrungen, bereichert um zahlreiche hilfreiche Tipps und Hinweise der Linux-Gurus und Entwickler hier im Forum könnt Ihr in diesem Thread nachlesen, wo auch der richtige Platz für weitere Fragen und Diskussion ist.

Folgende Umgebung habe ich zum Bau des Pakets verwendet:

  • Fritzbox 7170 mit Freetz-1.0
  • StinkyLinux 1.06 in einer VM auf einem Macbook

Es gibt aber auch noch andere Umgebungen, um FW bzw. Freetz-Pakete zu bauen, welche hier nachzulesen sind.

In den HowTos gibt es einige wichtige Informationen darüber, was man mit Make-Targets wie menuconfig, toolchain, precompiled, recover usw. erreichen kann beim Bau einer Freetz-Firmware. Die Infos dort sind durchaus lesenswert, wenn man besser verstehen will, was genau beim Bau einer FW bzw. eines neuen Pakets für Freetz abläuft, wenngleich ich diese Infos auch erst hinterher gelesen habe (mea culpa).

Eine sehr gut Anleitung ist hier zu finden.

Es gibt ein kleines Demo Package (demopackagea). Weiteres dazu hier:

DemoPackageA Ein Demo-Package "Hello World" —- Forum-Beitrag incl. Download

Kurz-Anleitung um ein bestehendes Package anzupassen

  • Annahme es ist ein Build-System vorhanden. Dies kann das oben genannte StinkyLinux, in dem Freetz ausgecheckt wurde, sein. Alle hier genannten Verzeichnisse sind im Freetz-Ordner, dieser wird im folgenden Kurz-Anleitung mit "/" Symbolisiert.
  • Es gibt ein kompaktes Package mit dem Namen: "Empty". Hierbei handelt es sich um ein konkretes Package, das man als Vorlage nutzen kann. Dies einfach mal ansehen. ("freetz.ordner"/make/empty/* ).
  • Einen kurzen prägnanten Namen für das eigene Package ausdenken.
  • In dem Verzeichnis "make" einen Ordner erstellen. Dieser Ordner sollte so heißen wie das Package, dieser wird im folgenden Package-Ordner genannt.
  • Von dem "Empty-Package" die Datei "empty.mk" in den Package-Ordner übernehmen (und natürlich umbenennen. Der Name dieser Datei bestimmt den Namen des Packages).
  • Die Datei "package.mk" muss auch Inhaltlich angepasst werden. (In der Datei sollte kein "empty" (CASE-LESS) mehr stehen). Die Version sollte man auf "0.0.01" ändern. Der SITE-Eintrag ist nicht relevant, solange sich die Datei im Verzeichnis /dl befindet. Wenn man später die Datei zum Download anbietet, muß hier der entsprechende Wert eingetragen werden.
  • Die Dateien "Config.in" und "Makefile.in" anpassen, aber nicht umbenennen.
  • Damit das Package über "make menuconfig" gefunden werden kann muss in der Datei /make/Config.in das eigene Package eingetragen werden (Wie z.B. das Package empty eingetragen ist). Für ein neues Package ist erstmal der Bereich "Testing" angemessen.
  • make menuconfig aufrufen und das Package auswählen.
  • Jetzt kennt Freetz das Package, es muss aber noch erstellt werden. Dieses Mini-Package besteht aus zwei Dateien (pluginName.c und Makefile)
  • Erstelle einen Ordner (egal wo wird gleich wieder gelöscht) der Name des Orders muss "pluginName-Version" lauten. (Version=0.0.01)
  • Erstelle in diesem Ordner die Datei "pluginName.c" mit dem Inhalt:
    /*      "plugin_name".c Version:0.0.01  */
    #include <stdio.h>
    
    main(){
     printf("Hello World \n");
    }
    
  • Erstelle in diesem Ordner die Date Makefile mit dem Inhalt:
    BINARY=plugin_name
    OBJS=plugin_name.o
    
    all: $(BINARY)
    
    $(BINARY): $(OBJS)
    
    clean:
    	$(RM) $(BINARY) $(OBJS)
    
  • wechsle eine Verzeichnisebende runter
  • erstelle ein tgz Archiv (der Ordner kann danach gelöscht werden)(tar cfz plugin-0.0.01.tgz plugin-0.0.01)
  • kopiere das tgz Archiv in das Verzeichnis /dl
  • Jetzt kann das Package mittels make Packagename-precompiled das erste Mal erzeugt werden (aus: "/")

to be continued…