Fritzbox 06.20 entpacken und wieder packen geht nicht

full2000

Neuer User
Mitglied seit
8 Okt 2008
Beiträge
148
Punkte für Reaktionen
0
Punkte
16
Ich versuche gerade, die originale 06.20er Firmware anzupassen (Thema: debug.cfg...). Leider bleibt die Box nach dem Flashen meiner eigenen Firmware hängen. Nur ein Recover hilft noch. Hier die Schritte, die ich durchgeführt habe (freetz ist natürlich schon fertig installiert und konfiguriert):

1.) ./fwmod -u -d unpacked_firmware unpacked_firmware/FRITZ.Box_Fon_WLAN_7490.113.06.20.image

Ausgabe:
Code:
STEP 1: UNPACK
unpacking firmware image
Skipping 0 Bytes garbage...unpacking update image
    Reading a different endian SQUASHFS filesystem on unpacked_firmware/original/firmware/var/tmp/filesystem.image
    184 inodes (534 blocks) to write
    created 7 files
    created 11 directories
    created 91 symlinks
    created 86 devices
    created 0 fifos
unpacking filesystem image
    Reading a different endian SQUASHFS filesystem on unpacked_firmware/original/filesystem_core/filesystem_core.squashfs
    3770 inodes (4278 blocks) to write
    created 3175 files
    created 219 directories
    created 509 symlinks
    created 86 devices
    created 0 fifos
unpacking var.tar
done.

detected firmware 7490_de 113.06.20 rev28568 (08.08.2014 14:34:58)

FINISHED

2.) nichts verändert! (zum testen)
3.) ./fwmod -p -d unpacked_firmware unpacked_firmware/FRITZ.Box_Fon_WLAN_7490.113.06.20.image

Ausgabe:

Code:
detected firmware 7490_de 113.06.20 rev28568 (08.08.2014 14:34:58)

STEP 3: PACK
  checking for left over Subversion directories
packing var.tar
creating filesystem image
  SquashFS block size: 64 kB (65536 bytes)
copying kernel image
  kernel image size: 1.9 MB, max 4.0 MB, free 2.1 MB (2234880 bytes)
copying filesystem image
  filesystem image size: 21.5 MB, max 48.0 MB, free 26.5 MB (27799552 bytes)
packing unpacked_firmware/7490_-.de_20140820-101227.image
  image file size: 23.9 MB
done.

FINISHED

4.) erstelltes image geflasht -> Box hängt!

Was mir aufgefallen ist: das filesystem.image hat keine checksumme mehr. Ich habe daher die checksumme berechnen lassen und manuell ins image kopiert. Aber leider bleibt die Box auch mit diesem Image hängen.
Hat einer eine Idee, was da falsch läuft?!
 
Hab's gerade ausprobiert -> genau das gleiche wieder!
 
Die gleichen Meldungen wie bei dem Entpacken der originalen Firmware.
 
Ja, Zahlen sind alle gleich. Die Größe der entpacken Dateien ist auch gleich, unterscheiden sich aber geringfügig von der originalen Datei.
Bin ratlos....
 
Hab nochmal ein paar Sachen ausprobiert, aber leider immer das gleiche: Nach dem Flashen bleibt die Fritzbox hängen.
Gibt es dnen hier noch niemanden, der sich die debug.cfg wieder in die 06.20 reinpatchen möchte, ohne gleich Freetz zu installieren?
 
schon wieder mein Senf zu "anderes Verhalten der 7490 beim Firmware-Update" ...

ohne gleich Freetz zu installieren?
Mach ich auch anders (daher kenne ich auch das Packen von fwmod bei einer 7490 nicht richtig), trotzdem einige Bemerkungen:

Bei der 7490 läuft der "Flashvorgang" grundsätzlich anders ab, als bei anderen Boxen. Es gibt zwei Sätze von MTD-"Partitionen" (jeweils eine in "raw" für den Kernel und eine für das Wrapper-FS), zwischen denen nach jedem Flashvorgang umgeschaltet wird für den nächsten Start. Das heißt, nur bei jedem zweiten Flash-Vorgang wird auch dieselbe Partition im NAND geschrieben usw.

Dann kommt noch hinzu, daß das Squash-FS nicht einfach auch in "raw" in ein MTD geschrieben wird wie bei den anderen Boxen, es wird ein - im MTD schon vorhandenes - YAFFS gemounted und das SquashFS dann dort hineinkopiert, auch von dieser MTD-Partition gibt es zwei Versionen.

Ich habe noch keine Ahnung, wer da bei einem Fehler im YAFFS das entsprechend restauriert oder wie ein AVM-Firmwareupdate damit umgeht. Ich würde tippen, daß es nur bei einem AVM-Recover mit geschrieben wird, ein normales Firmware-Image enthält ja auch bei AVM nur den Kernel und das SquashFS. Aber irgendwie müssten Teile des Wrappers auch zum Kernel passen, insofern ist das noch etwas mysteriös ... allerdings läuft es wohl auf ein eher "generisches" Wrapper-FS hinaus, der Rest wird anscheinend direkt im initramfs des Kernels irgendwie behandelt. Im Extremfall wird ein YAFFS beim Mounten "formatiert", wenn also keine anderen Dateien benötigt werden (das Wrapper-FS ist ja auch im laufenden Betrieb einer 7490 unter /wrapper gemounted), könnte auch bei korruptem YAFFS das Löschen des MT-Devices und anschließendes Mounten als yaffs2 schon ausreichen für eine "Restaurierung" und die Aufnahme der SquashFS-Datei.
[EDIT]Geklärt, das YaFFS wird wirklich durch einfaches Löschen des Inhalts des MTD und anschließendes Mounten als yaffs2 neu formatiert. der gesamte Inhalt der Wrapper-Partition wird aber aus der Datei filesystem.image in einer Firmware-Image-Datei kopiert, inkl. SquashFS-File für das rootfs. Das ist dann also ein SquashFS (root) in einem SquashFS (wrapper), wobei das System in wrapper bei der Installation dann ein yaffs2 ist.[/EDIT]

Ich habe der AVM-Recovery noch nie so genau auf die Finger gesehen bei der 7490, die "normalen" Angaben im Urlader-Environment zu den MTD-Partitionen legen eigentlich nahe, daß da die Unterschiede zu anderen Boxen eher von EVA "versteckt" werden. Ob dazu jetzt auch das Anlegen des Wrapper-FS in der Partition zählt, müsste man ggf. einfach mal ausprobieren.

Diese Vorgehensweise kann jetzt jedenfalls m.E. dazu führen, daß Du immer in eine Version des Flashs Dein eigenes System schreibst (dann wird auch umgeschaltet) und das AVM-Recovery-Programm hinterher immer das andere System neu schreibt und dann wieder dahin umschaltet. Somit würde ein Fehler im Wrapper-YAFFS immer wieder genau bei Deinem eigenen Image dazu führen, daß z.B. das root-FS nicht gemounted werden kann. Selbst wenn EVA beim Schreiben von Kernel und SquashFS jetzt keine Rücksicht nimmt auf die gerade "aktuelle" MTD-Partition und immer nach MTD0 und MTD1 (linux_fs_start=0) schreibt, wäre es immer noch möglich, daß dann eben Deine Versuche immer in der anderen Version (MTD2/3 und linux_fs_start=1) landen, mit genau demselben Ergebnis.

mtd0/1 in EVA dabei bitte nicht mit MTD0/1 im laufenden System verwechseln, mtd2 im Bootloader ist auch NOR und läuft unter MTD6 im FRITZ!OS. Hinter mtd0/1 im Loader dürfte sich die jeweils aktuelle Version (von EVA vermutlich anhand von linux_fs_start per MMU gemappt) der NAND-Partitionen verbergen, bis der FRITZ!OS-Kernel die Kontrolle übernimmt ... das waren sicherlich weniger Änderungen, die da am EVA-Code erforderlich waren.

Ich würde Dir vorschlagen, einmal AVM-Recovery zu machen, dann zu booten und den Wert von "linux_fs_start" zu notieren (0 oder 1). Anschließend noch einmal AVM-Recovery und wieder im Urlader-Environment nach linux_fs_start zu sehen. Wenn dort jetzt der andere Wert steht und die Box mit beiden Werten ordentlich gestartet ist, kannst Du mit einiger Wahrscheinlichkeit davon ausgehen, daß beide "filesystem"-Partitionen ein gültiges Wrapper-FS enthalten und es noch einmal mit dem eigenen Image versuchen. (Eigentlich reicht es auch aus, das neue SquashFS-File in das YAFFS in der "reserved-filesystem"-Partition mit dem richtigen Namen zu kopieren und die "linux_fs_start"-Variable umzusetzen, solange Du nicht auch den Kernel modifizieren willst.)

Ich kann mir ein primitiveres Vorgehen der EVA (immer nur MTD0/1 zu verwenden und linux_fs_start stur auf 0 zu setzen) nicht vorstellen, dann würde es vermutlich beim nächstem AVM-Update (das dann ja seinerseits wieder MTD2/3 benutzen würde) ja sofort auch wieder krachen. An das parallele Schreiben von MTD0 und MTD2 sowie MTD1 und MTD3 kann ich (geschlossen aus Symptomen) nicht so recht glauben, das müßte die EVA dann ja ohnehin intern irgendwie managen und es macht für mich wenig Sinn, bringt nur einen zusätzlichen Lösch-/Schreibzyklus und braucht mehr Zeit.

Auch das interne "Vorhalten" eines passenden YAFFS-Images, in das dann nur noch das SquashFS-File geschrieben wird, kann ich mir wegen der Abhängigkeiten (die EVA müßte dann etwas vom YAFFS wissen und bei Problemen damit auch geändert werden) eher nicht vorstellen, dazu passen auch die Timestamps der Dateien im Wrapper-FS meiner Box nicht. Da hat die eine Partition Dateien mit einem Datum vom 01.01.1970 (also praktisch ohne gültige Zeit) und die andere (AVM-Recovery-Programm für die 06.20 vom 13.08. einmal getestet, leider genau bei linux_fs_start=1, so daß ich nicht sagen kann, ob immer nach MTD0/1 geschrieben wird oder nur weil die gerade "dran" war) solche mit dem 12.08.2014, 12:30 Uhr. Das schließt das parallele Beschreiben der Wrapper-Partitionen eigentlich genauso aus, wie das Kopieren des SquashFS-Files als Datei in das YAFFS durch EVA.

Allerdings kann dann eben unter ungünstigen Umständen das von Dir geschilderte Szenario (nur jedes zweite System funktioniert) auch bei "reiner AVM-Firmware" theoretisch auftreten, keine Ahnung, ob AVM da noch andere Vorkehrungen getroffen hat.

Wenn Du aber ohnehin immer wieder das Recovery-Programm ausführst, kannst Du das für die aktuelle Version ja gleich mitprüfen.

Es kann natürlich auch sein, daß ich mit meiner Vermutung zu den Ursachen Deines Problems komplett daneben liege, der beschriebene Ablauf bleibt aber derselbe. ;)
 
Zuletzt bearbeitet:
Wow! Danke erstmal für die ausführliche Erklärung!! (auch wenn ich nicht alles komplett verstanden habe....:confused:)
War jetzt gerade dabei, mir ein (minimales) Freetz zu basteln und werde (falls es nicht funktionieren sollte), deine Version gleich hinterher ausprobieren.

(Komme aber leider erst die nächsten Tage dazu... Also etwas Geduld...)
 
Sooo, viel rumexperimentiert, aber leider immer noch kein lauffähiges Image :(

Interessant ist die Tatsache, dass sogar beim Freetz-Image KEINE Checksumme am Ende der Datei (filesystem.image) berechnet wird. Ist dies so wohl gewollt, oder liegt hier evtl. der Fehler?!
Vielleicht kann sich einer ja mal ein lauffähiges Freetz-Image mit einem HEX-Editor ansehen und die letzten 8 Bytes hier posten?! Dazu einfach das .Image mit WinZip öffnen und die Datei filesystem.image extrahieren.
 
oder liegt hier evtl. der Fehler?!
Prüfsumme ist egal, wird nicht gecheckt bzw. nicht als Fehler behandelt, wenn sie nicht stimmt.

Sooo, viel rumexperimentiert
Und was konkret, damit spätere Leser die von Dir schon geklärten Sackgassen vermeiden können ? ;)

EDIT: Wenn Du wissen willst, ob Dein filesystem.image in Ordnung ist, brauchst Du es ja nur auf die Box zu kopieren und dort irgendwo unterhalb von /var per loop-Device zu mounten. Dazu reicht ein simples mount mit Quelle und Ziel aus, braucht nicht einmal irgendwelche Optionen, ist sogar immer 'ro'.
 
Zuletzt bearbeitet:
Ich habe diverses ausprobiert (Recover mehrfach durchführen, mein Image mehrfach flashen, Freetz auf 06.20er Basis, Freetz auf 06.05er Basis, wobei ich das Freetz-Image aber nur zum Vergleichen erstellt habe, nicht zum flashen, dann noch mit fwmod ein paar Images erstellt...)

Wie kann ich das Image auf der Fritzbox mounten? Einfach nur:

Code:
mount MeinImage.image /var/meinImage

P.S.: Die Checksumme vom Image wird doch im Install-Script berechnet, oder habe ich das falsch gelesen? Hab's leider nur kurz überflogen...
 
Zuletzt bearbeitet:
mount MeinImage.image /var/meinImage
Exakt, wobei natürlich das Image nur das SquashFS und nicht das tar-File sein darf.

Die Checksumme vom Image wird doch im Install-Script berechnet, oder habe ich das falsch gelesen?
Meines Wissens nur bei altem Kernel und auch nicht bei der 7490; selbst wenn ... da kommt kein "Fehler" bei raus, oder ? Sieh Dir einfach das komplette Skript an und nicht nur die "Buzzwords".

Install-Script ist auch nicht sehr konkret, da kommen unterschiedliche Skripte mit "install" im Namen vor im Rahmen eines Flashvorgangs und eines Neustarts, von /var/post_install, was bei einem "normalen" Neustart aus dem SquashFS dorthin kopiert wurde, bis zu einem /var/post_install, was beim Flashen einer neuen Firmware die Version aus dem SquashFS ersetzt und dynamisch aus einem Skript im neuen Firmware-Image generiert wird, nachdem dieses auf der Box entpackt wurde (vorher wird i.d.R. die Signatur von firmwarecfg geprüft) und dieses Skript heißt zu allem Überfluß auch noch "install".

EDIT:
Recover mehrfach durchführen
Ok, das hatte ich Dir empfohlen, allerdings mit etwas anderer Begründung und mit zwischenzeitlichen "Kontrollen". Wenn Du die nicht auch ausgeführt hast, hat das nur sehr bedingt neue Erkenntnisse gebracht, eigentlich nur: "Zweimal hintereinander Recovern hilft auch nicht in meinem Fall." (wenn Du die wirklich auch hintereinander ohne anderes dazwischen ausgeführt haben solltest).

mein Image mehrfach flashen
Nur mal so aus Neugier ... wie hast Du denn Dein eigenes Image, mit dem die Box ja nicht starten will, zweimal hintereinander auf dieselbe Box gebracht ? :confused:
 
Zuletzt bearbeitet:
Ich habe jetzt das filesystem.image mal auf der Fritzbox gemountet und bekomme dann auch ein Filesystem, welches der Fritzbox ähnelt. Aber auch nur ähnelt, weil alles (fast) leere Verzeichnisse sind. Als binary finde ich lediglich die /bin/busybox und die /lib/libuClibc wieder:

Code:
drwxrwxrwx   11 root     root           116 Aug 28 10:56 .
drwxr-x---   15 root     root          1160 Aug 28 13:16 ..
drwxr-x---    2 root     root           613 Aug 28 10:55 bin
drwxr-x---    2 root     root             3 Aug  8 14:35 core
drwxr-x---    3 root     root          1130 Aug 28 10:55 dev
drwxr-x---    2 root     root            33 Aug 28 10:55 etc
-rw-r-----    1 root     root      22290432 Aug 28 10:56 filesystem_core.squashfs
drwxr-x---    2 root     root            97 Aug 28 10:55 lib
drwxr-x---    2 root     root             3 Aug  8 14:35 proc
drwxr-x---    2 root     root           310 Aug 28 10:55 sbin
drwxr-x---    2 root     root            21 Aug 28 10:55 tmp
drwxr-x---    2 root     root             3 Aug  8 14:35 var

Interessanterweise ist dies bei der originalen filesystem.image genauso!
D.h., dass mein filesystem.image wahrscheinlich ok ist.
 
Interessanterweise ist dies bei der originalen filesystem.image genauso!
Das ist das komplette Wrapper-Filesystem. Das "richtige" SquashFS, das dann auch im Betrieb benutzt wird, ist die "filesystem_core.squashfs" in diesem Wrapper.

Dann müßte die Kontrolle des FS für das Image ja auch ergeben, daß sich in "filesystem.image" kein SQFS, sondern ein YAFFS befindet.

Wenn Du wirklich in beiden Kernel-Devices den identischen Kernel hast und aus beiden Partitionen booten kannst, kannst Du das squashfs auch per Hand in das inaktive System bringen und dann umschalten.

EDIT:
Was mir etwas unklar bleibt ... wie macht das die EVA mit der Verwaltung von defect-Blöcken für den NAND-Flash, wenn da stur ein neues YAFFS reinkopiert wird ? Die würden dann ja bei jedem Flashen überschrieben und das wäre schon komisch. Irgendwo sehe ich wohl da einen entscheidenden Faktor nicht ... aber das NAND-Flash ist doch wohl "nackt" bei der 7390 oder ist das noch ein Controller dazwischen, der seinerseits die Verwaltung übernimmt ? :gruebel:
 
Zuletzt bearbeitet:
Nur mal so aus Neugier ... wie hast Du denn Dein eigenes Image, mit dem die Box ja nicht starten will, zweimal hintereinander auf dieselbe Box gebracht ? :confused:
Sorry, das hatte ich wohl misverständlich ausgedrück. Dazwischen hatte ich natürlich ein Recover gemacht.

Wenn Du wirklich in beiden Kernel-Devices den identischen Kernel hast und aus beiden Partitionen booten kannst, kannst Du das squashfs auch per Hand in das inaktive System bringen und dann umschalten.

Kernel ist gleich, ja. Das mit den beiden Partitionen muss ich mir noch anschauen. Weiss momentan noch nicht, wie ich umschalten kann...
 
Sorry, das hatte ich wohl misverständlich ausgedrück. Dazwischen hatte ich natürlich ein Recover gemacht.
Ok, dann bist Du ja beim Umschalten der Systeme wieder in der anderen Partition gelandet.

Prüfe am besten mit
Code:
root@FB7490:~ $ md5sum /dev/mtd0
b4d88cd54608be46cfa70a992f8ea94e  /dev/mtd0
root@FB7490:~ $ md5sum /dev/mtd2
2fab6ab21bd54067fedbafe2e49f8ae0  /dev/mtd2
die Kernel noch einmal genau (mtd0 ist ein 06.20 und sollte bei Dir eigentlich denselben Hash haben), bei Dir sollten beide Hashes identisch sein.

Wenn das stimmt, sehen wir weiter ... also bitte erst einmal prüfen. Dann auch nicht vergessen mal dazu zu schreiben, was Du denn da inzwischen genau in Deiner Box in jeder Partition für ein System hast.
Die Ausgabe von "grep linux_fs_start /proc/sys/urlader/environment" ist auch notwendig.

So, also erst einmal ans Werk ...
 
Hashes sind gleich (aber nicht identisch mit deinen, habe ja noch den 06.05er Kernel drauf).
Und die Ausgabe bringt:

Code:
linux_fs_start  1
 
Hashes sind gleich (aber nicht identisch mit deinen, habe ja noch den 06.05er Kernel drauf).
Jetzt habe ich ein dickes Verständnisproblem. Wolltest Du denn nicht die 06.20 drauf haben ? Wenn Du schreibst, Du hast mehrmals Recover gemacht, mit welcher Version denn dann bitte ? :confused:

Wenn Du kein eigenes Image auch für die 06.05 gebaut hast, brauchst Du erst einmal wenigstens in einer Partition ein originales AVM 06.20. Das wäre dann beim jetztigen Stand Deines Systems in MTD0/1 untergebracht und muß erst einmal überhaupt starten. Die Anleitung zum Flashen eines eigenen SquashFS in ein 06.05 ist mir - ehrlich gesagt - jetzt zu dumm, Du willst das ja ohnehin durch 06.20 ersetzen, sonst müßtest Du Dich ja um die debug.cfg gar nicht kümmern.

Wenn Du dann in dem neuen System auf Basis der 06.20 erneut ins Urlader-Environment schaust, sollte da eine 0 stehen. Dann sehen wir wieder weiter ...

Soweit wieder vorläufig ...
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.