decocode decocode deco    

Rockbox auf einem iPod Video installieren #

(Version 3.13 unter Linux Mint Debian Edition UP 8) symbol: image

Ich persönlich bin kein großer Freund von Mediaplayern, bei denen ich mir die Titel, die ich hören will, aus der internen Datenbank auswählen muss. Ich will mir old-school-style meine Musik in eine Dateiordnerstruktur packen, die ich nach meinen eigenen Kriterien gestalten kann, und der Mediaplayer soll mir diese Dateistruktur dann zur Auswahl anbieten.
Außerdem hasse ich es, wenn mein Mediaplayer sämtliche Audiodateien auf seiner Festplatte umbenennt, so dass ich den Player nicht als portablen Datenträger verwenden kann und immer von spezieller Software à la iTunes abhängig bin, mit der ich die Titel auf dem Player verwalten muss.

Wenn sich der Mediaplayer meiner Wahl so verhält, muss eine neue Firmware her, die mir die oben genannten Freiheiten ermöglicht. Eine solche Firmware – also das Betriebssystem des Players – ist Rockbox. Rockbox ist für eine Vielzahl von Playern verfügbar, aber da ich einen Player mit fettem Speicher gesucht habe, kam eigentlich nur der iPod infrage, da ist wenigstens die Hardware vernünftig, und Rockbox wird voll unterstützt. Daher habe ich mir bei eBay für 100 € einen gebrauchten iPod Video (Generation 5.5) ersteigert und darauf Rockbox installiert. Wie das geht, wird hier beschrieben.

Rockbox Utility verwenden #

(Version 1.4.0 unter Linux Mint Debian Edition UP 8) symbol: image

Über das Programm ›Rockbox Utility‹ wird die Installation von Rockbox auf den iPod vorgenommen. Dazu lädt man sich zunächst die passende tar.bz2-Datei von Rockbox.org herunter und entpackt sie an eine beliebige Stelle auf dem eigenen Rechner. Die enthaltene Datei ist schon das eigentliche Programm, das nicht mehr extra installiert, sondern nur noch ausgeführt werden muss.

wget http://download.rockbox.org/rbutil/linux/RockboxUtility-v1.4.0.tar.bz2
tar -xjf RockboxUtility-v*.tar.bz2

Wurde das tar-Archiv in den Home-Ordner entpackt, so genügt über das Terminal folgender Befehl, um das Programm zu starten:

sudo RockboxUtility-v1.4.0/RockboxUtility

Natürlich muss der iPod an den Rechner angeschlossen sein, und Linux muss den Player im Dateisystem gemountet haben. Das Programm sollte das iPod-Modell automatisch erkennen; sollte dies fehlschlagen, kann man den Player auch manuell einstellen.

Auf der Benutzeroberfläche wählt man nun einfach Schnellstart ► Komplette Installation und wartet, bis die Installation von Rockbox auf den iPod abgeschlossen ist. Über den Dateimanager kann man jetzt im Wurzelverzeichnis des iPods einen Order anlegen, in den man alle eigenen Audiodateien kopiert. Sämtliche anderen nicht versteckten Verzeichnisse, die sich im Wurzelverzeichnis befinden, können gelöscht werden, da sie für die originale Apple-Firmware vorgesehen waren. Nun kann man den iPod aushängen und die USB-Verbindung trennen.

Wird der iPod jetzt neu gestartet, wird Rockbox geladen. Über Menu ► General Settings ► Language kann man nun Deutsch als Sprache der Benutzeroberfläche einstellen. Über Menü ► Dateien gelangt man zu dem Ordner mit den eigenen Audiodateien. Zum Abspielen einfach eine Datei auswählen.

Wie man die originale Firmware wieder installiert, wird im UbuntuUsers-Wiki beschrieben. Vorher kann man den Ordner iPod/.rockbox löschen.

Eigene Themes installieren #

Neben den Themes, die bei Rockbox.org heruntergeladen werden können, ist es auch möglich, eigene Themes zu erstellen und zu installieren.

Atarax-Theme v2.1 herunterladen (154,9 kB)

Im Dateimanager muss man nun die Anzeige versteckter Dateien aktivieren (Strg + H) um Zugriff auf den Ordner iPod/.rockbox zu erhalten. Die Dateien des zip-Archivs werden nun in die entsprechenden Ordner unterhalb von iPod/.rockbox kopiert. Anschließend den iPod aushängen und vom Rechner trennen. Nach einem Neustart des iPods kann man das neue Thema über Menü ► Einstellungen ► Themeneinstellungen ► Zeige Themen-Dateien auswählen.

Weitere Informationen: Rockbox.org

Screenshot anfertigen #

Um einen Screenshot des iPod-Displays anzufertigen, muss man zunächst im Rockbox-Menü System ► Entwicklerbereich ► Screendump wählen. Anschließend navigiert man zu der Ansicht, von der man einen Screenshot erstellen will und schließt den iPod per USB-Datenkabel an einen Rechner an. Der iPod wird nun nicht im Dateisystem des Rechners gemountet; statt dessen wird in diesem Moment ein aktueller Screenshot in das Wurzelverzeichnis des iPods geschrieben. Möchte man weitere Screenshots anfertigen, trennt man die USB-Verbindung kurzzeitig und schließt den iPod wieder an, wenn im Display die gewünschte Anzeige erscheint.

Um auf die Screenshots zuzugreifen, trennt man die USB-Verbindung und wählt im Menü erneut System ► Entwicklerbereich ► Screendump. Wird der iPod jetzt wieder an den Rechner angeschlossen, dann findet man die Screenshot-Dateien über den Dateimanager.

Weitere Informationen: Rockbox.org

Bootsplash-Grafik ändern #

Das Skript funktioniert (vermutlich) nur mit dem iPod Video (5G)!

Bei Start von Rockbox erscheint für einen kurzen Moment der so genannte Bootsplash-Bildschirm mit dem Rockbox-Logo. Wem dieses Logo nicht gefällt, kann diese Grafik auch durch eine eigene ersetzen. Unter Windows kann man dazu das Programm ›Rockbox Logo Swapper‹ verwenden, das bei Rockbox.org heruntergeladen werden kann.

Unter Linux hilft das folgende Python-Skript (ohne jede Gewähr). Dazu kopiert man das Skript, die Originalgrafik, die neue Grafik (24-Bit BMP 320×98 Pixel) sowie die Datei rockbox.ipod (auf dem iPod zu finden unter /.rockbox/rockbox.ipod) in einen eigenen Ordner, wechselt per Terminal in diesen Ordner und führt das Skript aus. Heißt der Ordner beispielsweise ~/rockboxlogo/ und das Skript logoswapper.py, so lauten die Befehle folgendermaßen:

cd ~/rockboxlogo/
python logoswapper.py

Die Grafiken müssen als oldsplash.bmp sowie newsplash.bmp benannt sein, oder man muss im Skript die Variablen oldimage und newimage entsprechend anpassen.

Die vom Skript aktualisierte Datei rockbox.ipod kopiert man dann zurück auf den iPod. Die Datei rockbox.ipod.bak dient als Sicherungskopie der ursprünglichen Datei.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/python
#-*- coding: utf-8 -*-

"""
    ╭─┬╮╭─┬─┬─┬┬╮  ╭┬─┬─┬─┬─┬─╮╭┬─╮
    ├╴│╰┼╴│╭┼╴├ ┤ ╭╯│││╶┤ │╶┤ ├╯│││
    │││╶┤││││││││ │││╶┤ │││ │││││╶┤
    ╰─┴─┴─┴╯╰─┴┴╯ ╰─┴─┴─┴─┴─┴─┴─┴─╯

  - Python 2.7
  - This script replaces the bootsplash image in rockbox.ipod files
  - Version 1.2 (C) by Uriel Löwenherz (atarax); http://www.decocode.de/kontakt; February 2015; released into public domain
  - Tested only for iPod Video 5.5G on Linux with Rockbox 3.7.1, 3.9 and 3.13
  - Use a 24-bit BMP image @ 320 x 98 pixels (R8 G8 B8)
  - Put this script along with the rockbox.ipod file and the old and new bootsplash
    image into the same folder; cd to this folder and execute the script.
  - A backup file of rockbox.ipod is created, so you can revert to the original state
  - rockbox.ipod can be found on the iPod at /.rockbox/rockbox.ipod

"""

oldimage   = "oldsplash.bmp"
newimage   = "newsplash.bmp"
ipodfile   = "rockbox.ipod"
backupfile = "rockbox.ipod.bak"

import shutil, os

def read_bmp_file(filename):  # http://svn.rockbox.org/viewvc.cgi/trunk/tools/bmp2rb.c?view=log
    
    length = os.stat(filename)[6]
    depth = 24
    width = 320
    height = (length - 54) / (width * 3)  # seems like firmware cannot handle images of different height
    height = 98
    padded_width = width * depth / 8
    size = padded_width * height
    data = ""
    
    fd = open(filename, "rb")
    fd.seek(54)  # 14 bytes BITMAPFILEHEADER + 40 bytes BITMAPINFOHEADER
    bmp = fd.read(size)
    fd.close()
    
    for row in range(0, height):  # 16-bit packed and byte-swapped RGB (5-6-5)
        for col in range(0, width):
            i = (height - 1 - row) * padded_width + 3 * col
            rgb = (((ord(bmp[i + 2]) >> 3) << 11) |
                   ((ord(bmp[i + 1]) >> 2) << 5) |
                   ((ord(bmp[i]) >> 3)))
            value = ((rgb & 0xff00) >> 8) | ((rgb & 0x00ff) << 8)
            binary = bin(value)[2:]
            bytes = "0000000000000000"[:16 - len(binary)] + binary
            data += chr(int(bytes[0:8], 2)) + chr(int(bytes[8:16], 2))
            
    return data   

# make copy of ipod file
shutil.copy2(ipodfile, backupfile)

# read and convert bmp images
oldbootsplash = read_bmp_file(oldimage)
newbootsplash = read_bmp_file(newimage)

# find image data offset
fd = open(ipodfile, "r+")
ipod = fd.read()
offset = ipod.find(oldbootsplash)
if offset != -1:
    print "Image found in rockbox.ipod at " + str(offset)

    # replace current boot splash image with new one in rockbox.ipod
    fd.seek(0)
    fd.write(ipod.replace(oldbootsplash, newbootsplash))
    fd.close()

    fd = open(ipodfile, "r+")

    # get ipod_sectorbuf
    entryOffset = 8  # first byte after header
    fd.seek(entryOffset)
    ipod_sectorbuf = fd.read()

    # update checksum
    chksum = 5  # ipod->modelnum http://svn.rockbox.org/viewvc.cgi/trunk/rbutil/ipodpatcher/ipodpatcher.c?view=log
    length = os.stat(ipodfile)[6] - entryOffset
    for i in range(0, length):
        chksum += ord(ipod_sectorbuf[i])
    hexsum = hex(chksum)[2:]
    hexsum = "00000000"[:8 - len(hexsum)] + hexsum
    print "Checksum dec: " + str(chksum)
    print "Checksum hex: " + str(hexsum)
    checksum = chr(int(hexsum[0:2], 16)) + chr(int(hexsum[2:4], 16)) + chr(int(hexsum[4:6], 16)) + chr(int(hexsum[6:8], 16))
    fd.seek(0)
    fd.write(checksum)
    
else:
    print "Error: Image not found in rockbox.ipod"

fd.close()

Wird der iPod nun neu gestartet, sollte die neue Splashgrafik erscheinen. Als neue Splashgrafik kann man z. B. diese verwenden:

newsplash.bmp herunterladen (94,1 kB)

Die Originalgrafik ist diese (zur Bildquelle):

oldsplash.bmp herunterladen (94,1 kB)