Tutorial: Hinzufügen eines SD-Kartenlesers an den Linksys WRT54G

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 17:53, 7 May 2006 (edit)
81.210.191.26 (Talk)
('''Wie man vorgeht''')
← Previous diff
Revision as of 06:29, 10 May 2006 (edit) (undo)
80.226.135.176 (Talk)

Next diff →
Line 12: Line 12:
===='''Einleitung'''==== ===='''Einleitung'''====
-Dieses Projekt ist für diejenigen gedacht die gern ihren WRT54G um etwas mehr Speicher ergänzen würden, zusätzlich zu den 4MB eingebauten Flash-RAM. Was wir tun werden ist, ein SD-Kartenleser+Dieses Projekt ist für diejenigen gedacht, die gern ihren WRT54G um etwas mehr Speicher ergänzen würden, zusätzlich zu den 4 MB eingebauten Flash-RAM. Was wir tun werden ist, einen SD-Kartenleser an einigen GPIO-Pins die sich im Inneren an der CPU befinden, verbinden. Mittels eines kleinen Treibers kann man ihn dann unter Linux nutzen. Das heisst wenn man seinen Kernel für den Linksys bespielsweise mit Unterstützung für MSDOS-Partitionen und VFAT kompiliert wird es möglich sein, den Speicher der jeweiligen SD-Karte als lese- und schreibbare Partition zu mounten. Die erreichbare Schreib-/Lesegeschwindigkeit liegt bei ~200 KB/s. <br><br>
-an einigen GPIO Pins die sich im Inneren an der CPU befinden, verbinden. Mittels eines kleinen Treibers kann man ihn dann unter Linux nutzen. Das heisst dass wenn man seinen Kernel für den Linksys bespielsweise mit Unterstützung für MSDOS Partitionen und VFAT kompiliert wird es möglich sein den Speicher der jeweiligen SD-Karte als lese- und schreibbare Partition zu mounten. Die erreichbare Schreib-/ Lesegeschwindigkeit liegt bei ~200 KB/s. <br><br>+
===='''Bilder'''==== ===='''Bilder'''====
Line 23: Line 22:
<blockquote> <blockquote>
* ein Lötkolben und etwas Lötzinn (und etwas Löterfahrung) * ein Lötkolben und etwas Lötzinn (und etwas Löterfahrung)
-* ein SD-Kartenleser, es sei denn man lötet die SD-Karte direkt an+* ein SD-Kartenleser, es sei denn, man lötet die SD-Karte direkt an
* 6 kleine Drahtstücke * 6 kleine Drahtstücke
-* ein Linksys WRT54G (Hardware Revision v2)+* ein Linksys WRT54G (Hardware-Revision v2)
</blockquote> </blockquote>
===='''Wie man vorgeht'''==== ===='''Wie man vorgeht'''====
<br> <br>
<ol> <ol>
-<li> Damit die SD-Karte funktioniert müssen 6 Drähte angelötet werden. Folgendes Bild sollte+<li> Damit die SD-Karte funktionieren kann, müssen 6 Drähte angelötet werden. Folgendes Bild sollte
-eine ?bersicht über die Pins geben die dafür in Frage kommen.+eine ?bersicht über die Pins geben, die dafür in Frage kommen.
</li> </li>
<center><br> <center><br>
Line 43: Line 42:
<li>DI - Data-In Leitung zur SD-Karte</li> <li>DI - Data-In Leitung zur SD-Karte</li>
<li>VSS - Masse 1</li> <li>VSS - Masse 1</li>
-<li>VDD - 3.3V Leitung für die Stromversorgung</li>+<li>VDD - 3,3-V-Leitung für die Stromversorgung</li>
<li>CLK - Taktleitung für die SD-Karte</li> <li>CLK - Taktleitung für die SD-Karte</li>
<li>VSS2 - Masse 2</li> <li>VSS2 - Masse 2</li>
-<li>DO - Data-Out Leitung von der SD-Karte</li>+<li>DO - Data-Out-Leitung von der SD-Karte</li>
</ol> </ol>
</div> </div>
Line 53: Line 52:
</table></center><br> </table></center><br>
-Die SD-Karte wird im SPI-Mode betrieben, d.h. das nur einer (Pin 7) der 4 Data-Out Pins+Die SD-Karte wird im SPI-Mode betrieben, d.&nbsp;h. das nur einer (Pin 7) der 4 Data-Out-Pins
-zur Datenübertragung genutzt wird. Spezifikationen um die Karte im nativen SD-Mode zu betreiben sind SEHR kostenaufwändig zu beschaffen und ausserdem zwingt die eingeschränkte Anzahl an GPIO Pins die im Router verfügbar sind, zur Nutzung eines seriellen Protokolls. Die zwei VSS-Pins können in diesem Fall einfach zusammengelötet werden (VSS2 kontroliert den Sleep-Mode der Karte). Das berücksichtigend betrachten wir weiter die einzelnen Lötstellen im Router.+zur Datenübertragung genutzt wird. Spezifikationen, um die Karte im nativen SD-Mode zu betreiben, sind SEHR kostenaufwändig zu beschaffen und ausserdem zwingt die eingeschränkte Anzahl an GPIO-Pins, die im Router verfügbar sind, zur Nutzung eines seriellen Protokolls. Die zwei VSS-Pins können in diesem Fall einfach zusammengelötet werden (VSS2 kontroliert den Sleep-Mode der Karte). Das berücksichtigend betrachten wir weiter die einzelnen Lötstellen im Router.
<blockquote> * [http://kiel.kool.dk/pics/solderpoint_1_annotated.jpg die ersten drei Lötstellen liegen bei RP3]<br> <blockquote> * [http://kiel.kool.dk/pics/solderpoint_1_annotated.jpg die ersten drei Lötstellen liegen bei RP3]<br>
* [http://kiel.kool.dk/pics/solderpoint_2_annotated.jpg die nächsten zwei Lötstellen sind bei JP1]<br> * [http://kiel.kool.dk/pics/solderpoint_2_annotated.jpg die nächsten zwei Lötstellen sind bei JP1]<br>
- * [http://kiel.kool.dk/pics/solderpoint_3_annotated.jpg die letzte Lötstelle ist an der DMZ LED] + * [http://kiel.kool.dk/pics/solderpoint_3_annotated.jpg die letzte Lötstelle ist an der DMZ-LED]
</blockquote> </blockquote>
-Besonders ist darauf zu achten die RP3 Pins nicht kurzzuschliessen, denn obwohl diese Lötstellen ausgesucht wurden weil die den meisten Platz um die betreffenden GPIO Leitungen beim Löten bieten ist es trotzdem ziemlich eng - also aufpassen! +Besonders ist darauf zu achten, die RP3-Pins nicht kurzzuschlie?en, denn obwohl diese Lötstellen ausgesucht wurden, weil sie den meisten Platz um die betreffenden GPIO-Leitungen beim Löten bieten ist es trotzdem ziemlich eng - also aufpassen!
-<li> Nachdem die Leitungen auf der Routerseite sauber angelötet sind, werden sie als nächstes mit der SD-Karte bzw. SD-Kartenleser verbunden. [http://kiel.kool.dk:27/pics/SDReaderMountedInCover.jpg Dieses Bild zeigt den SD-Kartenleser.] Daran kann man sie besonders einfach anlöten.</li>+<li> Nachdem die Leitungen auf der Routerseite sauber angelötet sind, werden sie als nächstes mit der SD-Karte bzw. mit dem SD-Kartenleser verbunden. [http://kiel.kool.dk:27/pics/SDReaderMountedInCover.jpg Dieses Bild zeigt den SD-Kartenleser.] Daran kann man sie besonders einfach anlöten.</li>
-<li> Befestige den SD-Kartenleser irgendwo innerhalb des Gehäuses. Wir haben uns für die rechte Gehäuse-Vorderseite entschieden und benutzten doppelseitiges Klebeband zum Befestigen und bohrten einen schmalen Schlitz ins Gehäuse um SD-Karten bei geschlossenem Gehäuse bequem von aussen ein- und ausstecken zu können. Auf den Bilder-Links am Anfang der Seite sieht man wie es aussieht, ebenso auf diesem [http://kiel.kool.dk:27/pics/SDReaderSlot.jpg Bild] vom Schlitz.</li>+<li> Befestige den SD-Kartenleser irgendwo innerhalb des Gehäuses. Wir haben uns für die rechte Gehäuse-Vorderseite entschieden und benutzten doppelseitiges Klebeband zum Befestigen und bohrten einen schmalen Schlitz ins Gehäuse um SD-Karten bei geschlossenem Gehäuse bequem von au?en ein- und ausstecken zu können. Auf den Bilder-Links am Anfang der Seite sieht man wie es aussieht, ebenso auf diesem [http://kiel.kool.dk:27/pics/SDReaderSlot.jpg Bild] vom Schlitz.</li>
<li> So weit so einfach. Jetzt folgt der Software-Teil.</li> <li> So weit so einfach. Jetzt folgt der Software-Teil.</li>
Line 72: Line 71:
===='''Software'''==== ===='''Software'''====
-Erstmal empfehlen wir einen Kernel zu kompilieren der MSDOS Partitionen und VFAT unterstützt. Die Unterstützung für Partitionen muss im Kernel eingebaut sein, die für VFAT kann auch als Modul in den Kernel eingebunden werden. Es wäre vielleicht nützlich folgende Dinge ins .config aufzunehmen:+Erstmal empfehlen wir einen Kernel zu kompilieren, der MSDOS-Partitionen und VFAT unterstützt. Die Unterstützung für Partitionen muss im Kernel eingebaut sein, die für VFAT kann auch als Modul in den Kernel eingebunden werden. Es wäre vielleicht nützlich folgende Dinge ins .config aufzunehmen:
<pre> <pre>
CONFIG_PARTITION_ADVANCED=y CONFIG_PARTITION_ADVANCED=y
Line 82: Line 81:
Jetzt besorgt man sich den [http://kiel.kool.dk:27/mmc.c Treiber] und das [http://kiel.kool.dk:27/Makefile Makefile]. Das Makefile muss angepasst werden um an die Stelle zu zeigen wo die OpenWRT Header liegen und wo sich der mipsel Kompiler befindet. Wenn das gemacht wurde, einfach nur noch 'make' eintippen (die Warnungen können ignoriert werden). Jetzt besorgt man sich den [http://kiel.kool.dk:27/mmc.c Treiber] und das [http://kiel.kool.dk:27/Makefile Makefile]. Das Makefile muss angepasst werden um an die Stelle zu zeigen wo die OpenWRT Header liegen und wo sich der mipsel Kompiler befindet. Wenn das gemacht wurde, einfach nur noch 'make' eintippen (die Warnungen können ignoriert werden).
-Das Modul ist nun einsatzbereit. Vergewisser dich dass im Kartenleser eine SD-Karte steckt und lade dann das Modul. Prüfe mit 'dmesg' dass alles soweit in Ordnung ist. Wenn das der Fall ist solltest du hoffenlich einige neue Laufwerke in /dev/mmc/... finden. Folgendes ist ein kleiner Auszug aus der "Unterhaltung" mit dem Router:+Das Modul ist nun einsatzbereit. Vergewisser dich dass im Kartenleser eine SD-Karte steckt und lade dann das Modul. Prüfe mit 'dmesg' dass alles soweit in Ordnung ist. Wenn das der Fall ist solltest du hoffenlich einige neue Laufwerke in /dev/mmc/ ... finden. Folgendes ist ein kleiner Auszug aus der "Unterhaltung" mit dem Router:
<pre> <pre>
root@radio:~# ls -al /lib/modules/2.4.20/ root@radio:~# ls -al /lib/modules/2.4.20/
Line 127: Line 126:
===='''Etwas Hilfe beim Kernel kompilieren'''==== ===='''Etwas Hilfe beim Kernel kompilieren'''====
-Der einfachste Weg um einen lauffähigen Kernel mit der gewünschten Dateisystem-Unterstützung zu erstellen ist vermutlich sich OpenWRT runterzuladen und das Flash-Image erstellen. Wenn man sich damit auskennt ist es ziemlich einfach die Einstellungen für den eigenen Kernel anzupassen. Einfach ins buildroot/build_mipsel/linux Verzeichnis wechseln und 'make menuconfig' eintippen. Dann nach File Systems -> Partition Types wechseln und 'Advanced partition selection' und 'PC BIOS (MSDOS partition tables) support' anklicken. In 'File systems' sollte ebenfalls 'DOS FAT fs support' aktiviert werden, optional auch noch 'VFAT (Windows 95) fs support'. Dannach die ?nderungen speichern und das Menü verlassen. Mit 'make dep zImage' den Kernel rebuilden. Zum Schluss nur noch das OpenWRT Image rebuilden und der neue Kernel wird automatisch integriert. +Der einfachste Weg, um einen lauffähigen Kernel mit der gewünschten Dateisystem-Unterstützung zu erstellen, ist vermutlich sich OpenWRT runterzuladen und das Flash-Image erstellen. Wenn man sich damit auskennt, ist es ziemlich einfach die Einstellungen für den eigenen Kernel anzupassen. Einfach ins buildroot/build_mipsel/linux Verzeichnis wechseln und 'make menuconfig' eintippen. Dann nach File Systems -> Partition Types wechseln und 'Advanced partition selection' und 'PC BIOS (MSDOS partition tables) support' anklicken. In 'File systems' sollte ebenfalls 'DOS FAT fs support' aktiviert werden, optional auch noch 'VFAT (Windows 95) fs support'. Dannach die ?nderungen speichern und das Menü verlassen. Mit 'make dep zImage' den Kernel rebuilden. Zum Schluss nur noch das OpenWRT-Image rebuilden und der neue Kernel wird automatisch integriert.
===='''GPIO Pins, eh?'''==== ===='''GPIO Pins, eh?'''====
-Die integrierte Broadcom BCM4712 CPU stellt eine Reihe von General Purpose Input/Output Pins (oder GPIO Pins) zur verfügung die für verschiedene Zwecke im Router genutzt werden. Wir konnten bislang 8 dieser Pins identifizieren, die die folgedenden zugewiesenen Funktionen haben: +Die integrierte Broadcom BCM4712 CPU stellt eine Reihe von General-Purpose-Input/Output-Pins (oder GPIO-Pins) zur Verfügung die für verschiedene Zwecke im Router genutzt werden. Wir konnten bislang 8 dieser Pins identifizieren, die die folgenden zugewiesenen Funktionen haben:
<center> <center>
<table border="1"> <table border="1">
Line 147: Line 146:
</center> </center>
<br> <br>
-Die Pins die in diesem Projekt genutzt werden sind ADM_EESK, ADM_EEDO, ADM_EEDI und die DMZ LED. Die ADM_* Pins stellen normalerweise ein Interface dar um den ADMTek Switch Chip zu konfigurieren. Da das aber nur während des Boot-Vorgangs passiert können wir die Pins dannach für unsere Zwecke nutzen (die entsprechenden Pins auf dem Switch-Chip sind danach im tri-state also hochohmig). Die Bezeichnung der anderen Pins sollte selbsterklärend sein. Die Richtung der Pins kann individuell programmiert werden (selbst wenn das nicht für jeden einzelnen Pin Sinn macht).+Die Pins, die in diesem Projekt genutzt werden, sind ADM_EESK, ADM_EEDO, ADM_EEDI und die DMZ-LED. Die ADM_* Pins stellen normalerweise ein Interface dar, um den ADMTek Switch-Chip zu konfigurieren. Da das aber nur während des Boot-Vorgangs passiert, können wir die Pins dannach für unsere Zwecke nutzen (die entsprechenden Pins auf dem Switch-Chip sind danach im tri-state also hochohmig). Die Bezeichnung der anderen Pins sollte selbsterklärend sein. Die Richtung der Pins kann individuell programmiert werden (selbst wenn das nicht für jeden einzelnen Pin Sinn macht).

Revision as of 06:29, 10 May 2006