domingo, 13 de enero de 2008

Lector de Memoria SD/MMC en debian ETCH (stable)

Hola, le explico como hacer que funcione el lector de memorias SD/MMC en la distribución dabian estable (ETCH).

- Lo primero es identificar el dispositivo
#lspci

06:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller
06:06.4 Generic system peripheral [0805]: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller

- Fijémonos en el identificador de dispositivo. En mi caso es 06:06.3, pero en el suyo puede ser cualquier otro. Ejecutamos (como root)
#lspci -xxx | grep -A 5 06:06.3 (recuerda sustituir el identificador de dispositivo por el tuyo):

06:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller
00: 4c 10 33 80 06 01 10 02 00 00 80 01 08 80 80 00
10: 00 40 10 b0 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 81 30
30: 00 00 00 00 44 00 00 00 00 00 00 00 0a 01 07 04
40: 00 00 00 00 01 00 02 7e 00 00 00 00 00 00 00 00

Ese es el resultado que obtengo yo. Fijate en la línea que empieza por "40:" (la última), en el valor de casilla que hay bajo el "0a". En mi caso es 00, pero, por lo que he visto por ahí, puede tener un valor de 40 o de 60 también. En cualquier caso, tenemos que cambiar el segundo 0 por un 2 (si es 40, debe quedar como 42, si 60, 62; en mi caso debe quedar como 02). Para conseguirlo ejecutamos el siguiente comando:

#setpci -s 06:06.3 4c.b=02

De nuevo recuerda sustituir el 06:06.3 por el identificador del dispositivo en tu caso particular, y el 02 por lo que corresponda. Si volvemos a ejecutar el lspci -xxx | grep -A 5 06:06.3 veremos que ahora devuelve lo correcto:

06:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller
00: 4c 10 33 80 06 01 10 02 00 00 80 01 08 80 80 00
10: 00 40 10 b0 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 81 30
30: 00 00 00 00 44 00 00 00 00 00 00 00 0a 01 07 04
40: 00 00 00 00 01 00 02 7e 00 00 00 00 02 00 00 00

Bien, pues ya está todo listo: cargamos los módulos necesarios con modprobe (hay que cargar los módulos sg, sd_mod, mmc_core, mmc_block y sdhci), y veremos algo así:

sdhci: Secure Digital Host Controller Interface driver, 0.12
sdhci: Copyright(c) Pierre Ossman
sdhci: SDHCI controller found at 0000:06:06.4 [104c:8034] (rev 0)
ACPI: PCI Interrupt 0000:06:06.4[A] -> GSI 22 (level, low) -> IRQ 177
mmc0: SDHCI at 0xb0109000 irq 177 DMA
mmc1: SDHCI at 0xb0108c00 irq 177 DMA
mmc2: SDHCI at 0xb0108800 irq 177 DMA

Una cosa más. Debemos asegurarnos de que en arranques sucesivos todo esté como lo hemos dejado. Para ello editamos el archivo /etc/modules para incluir los módulos que hemos cargado, de forma que se vuelvan a cargar en cada arranque del sistema. Por último, editamos el /etc/rc.local y añadimos, antes de exit 0, el comando setpci -s 06:06.3 4c.b=02. Y listo. Por fin puedo usar el lector de MMC que tengo de adorno desde hace casi dos años :D

Si quieres mas información avanzada, ve a mi blog de la instalación de debian en una computadora personal

No hay comentarios: