RAM-Aufrüstung

From Fritz!Box
Jump to: navigation, search

AVM Wiki >> Zubehör >> RAM-Aufrüstung @ whmf   -   IRC-Chat   -   hu nl it English
Community Modelle Zubehör Environment Konfiguration Shell-Befehle Software Freetz Lexikon Tipps+Tricks Bilder

Telefone+Anlagen WLAN-Zubehör ISDN+DSL-Karten Externe Modems Sonstiges Zubehör Bauanleitungen Todo

Contents

Eumex 300 ip ram mod.jpg
32MB Baustein in einer Eumex 300 IP

Achtung!
Achtung: Diese Modifikation birgt ein hohes Risiko eine Box zu einem Briefbeschwerer zu machen. So kann z.B. beim Ablöten des RAM ICs eine Leiterbahn von der Platine reißen, die Box ist dann unwiederbringlich defekt. Ferner besteht das Risiko, dass man den ADAM2 Urlader zerstört, hier hilft dann nur noch EJTAG. Wer also nicht genügend Erfahrung im Umgang mit Lötkolben und Linux-Werkzeugen hat, sollte davon absehen oder einen Experten konsultieren!

In der Folgenden Anleitung wird anhand der Eumex 300 IP erläutert, wie man einen RAM Upgrade durchführt. Die Anleitung beschreibt den Austausch des alten 16MB Moduls gegen ein 32MB Modul. Trotz der konkreten Beispiele sollte diese Anleitung jedoch auf die meisten FRITZ!Box-Modelle übertragbar sein. Idee und Realisierung: LittleIdiot.

Motivation

Insbesondere bei Modellen mit sehr kleinem Flash-EEPROM und ohne USB-Host Anschluss ist ein RAM Upgrade ggf. von Vorteil - nämlich in Fällen, in denen zur Traumkonfiguration vielleicht gerade nur noch ein paar Kilobytchen fehlen würden. Wenn die Box mehr RAM hat, kann man die SquashFS Blocksize vergrößern und somit das rootfs effizienter Komprimieren. Durch das Extra an RAM ist es dann auch bei 1M Blockgröße egal, das der Kernel das gesamte rootfs im RAM entpackt. Ferner wäre es auch möglich den externen Teil über's Netz zu laden und dann in eine RAM-Disk zu werfen. Ein großer Vorteil der Methode ist, das man nicht mit JTAG hantieren muss - natürlich nur sofern man alles richtig macht ;-).

Den RAM zu upgraden ist bei manchen Boxen oder Anwendungsszenarieren sicherlich von Vorteil, aber insbesondere für unerfahrene Löter ein schweres Unterfangen. Diese Anleitung soll helfen, Fallstricke zu vermeiden und den mutigen Bastler sicher durch diesen kleinen Spießroutenlauf zu begleiten.

1) RAM Chip identifizieren

Zunächst einmal gibt es 3 wichtige Einteilungen für DRAM Bausteine: Banks, Rows und Columns. Hersteller wie Micron geben sowas z.B. an mit "16 Meg x 4 x 4 Banks". Dabei muss man zunächst einmal den Chip identifizieren, den man aktuell auf der Platine hat. Man findet diese Angabe auch in der Hardware Sektion im Artikel zum jeweiligen FRITZ!Box-Modell. Je nach Charge variieren die Hersteller der Speicherchips, die relevanten technischen Eigenschaften jedoch nicht.

Beispiel (Eumex 300 IP): Die Box hat einen IC mit der Aufschrift SAMSUNG, K4S281632I-UC75. Wenn man nach dem IC sucht, stößt man auf dieses Datenblatt. Offenbar ist der RAM IC für eine Taktrate von 133MHz bestimmt und ist in "8Mbx16", d.h. 8000000 Rows mit je 16 Columns organisiert.

Damit man einen anderen RAM Baustein verwenden kann, muss dieser natürlich auf die gleiche Weise funktionieren wie der alte und pin-kompatibel sein - d.h. alle Pinne müssen die gleiche Funktion haben. Insbesondere wenn man vor hat den RAM Baustein durch ein größeres Exemplar und/oder anderen Baustein zu ersetzen, muss man darauf achten, das die folgenden Merkmale übereinstimmen:

  • Anzahl der Banks
  • Anzahl der Columns
  • Anzahl der Rows (>= Anzahl der Rows des alten IC)
  • Taktrate
  • Pin-kompatibelität

2) Adressleitungen identifizieren

Adressleitungen / Kontaktierungen des RAMs einer 7150

Wenn man einen größeren Baustein einbauen möchte, muss man nun herausfinden ob die Platine elektrisch dafür ausgelegt ist. Dazu ist wieder einmal ein Studium der Datenblätter nötig: Ein größerer Baustein hat mehr Adressleitungen als der alte IC. Man muss jetzt herausfinden, ob diese Adressleitungen auf der Platine überhaupt mit dem SoC verbunden sind, denn nur dann hat ein Upgrade Chance auf Erfolg. Falls sich herausstellt, das dieser Pin nicht verbunden ist, braucht man von hier an garnicht weiter zu machen.

Bei einem RAM Baustein, der (wie bei der Eumex 300 IP) eine Organisation von 4 Banks, 16 Columns und N Rows haben muss, benötigen wir 13 Adressleitungen für 64MB, bzw. 12 Adressleitungen für 32MB. In unserem Beispiel benötigt das neue Ram Modul im Gegensatz zum alten also die zusätzliche Adressleitung A11 (an Pin 35). Bei genauem Hinsehen auf die Platine, erkennen wir, das diese Leitung (zumindest mit irgendwas) verbunden ist. Hinweis: Manche Leitungen sind auch nach Innen geführt - d.h. es ist nicht immer zu erkennen, ob diese mit irgendwas verbunden sind oder nicht. Grundsätzlich aber gilt: Wenn sich jemand die Mühe gemacht hat, die Leitung im Platinenlayout zu routen, ist diese auch höchstwahrscheinlich mit dem SoC verbunden.

Beispiel (FRITZ!Fon 7150): Bei der 7150 ist deutlich zu erkennen, das PIN 36 (bzw. A12) mit einer Durchkontaktierung verbunden ist (siehe Bild rechts) - es wären hier also theoretisch 64MB einbaubar.

3) Chip tauschen & Probeboot

Nun tauscht man den Chip auf der Platine aus, hilfreiche Tipps dazu findet man auch in der Anleitung zur Flash Aufrüstung. Nach dem Austausch sollte die Box wieder normal booten, sie glaubt jedoch immernoch sie hätte die alte Speichergröße. Wenn die Box nicht korrekt durchbooted oder ganz komische Dinge tut, deutet das darauf hin, dass etwas nicht funktioniert hat - ein Grund nochmal zu prüfen, ob alle Leitungen sauber angelötet sind.

Sind alle Leitungen korrekt verlötet, deutet das Verhalten darauf hin, dass an der zusätzlichen Adressleitung ein undefinierter Pegel anliegt. Abhilfe kann man schaffen, indem man den/die zusätzlichen Adresspin für die Zeit des Tests mit einem Widerstand (hochohmig, d.h. >= 10k !) auf einen definierten Pegel (GND) legt.

4) Urlader verändern

Urlader für verschiedene Boxen

Wenn alle elektrotechnischen Hürden überwunden sind, kommt der zweite kritische Punkt: Der ADAM2 Bootloader muss modifiziert werden. Dazu muss man zunächst ein Image des aktuellen Bootloaders erzeugen. ADAM2 liegt immer auf der durch die Urlader-Environment-Variable mtd2 dimensionierten Partition. Bei älteren Bootloadern kann man noch mit TinyFTP diese mtd2 Partition herunterladen, wie in diesem Beispiel erklärt. Leider wurde die Unterstützung des FTP get Befehls in neueren Bootloadern entfernt, hier benötigt man dann Shell-Zugang. Innerhalb des Linux weichen die Partitionsnummern jedoch vom Urlader-Environment ab. In welcher Linux-Partition der Bootloader liegt, erfährt man zuverlässig mit diesem Befehl:

$ cat /proc/mtd
...
mtd2: 00020000 00020000 "urlader"

Bei Modellen mit neuerer Firmware stimmt die Partitions-Nummer zufällig überein. Bei älterer Firmware dagegen weichen Partitionsname und -nummer ab:

$ cat /proc/mtd
...
mtd3: 00010000 00010000 "bootloader"

Im Folgenden sei X die ermittelte Partitionsnummer in der sich der Bootloader befindet. Ein Image dieser Partition erzeugt man mit dd, als Quelle wählt man die mtdblock Device der ermittelten Nummer und als Ziel das zu erzeugende Image:

$ cd /var/tmp
$ dd if=/dev/mtdblockX of=mtdX.bin
256+0 records in
256+0 records out

Das Image mtdX.bin kopiert man nun auf den eigenen Rechner. Bei Modellen ohne USB-Host Anschluss ist dies nicht einfach, und gerade bei Modellen mit knapp dimensioniertem Speicher fehlen meist auch jegliche Upload-Befehle. Wer bereits Freetz auf seiner Box betreibt kann sich z.B. leicht mit scp helfen. Alternativ kann man auch einen httpd in /var/tmp starten und dann das Image via HTTP runter laden.

Eine Anleitung zur Modifikation des Bootloaders kann nicht versionsübergreifend gegeben werden, je Version muss ggf. an unterschiedlichen Adressen modifiziert werden. Daher ist es erst einmal wichtig die genaue Version zu ermitteln:

$ grep bootloaderVersion /proc/sys/urlader/environment
bootloaderVersion 1.203

Die folgenden Angaben beziehen sich auf Version 1.203 des Eumex 300 IP Urladers:

Nun öffnet man das Image mit einem Hexeditor, und springt zur Adresse 0xB07. Dort sollte die RAM größe der Box stehen, bei der Eumex 300 IP mit 16MB RAM hat diese den Wert 0x01. Im Zweifelsfalle kann man sich bei einem Bootloader eines möglichst ähnlichen Modells mit mehr Speicher inspirieren, jedoch müssen die Angaben auch bei gleicher bootloaderVersion nicht notwendigerweise übertragbar sein. Vergleicht man die beiden Bootloader nun z.B. mit vbindiff (siehe screenshot rechts) sieht man gleich ob sich nur wenige Werte unterscheiden, diese wenigen Differenzen verraten dann die zu modifizierende Stelle.

Ermitteln der Position für andere Versionen und Boxen:

Auf anderen Boxen, insbesondere anderen Versionen benötigt man 2 möglichst gleiche Bootloader Images für 2 Boxen, die sich nach Möglichkeit nur in der RAM Größe unterscheiden. Wichtig dabei ist es, das die Versionsnummern der beiden Bootloader Images jedoch gleich sind. Ziel ist es, die Position im Binary Blob zu identifizieren, in der die Größe des RAMs angegeben ist. Wenn man sich einmal die Zeile mit der Angabe der Speichergröße (memsize) aus der Datei /proc/sys/urlader/environment ansieht, erkennt man, das die Speichergröße auf's Byte genau angegeben wird (z.B. 0x01000000, entspricht 16777216 Byte) - wir suchen also eine 32 Bit Sequenz, die entsprechend viele Nullen enthält. Ferner wissen wir, das Seriennummer, MAC Adresse, etc. in der "Nähe" der RAM Größe gespeichert werden - wir wissen also auch in etwa wo wir die Unterschiede suchen müssen (s. Screenshot). Mit diesen Informationen kann man nun mit Bindiff die beiden Images vergleichen und eine Position (oder wenn man Pech hat mehrere Positionen) identifizieren und entsprechend verändern.

Nun ändert man den besagten Wert entsprechend dem neuen RAM-Baustein, in diesem Beispiel 0x02 für 32MB RAM, speichert das modifizierte Image ab und transferiert es zurück zur Box. Nun kommt der eigentliche heiße Moment den Bootloader auf der oben ermittelten Partition zu überschreiben:

cat mtdX_mod.bin > /dev/mtdblockX

Nach einem Neustart sieht man dann ob die Box noch lebt. Ging etwas schief hilft ab hier nur noch EJTAG.

Upgrade Matrix

Modell Max. RAM Kompatible ICs Getestet durch Kommentar
Eumex 300 IP 32MB 32MB: MT48LC16M16A2 LittleIdiot Der RAM IC entstammt meiner Briefbeschwerer-7170 und hat beim Ausbau schon sehr leiden müssen, denn ich hatte keine reflow station zur Hand und habe einfach dicke Lötzinn-würste über die Platine geschoben um die Beinchen abzulöten. Diese Käferchen sind robuster als ich dachte.

Bitte diese Tabelle mit Erfahrungswerten erfolgreicher Umbauten erweitern.

Galerie

Bitte die Galerie nach Belieben mit eigenen Werken erweitern, auch per E-Mail. Siehe auch die Inspiration zu Bildern.

Siehe auch