Ampliación memoria

Se puede usar una minisd, y soldando el soporte de la minisd a la board, quedando así el soporte como socket para poner o remover la minisd. Los pines están descritos en el siguiente link http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/MMC. Es importante que hay que tener cuidado con qué versión de Linksys se está usando, las tarjetas de las versiones wrt54g, wrt54gl y wrt54gs son diferentes.

La siguiente información fue recopilada de las referencias dadas en la aparte de abajo los pasos generales para habilitar la memoria son:

  1. Abrir el WRT54GL
  2. Soldar puertos GPIO a la SD
  3. Compilar Modulo mmc o obtener el precompilado
  4. Levantar el modulo
  5. Montar partición

Abrir el WRT54GL

Se debe primero desatornillar las antenas para luego abrir el router. Para abrir el wrt simplemente se debe tomar por debajo y empujar hacia afuera la parte morada esto destapará la caja y luego se quita la parte superior negra que pertenece a la carcaza

wrt54GL_oeffnen.jpg wrt54gl_ganzOffen.jpg

Tomado desde http://www.hendlsofen.de/WRT54GL/eng/WRT54GL_SDMod.html

Soldar puertos GPIO a la SD

Se debe soldar como se indica a continuación desde el router a la sd, una buena idea es soldar un convertidor de SD ya sea para micro o mini SD con esto nos permitirá cambiar la sd de su capacidad, o tambien se puede comprar un socket para sd esta ultima opción es la mas recomendable.

GPIO

Esta tabla es brindada para mostrar como se encuentran configurados los GPIO's en el Linksys, puede revisar http://en.wikipedia.org/wiki/GPIO

Pin

Direction

Name

GPIO 0

Output

WLAN LED

GPIO 1

Output

POWER LED

GPIO 2

Output

ADM_EECS

GPIO 3

Output

ADM_EESK

GPIO 4

Input

ADM_EEDO

GPIO 5

Output

ADM_EEDI

GPIO 6

Input

Reset button

GPIO 7

Output

DMZ LED

Información SD

Se debe tener claridad como se encuentra referenciada la Memoria para ello revisar la siguiente información

Description

GPIO

sdcard-small.jpg

sdkarte_anschluesse.jpg

Pin 1 - CS, Chip select

GPIO 7

Pin 2 - DI, Data in

GPIO2

Pin 3 - VSS, Ground

GND

Pin 4 - VDD, 3.3v

3.3v

Pin 5 - CLK, Clock

GPIO3

Pin 6 - VSS2, Ground

GND

Pin 7 - DO, Data out

GPIO4

Tomado de Link 1 y Link 2

Soldar GPIO2 y GPIO3

lo que primero se debe hacer es soldar GPIO2 y GPIO3 estos van conectados al Pin2 y Pin5 de la SD respectivamente.

WRT54GL_altred0.jpg

gpio2-and-3-small.jpg

Soldar GPIO4 y GPIO7

Se soldará el GPIO4 al Pin7 de la SD y el GPIO7 el Pin1

GPIO4-7.jpg

gpio4-and-7-small.jpg

Soldar Vcc y GND

Se debe soldar por último el VCC al Pin4 de la SD y el GND debe ir soldado a los Pines 3 y 6

linksys-wrt54gl-v1.1-3.3v+GND.jpg

3.3-and-ground-small.jpg

Alguna otra información

También se puede soldar todos los puntos del Router por la parte de abajo con esto se puede cablear un poco más facil

Compilar Modulo mmc o obtener el precompilado

Existen varias formas para tener el módulo precompilado este se debe pasar al router y luego levantarlo y eventualmente no debe haber ningún problema, o se debe compilar y luego pasar el modulo al router.

Precompilado

La primera forma es instalar el paquete kmod-broadcom-mmc para ello se debe estar en el router y que este tenga conexión a internet

ipkg update
ipkg install kmod-broadcom-mmc

la otra forma es buscarlo en http://www.frontiernet.net/~beakmyn/openwrt/mmc/ desde allí se entra a GPIO5 o GPIO2 según lo que se desee y se descarga el mmc.o este es el compilado para poder correrlo en la mmc. También puede encontrar otro módulo en http://programmingstuff.free.fr/files/openwrt/whiterussian/mmc/

Compilar el Modulo

Preparar la Compilación

Se descarga del svn la versión que se haya cargado al router en este caso se ha trabajado con la versión kamikaze 7.09

svn co https://svn.openwrt.org/openwrt/tags/kamikaze_7.09

luego de haber descargado se ejecuta make menuconfig y se escoge la opción Select all packages by default y por último make

menuconfig.jpg

make menuconfig
make

Nota: si en algún momento llega a fallar el make ejecute make V=99

Editar el Makefile del Modulo

Se pueden encontrar dos módulos uno http://programmingstuff.free.fr/files/openwrt/whiterussian/mmc/src/ y http://www.frontiernet.net/~beakmyn/openwrt/mmc/ estos dos módulos son totalmente diferentes en su programación pero la forma de compilarlos es similar.

Descargue el módulo con todos los archivos anexos, (mmc.c, Makefile.... ) y luego edite el Makefile

TARGET  := mmc
WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes -fno-strict-aliasing -mips32 -save-temps
INCLUDE := -isystem /home/cyril/whiterussian/build_mipsel/linux-2.4-brcm/linux-2.4.30/include -isystem /home/cyril/whiterussian/build_mipsel/linux/arch/mips/bcm947xx/include/
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE} -fno-pic -mno-abicalls -mlong-calls
CC      := /home/cyril/whiterussian/staging_dir_mipsel/bin/mipsel-linux-uclibc-gcc


all:
        $(CC) ${CFLAGS} -c -o ${TARGET}.o ${TARGET}.c

clean:
        rm -f mmc.o

El Makefile es muy similar a este se debe editar y reemplazar las opciones INCLUDE y CC con las opciones del sistema y direccionando al repositorio del svn que con anterioridad se ha compilado y quedaría de la siguiente forma

TARGET  := mmc
WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes -fno-strict-aliasing -mips32 -save-temps
INCLUDE := -isystem /home/woakas/mig/wrt/svn_kamikaze_7.09/build_mipsel/linux-2.4-brcm/linux-2.4.34/include -isystem /home/woakas/mig/wrt/svn_kamikaze_7.09/build_mipsel/linux/arch/mips/bcm947xx/include/
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE} -fno-pic -mno-abicalls -mlong-calls
CC      := /home/woakas/mig/wrt/svn_kamikaze_7.09/staging_dir_mipsel/bin/mipsel-linux-uclibc-gcc


all:
        $(CC) ${CFLAGS} -c -o ${TARGET}.o ${TARGET}.c

clean:
        rm -f mmc.o

Compilando el Módulo

Por último se compila el módulo con make y se generará un archivo llamado mmc.o el cual será nuestro módulo para colocar en el router

make

Levantar el modulo

Para levantar el módulo se envia el modulo al router con scp y luego se levanta. Para este caso la dirección del router es la 192.168.1.1

scp mmc.o root@192.168.1.1:

luego de ello se levanta el módulo con insmod y para descargarlo con rmmod

ssh root@192.168.1.1
echo "0x9c" > /proc/diag/gpiomask
echo "1" >/proc/diag/led/power
insmod ./mmc.o

es muy importante colocar la opción echo "0x9c" > /proc/diag/gpiomask la explicación se debe a lo siguiente: Al realizar la modificación de la tarjeta SD, se están utilizando las líneas GPIO disponibles en el router. OpenWRT utiliza estas líneas para entrar en un estado denominado “failsafe mode”. Por lo tanto, se debe aplicar una máscara, que debe ser introducida en el archivo /proc/diag/gpiomask. Esta máscara define que líneas GPIO se están utilizando, y que no deben ser tenidas en cuenta para entrar al modo anteriormente mencionado. Se utilizó el hexadecimal 0x9C, debido a que se están utilizando las líneas GPIO 2, 3, 4, 7. Asumiendo un byte, se coloca un 1 a cada posición de línea GPIO que se vaya a utilizar, por lo tanto resulta 10011100, que en su equivalente hexadecimal es justamente 0x9C. Se menciona esto puesto que algunas modificaciones para utilizar la tarjeta SD, usan otras líneas GPIO, por lo tanto es común ver otras máscaras utilizadas. Tomado de http://nxbot.blogspot.com/2007/06/router-hack.html

se puede visualizar que ha pasado con el módulo colocando dmesg

dmesg

Se ha probado el módulo descargado desde http://programmingstuff.free.fr/files/openwrt/whiterussian/mmc/src/ y esto es lo que se debe ver al cargar el módulo.

[INFO] OEM/Application ID: TM
[INFO] Product name      : SD02G
[INFO] Product revision  : 3.5
[INFO] Product SN        : a28fca97
[INFO] Product Date      : 2007-6
[INFO] mmc_card_config: size = 1966080, hardsectsize = 1024, sectors = 1966080
[WARN] mmc_init: hd_sizes=1966080, hd[0].nr_sects=3932160
[INFO] mmc_card_init: set_blocklen (CMD16) succeeded !
Partition check:
 mmca: p1

Cargar de Forma Automática el Módulo

Nota:Esta información se realizó creando con anterioridad en la memoria una partición en ext2 y otra swap puede utilizar fdisk directamente en el WRT54GL para dicha labor.

Coloque el modulo en el directorio /lib/modules/2.4.34/

mv mmc.o /lib/modules/2.4.34/

Se debe agregar al archivo /etc/fstab con la opción del punto de montaje en el formato definido con anterioridad de la sd para este caso se utiliza ext2 y luego crear el archivo /etc/modules.d/21-mmc para cargar el módulo mmc al inicio del sistema.

echo "/dev/mmc/disc0/part1 /mnt/sd ext2 defaults 0 0" >> /etc/fstab
echo "mmc" >> /etc/modules.d/21-mmc

Cree el archivo /etc/init.d/mmc con la siguiente información

echo "0x9c" > /proc/diag/gpiomask
mount /mnt/sd

por último se realiza un enlace simbólico desde el archivo /etc/init.d/mmc creado con anterioridad al archivo /etc/rc.d/S25mmc

ln -s /etc/init.d/mmc /etc/rc.d/S25mmc

Posibles Errores

Estos dos errores se vieron con diferentes módulos se arreglaron con el módulo descargado desde acáhttp://programmingstuff.free.fr/files/openwrt/whiterussian/mmc/src/

Modulo GPIO2

mmc Hardware init
mmc Card init
mmc Card init *1*
mmc Card init *2*
Size = 1966080, hardsectsize = 1024, sectors = 1966080
Partition check:
 mmca: p1
Unable to handle kernel paging request at virtual address 0000000c, epc == 80017dd0, ra == 80017df0
Oops in fault.c::do_page_fault, line 206:

Modulo GPIO5

mmc Hardware init
mmc Card init
mmc Card init
mmc: error in mmc_card_init (1)
mmc: error in mmc_init (-1)

Referencias

Modificaciones Hardware

Software Modulo MMC

OpTrWiki: WRT54GL/Memoria (last edited 2009-03-03 22:34:20 by localhost)