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).
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…
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.
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 ?????