Wiki:help/howtos/development/package_creation

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

Diese Beschreibung ist höchstwahrscheinlich nicht das Gesuchte, Verwendung auf eigene Gefahr!
Hier gibt es eine Beschreibung zur Erstellung eines Pakets für ein fertiges Programm

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 gute 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…