Dodanie czytnika kart SD/MMC

UWAGA! Modyfikacje wykonujesz na własna odpowiedzialność!

WRT54GL

Modyfikacja hardware'u

Jeśli chcemy podłączyć kartę SD do WRT54GL wystarczy do tego celu gniazdo kart SD i 7 10 cm przewodów (najlepiej taśma), lutownica i trochę manualnych zdolności. Podłączenie wykonujemy według poniższego schematu.

Karta SD, numeracja złącza

  9  1  2  3  4  5  6  7  8
   ____________________________
 /   || || || || || || || ||   |
| ||                           |
|                              |
Pin kartyOpis pinu Podłączenie doOpis podłączenia
1. CS GPIO7 DMZ LED
2. DI GPIO2 White LED
3. VSS GND Serial port pin 9 (JP2)
4. VDD 3.3V Serial port pin 1 (JP2)
5. CLK GPIO3 Orange LED
6. VSS GND Serial port pin 10 (JP2)
7. DO GPIO4 Cisco Tester

3.3V oraz GND

cascade.dyndns.org_datagarbage_linksys-wrt54gl-v1.1-3.3v_gnd.jpg

GPIO2 oraz GPIO3

cascade.dyndns.org_datagarbage_linksys-wrt54gl-v1.1-gpio-2_3.jpg

GPIO 4 oraz GPIO 7

cascade.dyndns.org_datagarbage_linksys-wrt54gl-v1.1-gpio-4_7.jpg

Zmiany w oprogramowaniu

WhiteRussian 0.9

Do poprawnej pracy pamięci SD wymagany jest moduł mmc.o . Moduł kompilujemy samodzielnie lub pobieramy odpowiednią wersje binarną.

1. Pobieramy aktualna wersję modułu mmc ze strony forum OpenWrt.org

2. Moduł „mmc.o” kopiujemy do naszego rutera do katalogu /lib/modules/2.4.30/ lub 2.4.34.

3. Ładujemy moduł

 #> insmod mmc

4. Sprawdzamy prawidłowe załadowanie

  • Moduł z forum OpenWrt.org
#> dmesg | grep mmc         
[INFO] mmc_hardware_init: initializing GPIOs
[INFO] mmc_card_init: powering card on. sending 80 CLK
[INFO] mmc_card_init: resetting card (CMD0)
[INFO] mmc_card_init: doing initialization loop
[INFO] mmc_card_init: card inited successfully in 3 tries (0 seconds 196000 usec).
[INFO] mmc_init: MMC/SD Card ID:
[INFO] mmc_card_config: size = 60928, hardsectsize = 512, sectors = 121856
[WARN] mmc_init: hd_sizes=60928, hd[0].nr_sects=121856
[INFO] mmc_card_init: set_blocklen (CMD16) succeeded !
 mmca: p1
  • Moduł z respozytorium Kamikaze
mmc Hardware init
mmc Card init
mmc Card init *1*
mmc Card init *2*
Size = 60928, hardsectsize = 512, sectors = 121856
Partition check:
 mmca: p1

5. Dodajemy automatyczne ładowanie modułu

#> echo "mmc" > /etc/modules.d/20-mmc

6. Instalujemy potrzebne pakiety.

#> ipkg install e2fsprogs
#> ipkg install kmod-ext2

7. Ustawiamy maskę GPIO.

#> echo "0x9c" > /proc/diag/gpiomask

8. Formatujemy partycję.

#> mkfs.ext2 -j /dev/mmc/disc0/part1

To w przypadku dużych kart może trochę potrwać - kilka ładnych minut.

9. Ładujemy moduł z obsługą i dodajemy ładowanie automatyczne.

#> insmod ext2 
#> echo 'ext2' > /etc/modules.d/30-ext2

10. Montujemy partycję i dodajemy montowanie automatyczne w przyszłości.

#> mkdir -p /mnt/sd 
#> echo "/dev/mmc/disc0/part1 /mnt/sd ext2 defaults 0 0" > /etc/fstab
#> mount /dev/mmc/disc0/part1 /mnt/sd
#> echo "echo "0x9c" > /proc/diag/gpiomask" > /etc/init.d/S20externalmount
#> echo "mount /dev/mmc/disc0/part1 /mnt/sd" >> /etc/init.d/S20externalmount
#> chmod +x /etc/init.d/S20externalmount

(plik /etc/init.d/S20externalmount wymaga dodania #!/bin/sh na początku pliku)

11. Konfigurujemy ipkg, dodajemy wpis do /etc/ipkg.conf

#> echo "dest sd /mnt/sd" >> /etc/ipkg.conf

12. Modyfikujemy zmienne systemowe. Zastępujemy w /etc/profile

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

na

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/sd/bin:/mnt/sd/sbin:/mnt/sd/usr/bin:/mnt/sd/usr/sbin

dodajemy

export LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/sd/lib:/mnt/sd/usr/lib

13. Teraz możemy cieszyć się nowym dyskiem. Jak chcemy jakiś pakiet zainstalować we wskazanej lokalizacji to:

#> ipkg -d sd install pciutils

O tym jak instalować poprawnie pakiety na pamięci SD/MMC można przeczytać w dziale usbhdd. Należy przy tym pamiętać aby pozamieniać ścieżki prowadzące do naszej pamięci z /hdd na /mnt/sd.

Kamikaze 7.09

W Kamikaze (dla brcm-2.4) dostępny jest gotowy pakiet z przygotowanym modułem: kmod-broadcom-mmc. Dla routerów innych niż WRT54GL należy przygotować okablowane według poniższych danych:

Pin kartyOpis pinu Podłączenie do
1. CS GPIO7
2. DI GPIO5
3. VSS GND
4. VDD 3.3V
5. CLK GPIO3
6. VSS GND
7. DO GPIO4

WRT54GL nie posiada GPIO5, zamiast niego, używany jest GPIO2, powyższy opis GPIO stosuje się więc dla modeli np w WRT54G v3.1. http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/MMC?highlight=%28mmc%29.

W punkcie 6 moduł obsługi filesystemu nazywa się kmod-fs-ext2 i taki pakiet należy zainstalowac.

Ponadto załadowanie modułu z repozytorium kamikaze powoduje błąd i karty nie można ani zamontować ani zformatować, występuje to tylko w WRT54GL przy WRT54G moduł działa prawidłowo. Dlatego też, dla „Kamikaze 7.09 + xwrt” instalacja karty SD przebiega identycznie jak dla Whiterussian, z wprowadzeniem tylko drobnej zmiany w podpunkcie 10 wyżej opisanego tutoriala.

W punkcie 10 dokonujemy więc drobnej korekty.

 #> mkdir -p /mnt/sd 
 #> echo "/dev/mmc/disc0/part1 /mnt/sd ext2 defaults 0 0" > /etc/fstab
 #> mount /dev/mmc/disc0/part1 /mnt/sd
 #> echo "echo "0x9c" > /proc/diag/gpiomask" > /etc/init.d/custom-user-startup
 #> echo "mount /dev/mmc/disc0/part1 /mnt/sd" >> /etc/init.d/custom-user-startup
 #> chmod +x /etc/init.d/custom-user-startup

Testy

Dane mogą być nieprawidłowe, gdyż odnoszą sie do starej wersji modułu MMC.

Nie wiem jakie testy przeprowadzić, ale:

root@OpenWrt:/mmc/tmp# time `wget http://downloads.openwrt.org/whiterussian/rc6/bin/openwrt-wrt54g-squashfs.bin`
openwrt-wrt54g-squas 100% |*********************************************|  1385 KB    00:00 ETA 
time: cannot run Connecting
Command exited with non-zero status 127
real    0m 0.01s
user    0m 0.00s
sys     0m 0.01s
root@OpenWrt:/mmc/tmp# 

W tym czasie vmstat pokazuje:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0   1868    508   5448    0    0     0     0  105    9  0  1 99  0
 0  0      0   1868    508   5448    0    0     0     0  105    8  0  1 99  0
 3  0      0    436    508   6836    0    0     0    16  922  317  5 81 14  0
 0  0      0    480    508   6836    0    0     0     0  117   18  1  2 97  0
 0  0      0    480    508   6836    0    0     0     0  104    5  0  1 99  0

Wydaje mi się, że wszystkie operacje zapisu są buforowane. Przy pobieraniu/zapisie plików do 2M, zapis nasŧepuje z opóźnieniem. Powyżej tej wartości system „staje” i dokonuje zapisu. Przejrzę jeszcze kod.

Odczyt:

#> wget http://192.168.1.1/OpenWrt-SDK-Linux-i686-1.tar.bz2
--19:05:19--  http://192.168.1.1/OpenWrt-SDK-Linux-i686-1.tar.bz2
           => `OpenWrt-SDK-Linux-i686-1.tar.bz2.1'
Connecting to 192.168.1.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45,506,979 [application/octet-stream]

100%[==========================================>] 45,506,979   223.65K/s    ETA 00:00

19:08:56 (205.17 KB/s) - `OpenWrt-SDK-Linux-i686-1.tar.bz2.1' saved [45,506,979/45,506,979]

W tym czasie vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 3  0      0    492    580   6696    0    0    12    22  142   21  1 22 77  0
 3  0      0    436    588   6700    0    0   257     0  374   11  0 99  0  0
 3  0      0    424    588   6724    0    0   257     0  384   11  0 99  1  0
 3  0      0    396    584   6736    0    0   257     0  392   11  1 99  0  0
 3  0      0    388    584   6772    0    0   257     0  389   14  1 99  0  0
 4  0      0    352    592   6784    0    0   257     3  479   14  0 99  0  0
 3  0      0    328    596   6792    0    0   257     0  393   12  0 100  0  0
 3  0      0    316    604   6824    0    0   257     0  405   20  1 99  0  0

Testowałem na SD SanDisk 1G Nie wiem czy to wynika z osiągnięcia przez procesor granicy obsługi GPIO, czy też można ew. coś poprawić w sterowniku. Jak będę miał chwilę to przetestuję z wersją z svn dd-wrt.

WAP54G

Kompletny opis modyfikacji sd-mod dla access-pointa WAP54G z wykorzystaniem GPIO(3,4,6 oraz 7) Linksys wap54g - sd-mod, openwrt

La Fonera

Kompletny opis modyfikacji sd-mod dla La Fonera GPIO La fonera - SDMOD

przerobki/sd_mmc.txt · ostatnio zmienione: 2010/09/18 21:58 przez arteq
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting