Wiki:help/howtos/development/flash
zuletzt geändert vor 4 Jahre zuletzt geändert am 22.09.2008 10:39:14

Howtos: Entwicklung

  1. Entpacken und Packen von Firmware-Images
    1. Tools und Syntax
    2. Vorgehensweise
  2. Patches in Freetz einspielen
  3. Developer Information
  4. Ablauf eines Firmware-Updates
  5. Eigene Programme kompilieren
  6. Dynamische Bandbreitenanzeige per SVG
    1. Anleitung zur Test-Installation
  7. Platz sparen im Dateisystem der FritzBox
    1. Vorwort und Motivation
    2. Bestandsaufnahme: Wo stecken die Platzfresser?
    3. Weitere Spartricks
    4. Schlußwort
  8. Flash-Partitionen im laufenden Betrieb sichern
    1. Motivation
    2. Voraussetzungen
    3. Lösungsweg
    4. Wege, sich schnell einen Überblick zu verschaffen
    5. Zusammenfassung
  9. Release Management
    1. Subversion Repository
    2. Checklists
    3. GIT
    4. Downloads
    5. References
  10. 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
  11. Kernel konfigurieren und kompilieren
  12. 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
  13. ADAM2-Bootloader
    1. ADAM2-Backup anlegen
    2. ADAM2 überschreiben
    3. ADAM2-Befehle
    4. ADAM-Quellcode
  14. 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
  15. Busybox konfigurieren und kompilieren
  16. Wie baue ich ein eigenes Paket für Freetz?
  17. Firmware-Image-Namen analysieren und interpretieren
    1. Einleitung
    2. Skript-Code
    3. Daten im Rohformat
    4. Ausgabe grundlegender Informationen
    5. Ausgabe erweiterter Informationen
  18. Addon Paket installieren
  19. Paketverwaltung für Freetz
    1. Erweiterung des Dateisystems
    2. Paketverwaltung
    3. Links
    4. Kommentare
  20. Wie die FritzBox Manipulationen erkennt
    1. Ursachen
    2. Diagnose
    3. Lösungen
    4. Schlußwort und Ausblick
  21. 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
  22. Package Development
    1. Persistent Package Settings
  23. Erstellen einer GUI für Pakete in Freetz
    1. Motivation
    2. Grundlagen
    3. Wie funktioniert das mit der GUI?
  24. Flash Partitionierung
    1. Hidden SquashFS
    2. Contiguous SquashFS
    3. Hidden Root
  25. Trac Hooks
    1. trac-post-commit-hook
    2. trac-post-revprop-change-hook
  26. Package Developing - Advanced Topics
    1. Adding multi-binary packages
  27. 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
  28. Freetz Build-Prozeß
    1. Vorwort und Motivation
    2. Grundsätzliches
  29. 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
  30. 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
  31. Cross-Compiler / Toolchain erstellen

Flash Partitionierung

Im Flash der Fritzbox befinden sich bei jedem Modell folgende funktionale Einheiten:

  • Bootloader: ADAM2 (+ Environment)
  • Kernel: Linux 2.4.17_mvl21-malta-mips_fp_le oder 2.6.13.1-ohio
  • Dateisystem: SquashFS (gzip oder lzma)
  • Konfigurations-Dateien: TFFS

Bei der Flash Einteilung der Fritzboxen gibt es drei "Geschmacksrichtungen". Man kann dabei die Boxen in zwei Klassen einteilen: "Hidden Root" und "nicht-Hidden-Root". Bei den "nicht-Hidden-Root" Boxen kommt je nach Firmware Version Hidden SquashFS (bis *.04.01) oder Contiguous SquashFS zum Einsatz. Inzwischen haben alle Boxen, für die eine aktuelle Firmware mit Kernel 2.6.13.1 existiert, ein Bootloader-Update (EVA) bekommen. Damit wird das Flash Layout auf Hidden-Root umgestellt.

Ein Firmware Update lädt die enthaltenen Dateien filesystem.image nach mtd0 und kernel.image nach mtd1. Gelegentlich enthält ein Firmware Update auch eine Aktualisierung des Bootloaders welcher nach mtd2 geladen wird. Freetz modifiziert filesystem.image und kernel.image. Von einer Modifikation des Bootloaders ist dringend abzuraten, da man die Box ohne funktionierenden Bootloader nicht mehr wiederherstellen kann.

Die mtd Tabelle befindet sich im ADAM2 Environment und kann mit

cat /proc/sys/dev/adam2/environment | grep mtd

abgerufen werden. Bei Firmwares mit dem neuen Kernel (2.6.13.1) muss es so aussehen:

cat /proc/sys/urlader/environment | grep mtd

In dieser Tabelle sind immer mtd0 bis mtd4 aufgelistet. Im Falle von "Hidden Root" ist die Start und End-Adresse von mtd0 gleich 0 und mtd0 wird am Ende des Kernels ausgerichtet. Bei "nicht-Hidden-Root" Boxen werden mtd5 und mtd6 zusätzlich ausgerichtet am Ende des Kernels erzeugt. Zum Beispiel sieht die mtd Tabelle bei einer Fritzbox mit 4 MB Flash ohne Hidden Root folgendermaßen aus (passend zu den Schaubildern von Hidden SquashFS und Contiguous SquashFS am Beispiel der Fon WLAN 7050):

mtd0    0x900C0000,0x903C0000
mtd1    0x90010000,0x900C0000
mtd2    0x90000000,0x90010000
mtd3    0x903C0000,0x903E0000
mtd4    0x903E0000,0x90400000

Die mtd Tabelle einer Box mit 8 MB Flash mit Hidden Root (passend zum Schaubild von Hidden Root am Beispiel der 7170):

mtd0    0x90000000,0x90000000
mtd1    0x90010000,0x90780000
mtd2    0x90000000,0x90010000
mtd3    0x90780000,0x907C0000
mtd4    0x907C0000,0x90800000

Hidden SquashFS

Flash LegendeFlash Legende Diese Boxen verwenden bis Firmware Version *.04.01 Hidden SquashFS (original Firmware):

  • 4 MB Flash
    • Eumex 300 IP
    • Fritzbox Fon
    • Fritzbox Fon 5050
    • Fritzbox Fon ATA
    • Fritzbox Fon WLAN
    • Fritzbox Fon WLAN 7050
    • Fritzbox SL WLAN
    • Fritzbox WLAN 3030
    • Fritzbox WLAN 3050

Das Hidden SquashFS beginnt direkt hinter dem Kernel (256 Byte Padding) und enthält vor allem Treiber. Es wird während des Bootvorgangs im Startskript rc.S gemounted. Der Kernel und das Hidden SquashFS befinden sich in kernel.image, das root Dateisystem in filesystem.image. Hidden SquashFS am Beispiel der Fon WLAN 7050:

Flash Hidden SquashfsFlash Hidden Squashfs

Contiguous SquashFS

Flash LegendeFlash Legende Diese Boxen verwenden Contiguous SquashFS (original Firmware):

  • 2 MB Flash
    • Fritzbox SL
  • 4 MB Flash
    • Fritzbox Fon WLAN 7050 14.04.03 Beta

Beim Contiguous SquashFS wird fängt das root Dateisystem direkt nach dem Kernel an (256 Byte Padding). Da das root Dateisystem nun über mtd0 und mtd1 verteilt liegt, muss es im Firmware Update auch dementsprechend auf die Dateien kernel.image (Kernel + Anfang des root Dateisystems) und filesystem.image (Rest des root Dateisystems) aufgeteilt werden. Contiguous SquashFS am Beispiel der Fon WLAN 7050:

Flash ContiguousFlash Contiguous

Hidden Root

Flash LegendeFlash Legende Diese Boxen verwenden Hidden Root :

  • alle Boxen mit Kernel 2.6.13.1

Bei Hidden Root befindet sich das root Dateisystem — ähnlich wie bei Contiguous SquashFS — direkt hinter dem Kernel (256 Byte Padding). Diese Boxen kann man daran erkennen, dass die Start- und End-Adresse von mtd0 in der mtd Tabelle gleich 0 und die Datei filesystem.image im Firmware Update leer ist. kernel.image enthält sowohl den Kernel als auch das root Dateisystem. Hidden Root am Beispiel der Fon WLAN 7170 (die kürzeren Balken für den Kernel und das root Dateisystem sollen nur andeuten, dass auf der Box von den 8 MB noch einiges mehr frei ist, als bei den 4 MB Boxen):

Flash Hidden RootFlash Hidden Root