How-To: OSD Modding eines WD TV Live (Teil 2)
Nachdem ich im ersten Teil meiner Serie zum (OSD) Modding des WD TV Live bereits darauf eingegangen bin, wie ich per SMB-Share von einer WDTVLX-gemoddeten Box die Daten des OSDs auf mein Windows-System bekomme, möchte ich heute kurz erklären, wie ich diese Daten aus dem Firmwareimage oder aus dem Image eines OSD-Mods erhalte. Dieses How-To beschreibt das Vorgehen unter Linux (in meinem Fall Ubuntu 10.4 Beta 1).
Auf das grundsätzliche Vorgehen bin ich in Teil 1 schon eingegangen: mein Ziel muss es sein, die Daten zu entpacken, zu ändern und abschließend neu zu verpacken. Grds. hängt es von der Art des zugrundeliegenden Images ab, wie die Daten entpackt werden müssen:
- Firmware-Images (CramFS): die ersten 32 Bytes (= MD5-Checksumme des eigentlichen CramFS-Images) müssen entfernt werden, dann kann der Rest (= das eigentliche CramFS-Image) entpackt werden
- OSD-Images (CramFS): können entpackt werden, ohne vorher manipuliert zu werden
- OSD-Images (Ext2/3): brauchen noch nicht mal entpackt werden, denn sie sind nach dem Mounten direkt beschreib-, also auch veränderbar
Da Ext2/3-Filesysteme direkt beschreibbar gemountet werden können, brauchen wir darauf nicht weiter einzugehen. CramFS-Filesysteme jedoch erfordern den Einsatz der CramFS Tools zum (Ent)Packen. Diese sind grds. Open Source, stehen aufgrund der Abhängigkeiten ohne große Anpassungen aber nur für Linux zur Verfügung. Kleine Anpassungen muss ich dennoch an den Quelldateien machen, um die WD TV Live Firmware fehlerfrei bearbeiten können. Um euch diesen Spaß zu ersparen findet ihr hier das Paket mit den geänderten Sourcen sowie den für Linux x86 kompilierten Binaries fix und fertig zur Nutzung: Download (Hinweis dazu: die Dateien cramfsck und mkcramfs müssen unter Linux noch einmal explizit per ‘chmod +x {Datei}’ ausführbar gemacht werden, da die Dateiberechtigungen im .zip-File nicht gespeichert sind)
Zur Vereinfachung der Erklärung habe ich alle benötigten Dateien (cramfsck zum Entpacken, mkcramfs zum Packen, lilibabe.osd.bin = OSD Mod von Lilibabe, wdtvlive.bin = Firmware-Image) in ein Verzeichnis gepackt:
user@ubuntu-fusionvm:/shared/howto2$ ls -al total 18621 drwxr-xr-x 1 501 dialout 272 2010-04-03 02:30 . drwx------ 1 501 dialout 306 2010-04-03 02:24 .. -rwxr-xr-x 1 501 dialout 63054 2010-02-27 22:48 cramfsck -rwxrwxrwx 1 501 dialout 7569408 2010-03-28 21:16 lilibabe.osd.bin -rwxr-xr-x 1 501 dialout 71929 2010-02-27 17:26 mkcramfs -rwxrwxrwx 1 501 dialout 30425136 2010-03-22 12:33 wdtvlive.bin
Grundsätzliches zum Entpacken: cramfsck (das Tool, das wir gleich nutzen werden) erstellt das Verzeichnis, in das entpackt wird, selbstständig. D.h. wir müssen vorher keine Verzeichnisse zum Entpacken anlegen.
Entpacken des OSD Mods von Lilibabe
Das Entpacken eines CramFS-Images ist ganz simpel. Der Aufruf von
user@ubuntu-fusionvm:/shared/howto2$ ./cramfsck -x lilibabe lilibabe.osd.bin
entpackt das lilibabe.osd.bin in ein Verzeichnis lilibabe. Anschließend kann ich in dem Verzeichnis alle OSD-Dateien finden.
Enpacken der WD TV Live Firmware
Beim Firmware-Image muss, wie bereits gesagt, vor dem eigentlichen Entpacken noch die MD5-Checksumme entfernt werden, denn ein simpler Entpack-Versuch scheitert mit der Meldung:
user@ubuntu-fusionvm:/shared/howto2$ ./cramfsck -x wdtvlive wdtvlive.bin ./cramfsck: superblock magic not found
Also schneiden wir die MD5-Checksumme (32 Bytes) vom Anfang ab:
user@ubuntu-fusionvm:/shared/howto2$ dd if=wdtvlive.bin of=wdtvlive_cramfs.bin ibs=32 skip=1 950784+1 records in 59424+1 records out 30425104 bytes (30 MB) copied, 4.60694 s, 6.6 MB/s
Was passiert hier? Das Kommando ‘dd’ verarbeitet Datenströme. In diesem Fall leitet es einen Eingabedatenstrom (if) in einen Ausgabedatenstrom (of) um und überspringt (skip) dabei einen Datenblock von 32 Bytes Größe (ibs). Die Kontrolle
user@ubuntu-fusionvm:/shared/howto2$ ls -al total 33484 ... -rwxrwxrwx 1 501 dialout 30425136 2010-03-22 12:33 wdtvlive.bin -rw-r--r-- 1 501 dialout 30425104 2010-04-03 02:38 wdtvlive_cramfs.bin
ergibt genau eine Größendifferenz von 32 Bytes zwischen Originaldatei (wdtvlive.bin) und dem korrigierten CramFS-Image daraus (wdtvlive_cramfs.bin). Dieses entpacken wir jetzt nach wdtvlive mittels
user@ubuntu-fusionvm:/shared/howto2$ ./cramfsck -x wdtvlive wdtvlive_cramfs.bin
und schon können wir uns im Verzeichnis wdtvlive umschauen, was in der Firmware enthalten ist und Dinge manipulieren.
Packen des Mods von Lilibabe
Sobald alle gewünschten Änderungen am Mod gemacht sind, müssen wir diesen wieder Packen. Der Aufruf dafür ist unspektakulär:
user@ubuntu-fusionvm:/shared/howto2$ ./mkcramfs lilibabe lilibabe.osd.neu.bin Directory data: 73716 bytes Everything: 7360 kilobytes Super block: 76 bytes CRC: 3a69b8af
Die Datei lilibabe.osd.neu.bin könnt ihr jetzt auf den USB-Stick kopieren und an den WD TV Live mit b-rad-Firmware hängen und schon sollte euer modifiziertes OSD erscheinen.
Heute habe ich kurz demonstriert, wie man die Firmware des WD TV Live sowie generell CramFS-Images unter Linux entpackt und wieder zusammenpackt. Viel Freude beim Ausprobieren!


Hallo,
kann man irgendwie auch lilibabe.osd.bin mit Windows entpacken und bearbeiten. Habe leider kein Linux? Gibt es eine Software dazu?