Montando lector SD/MMC usando el modulo Texas Instruments (tifm_7xx1)

Bueno; hace algún tiempo hice un artículo de como montar los lectores SD (sobre todo los basados en Texas Instruments) usando el módulo sdhci (Durante algún tiempo colaboré en pruebas en ese proyecto) y realmente en muchos equipos funcionó sin muchos problemas; sin embargo, en algunos (como la actual HP compaq nx6320 que poseo) poseen una versión un poco «dificil» de instalar usando sdhci (hay que hacer algunos malabares, ejecutar setpci por allí y por allá y no es algo cómodo que digamos).

Bueno, esta vez he decidido usar el módulo Texas Instruments (tifm) que viene en el kernel linux por encima de 2.6.19.

Las instrucciones son genéricas y no dependen mucho de una u otra distribución:

Lo primero que hay que hacer es identificar si realmente poseemos un equipo Texas Instruments:

Ejecutamos:

# lspci | grep Texas
04:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
04:06.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
04:06.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
04:06.3 Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller
04:06.4 Communication controller: Texas Instruments PCIxx12 GemCore based SmartCard controller

La versión en negrita es la que nos interesa; el Mass Storage Controller (la lectora 5 en 1).

Ahora; debemos tener el modulo del kernel tifm_core:

# modinfo tifm_core
filename: /lib/modules/2.6.22.4/kernel/drivers/misc/tifm_core.ko
license: GPL
author: Alex Dubov
description: TI FlashMedia core driver
license: GPL
version: 0.8
vermagic: 2.6.22.4 SMP preempt mod_unload CORE2
depends:
srcversion: BE1DF8B52CD61BF90C0A9A2

Si no lo tenemos, debemos compilar nuestro kernel con dicho soporte:

Device Drivers > MMC/SD card support MMC (y)

y activar:

  • MMC block device driver (M)
  • TI Flash Media MMC/SD Interface support (EXPERIMENTAL) (M)

(M) significa que se cargará como módulo

 

Eso debería activar automáticamente (sino, agregar) en:

 

Device Drivers > Misc Drivers > TI Flash Media interface support (EXPERIMENTAL) > TI Flash Media PCI74xx/PCI76xx host adapter support (EXPERIMENTAL)

 

Ambos en (M) (Módulo).

 

Luego de compilar y reiniciar tendremos cargados los siguientes módulos:

  • mmc_block
  • tifm_core
  • tifm_7xx1
  • tifm_sd

(nota: Para cargar los módulos ejecutamos como root:

#modprobe mmc_block  && modprobe tifm_core && modprobe tifm_7xx1&& modprobe tifm_sd

Deben ser ejecutados EN ESE ORDEN!).

 

Para que se carguen siempre que la maquina se inicia:

agregar a /etc/modprobe.conf (en fedora core/gentoo) o en /etc/modules (debian/ubuntu):

mmc_block
tifm_core
tifm_7xx1
tifm_sd

 

Para que dichos módulos estén cargados en orden cada vez que iniciamos el equipo.

 

Verificamos que estan correctamente instalados:

#lsmod | grep tif
tifm_sd 12168 0
tifm_7xx1 8704 0
tifm_core 11524 2 tifm_sd,tifm_7xx1

 

Ahora vienen las pruebas; ejecutamos udevmonitor:

#udevmonitor
udevmonitor prints the received event from the kernel [UEVENT]
and the event which udev sends out after rule processing [UDEV]

UEVENT[1188780436.717951] add@/devices/pci0000:00/0000:00:1e.0/0000:04:06.2/tifm_sd0:1
UDEV [1188780436.718961] add@/devices/pci0000:00/0000:00:1e.0/0000:04:06.2/tifm_sd0:1
UEVENT[1188780436.767532] add@/class/mmc_host/mmc1
UDEV [1188780436.769417] add@/class/mmc_host/mmc1
UEVENT[1188780436.847982] add@/class/mmc_host/mmc1/mmc1:b368
UEVENT[1188780436.849089] add@/block/mmcblk0
UEVENT[1188780436.849102] add@/block/mmcblk0/mmcblk0p1
UDEV [1188780436.849813] add@/class/mmc_host/mmc1/mmc1:b368
UDEV [1188780436.908071] add@/block/mmcblk0
UDEV [1188780436.932318] add@/block/mmcblk0/mmcblk0p1

Fijense que he puesto en negrillas  cual módulo del kernel detectó el device (tifm_sd) y que dispositivo detectó (block/mmcblk0) y que particiones detectó en dicho dispositivo de bloque(block/mmcblk0/mmcblk0p1).

Reemplacen «block» por /dev/ y tienen su nombre de partición.

 

Ahora, solo resta montarlo:

Montaje:
#mkdir /media/sdcard  (esto se hace una sola vez)
#mount -t vfat /dev/mmcblk0p1 /media/sdcard/ -o rw,uid=1000,gid=1000,umask=077
Las reglas (-o) enviadas al comando de montaje son:

rw = permitir lectura y escritura del dispositivo

uid, gid = uid y gid mínimos para acceder al dispositivo (esto permite a usuarios con uid > 1000 acceder en modo rw al dispositivo).

umask = el bitmask de los permisos al dispositivo.

 

Trato de corregir las reglas de udev que evitan que HAL automonte la SD (algo que no pasaba con sdhci, pero como dije, este modelo de lector Texas Instruments tiene algunos problemas con sdhci).

 

3 comentarios sobre “Montando lector SD/MMC usando el modulo Texas Instruments (tifm_7xx1)

  1. A ver si me puedes ayudar. Tengo un toshiba tecra m5-133 y el lector de tarjetas SD/MMC que trae me funcionaba perfectamente en ubuntu hasta la version 6.04. A partir de la siguiente me dejó de funcionar. En mi lspci me falta una linea:

    06:0b.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
    06:0b.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
    06:0b.3 Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controllerin

    Me falta la linea correspondiente al 06.0b.02 que supongo que se correspondera con la de Mass storage. Voy a probar a instalar la ubuntu de nuevo desde 0 con un disco nuevo y empezare a hacer mas pruebas. Todo el mundo me dice que me compre un lector de tarjetas y me olvide pero es que me da rabia que me fuera en su momento y ahora no. El lector funciona perfectamente en windows…

  2. Trata de ver en el dmesg algún posible fallo del dispositivo (posiblemente producto de alguna imposibilidad de carga del controlador); te recomiendo que hagas lo siguiente:
    coloca a sdhci en /etc/modprobe.d/blacklist para que no se cargue al arranque.
    trata de cargar los modulos de texas instruments (tifm_core, tifm_7xx1 y tifm_sd) y mira a ver que sale en el dmesg (si el dispositivo es reconocido).
    Postea el codigo de error presentado por el dispositivo en el dmesg.

  3. Ojala me pudieras ayudar tengo una compaq 6320 y acabo de instalar Fedora 8 cuando ejecuto el comando:

    #udevmonitor

    udevmonitor
    udevmonitor will print the received events for:
    UDEV the event which udev sends out after rule processing
    UEVENT the kernel uevent

    UEVENT[1196904613.584497] remove /devices/pci0000:00/0000:00:1e.0/0000:02:06.2/tifm_ms0:0 (tifm)
    UDEV [1196904613.585882] remove /devices/pci0000:00/0000:00:1e.0/0000:02:06.2/tifm_ms0:0 (tifm)
    UEVENT[1196904621.310946] add /devices/pci0000:00/0000:00:1e.0/0000:02:06.2/tifm_ms0:0 (tifm)
    UDEV [1196904621.343256] add /devices/pci0000:00/0000:00:1e.0/0000:02:06.2/tifm_ms0:0 (tifm)

    obtengo esto qe no me dice donde montar qe estoy haciendo mal ?????

Deja un comentario