Wie wird die Checksumme der Images erstellt?

Elfine

Neuer User
Mitglied seit
17 Jan 2008
Beiträge
77
Punkte für Reaktionen
0
Punkte
0
Hallo,
ich hoffe ihr habt etwas Mitleid mit mir. Ich bin ja noch anfänger und habe auch im Forum gesucht und das Wiki befragt aber keine Lösung gefunden.

Um etwas zu lernen habe ich mal das Image der Fritzbox!Fon zerpflückt.

Zuerst habe ich das Image enttart und dann das Kernel.image extrahiert.

Danach habe ich das Image mit find-squashfs gesplitet. In kernel.raw und kernel-image.raw (oder so ähnlich).

Nun konnte ich mit unsquashfs-lzma das Image entpacken.

Nach dem Entpacken habe ich es wieder mit mksquashfs gepackt (ohne Änderungen zu machen)

Danach habe ich mit cat kernel.raw mksquashfs.image > ergebnis.image meine kernel.image Datei wieder hergestellt.

Füge ich diese wieder im eigentlichen Image ein und versuche die Firmware zu upgraden dann kommt immer der Fehler:
Code:
FRITZ!Box Anlagensoftware (Firmware)
Das Firmware-Update ist fehlgeschlagen:

Nach dem Laden der Firmware wurde eine falsche Prüfsumme festgestellt (Filesystem).

siehe auch:

Code:
BusyBox v1.5.1 (2008-01-19 08:13:04 CET) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

Jan  1 01:44:28 ar7cfgctl[1085]: patching ts rules from bpf to tc
ermittle die aktuelle TTY
tty is "/dev/ttyS0"
Serielles Terminal
/ $ echo disable > /dev/watchdog
/ $ Jan  1 01:45:05 firmwarecfg[1090]: sign_wrapper_init - lib loaded
Jan  1 01:45:07 usermand[1097]: not running
Jan  1 01:45:07 dsld[1099]: not running
Jan  1 01:45:08 ctlmgr[1100]: not running
Jan  1 01:45:27 ar7cfgctl[1168]: patching ts rules from bpf to tc
Jan  1 01:45:29 ar7cfgctl[1216]: patching ts rules from bpf to tc
Jan  1 01:45:31 ar7cfgctl[1258]: patching ts rules from bpf to tc
Jan  1 01:45:32 websrv[387]: /cgi-bin/firmwarecfg(1090): exit 4

Ich habe mal das Installscript editiert und die Überprüfung herausgeworfen aber das bringt nichts. Nun habe ich hier im Forum gesucht (69 ergebnisse bei Checksumme) aber meistens stand da nur "meine Checksumme stimmt/stimmt nicht" Eine Erklärung wie die Checksummer erstellt wird und wo ich die finde weiss ich nicht.

So wie ich das sehe arbeitet der DS-Mod doch ähnlich. Image entpacken, Änderungen einfügen, Image neu versquashen. Nur finde ich dort auch nicht genau heraus wie die Checksumme zu erstellen ist.

Ich weiss dass es einfacher ist Sachen ins Root zu legen und das Image im DS-Mod zu erstellen. Ich will aber etwas lernen und hoffe dass ich das auch mal schaffe.


Für Antworten wäre ich sehr dankbar.
 
Lies Dir mal fwmod durch. Die tools/tichksum berechnet. Es handelt sich um eine CRC-32, soweit ich mich erinnere.
 
Nach entpacken des .image, Prüfsumme entfernen:
Code:
./rmtichksum -f "./firmware/var/tmp/kernel.image"
cat "./firmware/var/tmp/kernel.image" "./firmware/var/tmp/filesystem.image" > tmp.image
mv tmp.image "./firmware/var/tmp/kernel.image"

Vor dem Zusammenpacken, Prüfsumme wieder hinzufügen:
Code:
./tichksum "./firmware/var/tmp/kernel.image"

EDIT:
da war einer schneller ;)
 
Vielen Dank! Ich mache mich gleich auf die Suche.

Edit: Und ich war zu langsam ;)
Jetzt steht es ja ausführlich da.
Ich werde dann mal genau alles durchsuchen und testen.

Was wäre ich nur ohne euch? Vielen Dank!
 
Entschuldigung für den Doppelpost aber sonst merkt ja keiner dass ich Neuigkeiten habe.


Ich habe es jetzt genau nach deiner Anleitung gemacht.

1. kernel.image + filesystem.image extrahieren
2. Checksumme entfernen.
3. cat "./firmware/var/tmp/kernel.image" "./firmware/var/tmp/filesystem.image" > tmp.image
mv tmp.image "./firmware/var/tmp/kernel.image"
4. find-squashfs und ich habe kernel.raw kernelsquashfs.raw
5. fakeroot unsquashfs-lzma kernelsquashfs.raw
6. fakeroot mksquashfs-lzma root-squashfs kernel2.raw
7. cat kernel.raw kernel2.raw -> kernel.image
8. checksumme hinzufügen
9. kernel image wieder ins tar aufgenommen


Beim flashen wieder der gleiche Fehler. Checksumme falsch. Was mache ich nur falsch?
 
Keine Ahnung, was da falsch läuft. Das ist soweit alles richtig.
Hab mal mein Skript als Anhang beigefügt. Vielleicht hilft es dir ja.

EDIT:
ich würde jetzt aber spontan tippen, dass du die Checksumme vom falschen .image entfernst/hinzufügst.
 

Anhänge

Zuletzt bearbeitet:
Vielen Dank!

Ich habe mir dein Script und auch mal das fwmod script angeschaut.
Bei mir läuft das eigentlich genauso. Ich denke ich werde Morgen mal in Ruhe ein neues Image (oder eine original FW) benutzen und es noch einmal versuchen.

Ich glaube heute geht nichts mehr, mir raucht einfach der Kopf :(

PS: Mal eine Frage zur Boardsoftware. Warum steht da "0x aufgerufen" Ich habe es inzwischen 3x heruntergeladen. (Will ja nicht dass jemand denkt ich wäre undankbar und würde mir die angehängten Dateien nicht einmal anschauen :( )

Edit: Ich weiss nicht ob dies der Grund ist aber ich habe zumindest einen Fehler gefunden. Linux läuft bei mir auf der VMWARE-Maschine. Ich übertrage das Image per Netzwerk auf den Windowshost und flashe von dort (Da es beim flashen vom Linux immer Fehler gab). Die MD5 Summe auf dem Linuxrechner für das Image stimmt nicht mit dem MD5 auf dem Windowsrechner überein. Ich denke ich muss erst einmal einen alten Rechner ausbuddeln und auf dem nur Linux laufen lassen.
 
Zuletzt bearbeitet:
Ich verwende auch VMWare und flashe über die Weboberfläche unter Windows. Klappt ohne Probleme. Es handelt sich nur um die Prüfsumme des kernel.image. Bei der Übertragung mit WinSCP/FTP/Samba/etc. sollte die Datei gleich bleiben.
 
Die mit tichksum erstellte Prüfsumme ist ein standard CRC-32 Polynom, das über die Datei und die Länge der Datei gebildet wird. Details dazu im Quelltext des Programms.

Allerdings stört sich ein Firmware UPdate nie an einer fehlenden Prüfsumme, nur an einer falschen. Zumindest war das früher mal so.

Kann es sein, daß Du in Deine neue Firmware auch die Signatur mit aufgenommen hast, also die Datei ./var/signature ?
Diese enthält eine Signatur über die Firmware und kann nur mit dem geheimen Schlüssel von AVM erstellt werden.
 
Wenn er eine Signatur hätte, dann wären wir schlauer. Vielleicht hat er einen Speedport?

MfG Oliver
 
So, es hat etwas gedauert. Das erste Problem ist nun behoben. Ich habe die VMware-Maschine und den PC rebootet. Dann habe ich alles nochmal von vorne gemacht und das Endergebnis wurde von der kleinen Fritzbox!Fon ohne zu murren geflashed.

Nachdem erfolgreichen Flashen startete die Box jedoch nicht mehr.

Code:
      mount on mtd4 and mtd5 (double buffering)
Adam2 environment variables API installed.
[prepare_namespace] new mount root /dev/mtdblock1
use lzma compression
VFS: Mounted root (squashfs filesystem) readonly.
Freeing prom memory: 0kb freed
Freeing unused kernel memory: 116k freed (3526 free)
Warning: unable to open an initial console.
AR7WDT: System Init UEberwachung 120 Sekunden
TFFS Name Table 9
[setup_irq]: irq 15 irqaction->handler 0x940d858c (serial8250_interrupt+0x0/0x13
c )
3Jan  1 00:00:05 ar7cfgctl[149]: patching ts rules from bpf to tc
[setup_irq]: irq 15 irqaction->handler 0x940d858c (serial8250_interrupt+0x0/0x13
c )
[setup_irq]: irq 15 irqaction->handler 0x940d858c (serial8250_interrupt+0x0/0x13
c )
[setup_irq]: irq 15 irqaction->handler 0x940d858c (serial8250_interrupt+0x0/0x13
c )
[setup_irq]: irq 15 irqaction->handler 0x940d858c (serial8250_interrupt+0x0/0x13
c )
Call Trace:
 [<94023f6c>] panic+0x34/0x198
 [<941f0cf8>] build_clear_page+0x11dc/0x1424
 [<940cec8c>] AR7WDT_timer_init_ctrl_handler+0x0/0x2c
 [<940cecb0>] AR7WDT_timer_init_ctrl_handler+0x24/0x2c
 [<9402e2d4>] run_timer_softirq+0x170/0x1f4
 [<94029d7c>] __do_softirq+0x6c/0xf8
 [<94029e60>] do_softirq+0x58/0x8c
 [<9400afbc>] ll_timer_interrupt+0x40/0x4c
 [<94000464>] init+0x0/0x26c
 [<94000f50>] mipsIRQ+0x110/0x118
 [<940076e8>] kernel_thread+0x74/0x8c
 [<94024a6c>] release_console_sem+0x170/0x274
 [<941e6000>] _sinittext+0x0/0x78
 [<94007370>] cpu_idle+0x38/0x50
 [<940054d4>] r4k_wait_idle+0x6c/0x3e0
 [<94007370>] cpu_idle+0x38/0x50
 [<941e6760>] start_kernel+0x1ec/0x1fc
 [<941e6758>] start_kernel+0x1e4/0x1fc
 [<941e6128>] unknown_bootoption+0x0/0x2d4

Kernel panic - not syncing: ar7wdt_hw_reboot: init sequence hangs !

 <0>Rebooting in 5 seconds..Linux version 2.6.13.1-ar7 () (gcc version 3.4.5) #1
 Sat Jan 19 08:16:07 CET 2008
memsize=16 MByte
flashsize=4 MByte
&_end=0x9422d3e4 PFN_ALIGN(&_end)=0x9422e000 CPHYSADDR(PFN_ALIGN(&_end))=0x1422e
000 memsize=0x1000000
CPU revision is: 00018448
[ar7_clk_init]: dsl xtal 25000000Hz lan xtal 25000000Hz
[ar7_gpio_init]
Determined physical RAM map:
 memory: 0022e000 @ 14000000 (reserved)
 memory: 00dd2000 @ 1422e000 (usable)
On node 0 totalpages: 4096
[alloc_node_mem_map] reduce size from 2752544 Bytes to  131104 Bytes
[alloc_node_mem_map]: (org) sizeof(mem_map) = 131104 mem_map=0x94231000-0x942510
20
[alloc_node_mem_map]: sizeof(mem_map) = 2752544 mem_map=0x93fb1000-0x94251020
zone=0 zone_size[j]=0x86016
realsize=4096
  DMA zone: 4096 pages, LIFO batch:1
zone=1 zone_size[j]=0x0
realsize=0
  Normal zone: 0 pages, LIFO batch:1
zone=2 zone_size[j]=0x0
realsize=0
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line:  console=ttyS0,9600n8r
[ld_mmu_r4xx0] memcpy((void *)(CAC_BASE   + 0x100), &except_vec2_generic, 0x30)
Primary instruction cache 16kB, physically tagged, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, linesize 16 bytes.
Synthesized TLB refill handler (20 instructions). Base=0x942009bc
TLB synthesizer field overflow (simm)
Synthesized TLB load handler fastpath (34 instructions) Base=0x94204620.
TLB synthesizer field overflow (simm)
Synthesized TLB store handler fastpath (34 instructions) Base=0x94204820.
TLB synthesizer field overflow (simm)
Synthesized TLB modify handler fastpath (33 instructions) Base=0x94204a20.
PID hash table entries: 128 (order: 7, 2048 bytes)
CPU frequency 150.00 MHz
Using 75.000 MHz high precision timer.
[setup_irq]: irq 127 irqaction->handler 0x94042a10 (no_action+0x0/0x8 )
[register_console] enable commandline console 0
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 13972k/14152k available (1569k kernel code, 164k reserved, 371k data, 11
6k init, 0k highmem)
totalram_pages= 3497
Calibrating delay loop... 149.50 BogoMIPS (lpj=747520)
loops_per_jiffy=747520
Mount-cache hash table entries: 512
Checking for 'wait' instruction...  available.
NET: Registered protocol family 16
Can't analyze prologue code at 94186b28

Ich denke mal dass ich das falsche mksquashfs genommen habe. (Mksquashfs-lzma aus dem DS-Mod-Tools Verzeichnis) Die Firmware auf der Box ist ein DSMod entstanden aus der letzten Firmware für die FritzboxFon xxxx33

Aber mit der Checksumme geht alles klar.

Achja, es ist eine einfache Fritzbox!Fon ohne Wlan die ich als Testbox dekradiert habe. Die Firmwareversion in der Signatur zu setzen wäre eine Menge Arbeit da die sich etwa 3x pro Tag ändert.
 
Zuletzt bearbeitet:
Du musst auf die Dateien unter /dev aufpassen. Da müsstest du eigentlich beim unsquashfs viele Warnungen gesehen haben. Deshalb machen wir das im dsmod mit fakeroot. Ansonsten musst du /dev/console per Hand erstellen (mit mknod).

MfG Oliver
 
Komischer Weise kam nicht eine einzige Warnung. Ich habe allerdings auch immer fakeroot davor gesetzt also bei allem was mit squashfs zu tun hatte.

fakeroot ./mksquashfs-lzma root-squash test.image

und

fakeroot ./unsquashfs-lzma kernel.image


ich schau gleich mal nach den Devices. Da wäre ich nie drauf gekommen :(

Man ist das alles kompliziert - oder ich bin einfach nur zu dumm.



Edit: Unter dev sind 202 Dateien, darunter auch die console. Jetzt bin ich wirklich verwirrt.



Edit2: So das war es für heute, ich gehe ins Bett. Gute Nacht ! ;)
 
Zuletzt bearbeitet:
Warning: unable to open an initial console.
/dev/console ist zwar da. Aber es ist kein Character Device! Deshalb musst du es mit mknod neu anlegen. fakeroot bringt nur was, wenn du die Session abspeicherst und beim mksquashfs wieder lädst.
Man ist das alles kompliziert - oder ich bin einfach nur zu dumm.
Dumm bleiben die, die nicht fragen. Du bist auf dem besten Weg ein "Developer" zu werden... ;-)

MfG Oliver
 
Soetwas freut mich doch wenn ich es höre ;)

Leider habe ich heute Abend nicht viel Zeit aber in den letzten Minuten konnte ich noch schnell etwas testen. Du hattest vollkommen Recht. Unter /dev sind sämtliche "Formatierungen" verloren gegangen.

Das mknod kannte ich ja schon von den Character devices aber ich habe mir trotzdem mal das Wiki dazu angeschaut. Wie schon befürchtet benötige ich auch hier wieder eine major und minor number.

Ich habe also mal per hand /dev/console gelöscht und dann mit mknod -m 622 ./console c 5 1 wieder angelegt. Die "Formatierung" ist nun auch vorhanden.

Ich frage mich allerdings warum die vielen, wenn ich es mal "Formatierungen" nennen darf, verloren gehen.

Ich habe beim unsquashen als "root" mit fakeroot entpackt. Später wieder alles mit fakeroot mksquashfs gepackt. Im fwmod sowie in dem custom "fwmod" steht ja auch nichts davon drin dass die devices verloren gehen.

Ich frage nur deshalb weil es mich wundert. Wenn dort das Problem nicht besteht dann würde ich auch lieber den Weg nutzen als mühsehlig 202 devices neu zu erstellen.

Leider habe ich heute Abend keine Zeit mehr aber ich hoffe dass ich zumindest Morgen weiter "forschen" kann.


Und zu guter letzt noch einmal ein Dankeschön an alle, dafür dass ihr mir immer mit Rat und Tat zur Seite steht. Ich habe jetzt auch wie gewünscht eine Signatur erstellt. Sie ist nicht schön aber sie ist da ;)
 
Ich frage mich allerdings warum die vielen, wenn ich es mal "Formatierungen" nennen darf, verloren gehen.

Ich habe beim unsquashen als "root" mit fakeroot entpackt. Später wieder alles mit fakeroot mksquashfs gepackt. Im fwmod sowie in dem custom "fwmod" steht ja auch nichts davon drin dass die devices verloren gehen.
Ich hatte gestern schonmal die Sache mit dem Speichern angesprochen. Da merkt sich fakeroot, dass du Character Devices nach /dev entpackt hast und nutzt diese Information beim packen wieder. Wenn du einfach zweimal fakeroot aufrufst, dann geht diese Information jedoch verloren.
Eigentlich ist nur /dev/console wichtig, denn während dem Bootprozess (rc.S) wird ein tmpfs über /dev gemountet und die Devices werden mit makedevs neu angelegt.

MfG Oliver
 
Wieso verwendest Du denn nicht einfach fwmod zum Aus- und Einpacken, anstatt es nachzubauen?
 
Entschuldigt bitte das ich mich erst so spät melde aber ich war leider ziemlich beschäftigt.

Meinen letzten Beitrag in diesem Thread vergesst bitte. Manchmal sollte man zuerst denken, viel ausprobieren und wenn dann Probleme auftreteten Fragen stellen.

Leider war es beim letzten mal etwas spät und ich schon müde sonst hätte ich bestimmt den Fehler gefunden.

Die Probleme habe ich nun auch gefunden. Ich hatte zwar fakeroot im System installiert aber es war fehlerhaft. Macht man es direkt unter ROOT dann geht es, auf einem neuen System geht dann auch Fakeroot.

Leider hatte ich nach dem Flashen das gleiche Problem "keine Console möglich" Ich habe mir dann mein Image genau angeschaut und den Fehler entdeckt. So peinlich das auch ist, ich habe beim mksquashfs die falsche Pfadangabe gesetzt. So wurde nicht das eigentliche System gesquashed sondern der Ordner squashfs-root gleich mit. Nach dem entpacken des Images auf der Box konnte /dev/console nicht gefunden werden weil es da unter /squashfs-root/dev/console lag.

Nachdem ich das dann auch gerichtigt hatte funktionierte alles.

Also sind alle Probleme gelöst.

Ich habe nun sogar mal mtd1 per Bootloader FTP ausgelesen, bearbeitet und wieder eingespielt. Das ist wirklich interessant wenn man nebenbei das Com-Terminal laufen lässt.

@kriegaex
Ich bin etwas seltsam. Ob es nun gut oder schlecht ist weiss ich nicht. Aber ich habe mir am Anfang überhaupt keine Scripte angeschaut und wollte es auf eigene Faust versuchen. Wenn man dann nicht weiter kommt schaut man in die Scripte. Einfach nur Scripte auszuführen hilft mir nicht. Ich komme dann schneller zum Ergebnis aber nach 2 Tagen habe ich sogar vergessen was ich da eigentlich gemacht habe. Erst wenn ich alles Schritt für Schritt per Hand mache verstehe ich was ich da mache und behalte auch ca. 95% davon.
 
Wie wäre es, die Skripten schrittweise durchzugehen und daraus zu lernen? Das sorgt auch für Verständnis. Wenn Du dann daran etwas Verbesserungswürdiges findest, kannst Du es gleich hier erwähnen, davon profitieren wir dann alle. :D Das Rad neu zu erfinden und andere, die es bereits erfunden haben, um Hilfe dabei zu bitten, ist etwas unökonomisch. Trotzdem verstehe ich, was Du meinst. Sich selbst etwas zu erarbeiten, prägt sich gut ein.
 
Ich glaube ich muss das noch mal erklären. Ich muss gestehen dass ich am Anfang nicht wusste dass das fwmodscript auch ähnlich funktioniert. Ich wusste nur vom Firmware erstellen für die Nokia DBox dass man Sqashfs, Cramfs usw. entpacken und wieder packen kann. Dann wollte ich das auch mal bei der Fritzbox versuchen.

Zuerst habe ich also versucht es so zu machen, dann gab es Probleme und ich habe mir alle Scripte angeschaut die sich so im DS-Mod tummelten. Dabei ist mir dann aufgefallen dass nicht alles neu kompiliert wird sondern der Mod auch so arbeitet. Erst dann habe ich Fragen gestellt.

Soweit es geht versuche ich mir meine Dinge immer selber zu erarbeiten aber ab und zu komme ich nicht weiter und dann frage ich. (Oder wenn mich mal wieder die Panik überkommt und ich zeitweise überhaupt nichts mehr verstehe)

An den Scripten an sich gibt es eigentlich nichts auszusetzen, vielmehr war mein System defekt. Da fragt man sich nur wie man das unter Linux schafft aber das ist wohl ein anderes Problem.

Zur Zeit bin ich etwas ruhig weil ich schon einige Dinge für die Fritz!Media vorbereite. So wie es aussieht wird es kein Problem werden an eine Shell der Media zu kommen. Nur da meine Fritzbox noch nicht da ist will ich noch nichts sagen weil ich nicht will das andere ohne mein Testen Ihre Boxen schrotten.
 
Kostenlos!

Statistik des Forums

Themen
248,876
Beiträge
2,303,738
Mitglieder
378,545
Neuestes Mitglied
Patruc