|
|
Lector tarjetas Linux |
|
|
Autor: linuxcpp _
URL
_
Tb ()
_
Categorias: LINUX- Driver
|
LECTOR DE TARJETAS SD/MMC/...
EN LINUX



EN LINUX



Voy a comentaros alguno de los problemas que pueden apareceros al intentar usar los lectores de tarjetas SD/MMC...
En particular me he centrado en pruebas con lectores internos en portátiles, y las pruebas las he realizado sobre un sistema operativo gnuLinEx 2006; pero no con ello quiero decir que mis explicaciones no vayan a funcionar en otros sistemas operativos, ya que me he documentado en numerosos foros donde se tratan otros sistemas operativos tales como Ubuntu o Suse.
En primer lugar debemos conocer que tipo de chip usa nuestro lector de tarjetas integrado. Ello se puede ver con el comando:
En particular me he centrado en pruebas con lectores internos en portátiles, y las pruebas las he realizado sobre un sistema operativo gnuLinEx 2006; pero no con ello quiero decir que mis explicaciones no vayan a funcionar en otros sistemas operativos, ya que me he documentado en numerosos foros donde se tratan otros sistemas operativos tales como Ubuntu o Suse.
En primer lugar debemos conocer que tipo de chip usa nuestro lector de tarjetas integrado. Ello se puede ver con el comando:
lspci | grep CardBus
En principio os mostrará una única línea indicando el tipo de chip que usa. Yo voy a centrarme especialmente en la el chip "Texas Instruments", pero pueden aparecer otros tipos de chip como "ENE Technology Inc"... En mi caso el comando muestra:
0a:09.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
El resto de comentarios los realizaré sobre el chip "Texas Instruments" que es el que más he investigado. No obstante para aquellos que tengais un chip "ENE Technology Inc" os remito al siguiente enlace donde podreis encontrar información que os será de utilidad:
Lector de tarjetas chip "Texas Instruments":
Hacer funcionar un lector de tarjetas con este chip es muy sencillo, bastaría con ejecutar 3 comandos y listo. Sin embargo, hay versiones del driver que tiene un bug, y que trataré más adelante para aquellos a los que le surga el problema.
Cargando el driver: Basta con cargar 3 módulos del kernel. En concreto los módulos: tifm_7xx1, tifm_core y tifm_sd. Para hacerlo desde una consola como root ejecutad los comandos:
modprobe tifm_7xx1
modprobe tifm_core
modprobe tifm_sd
modprobe tifm_core
modprobe tifm_sd
Con ello ya os debería funcionar el lector de tarjetas (a no ser que el bug no esté arreglado en vuestro kernel), y simplemente con introducir una tarjeta compatible en el lector ya debería ser detectada sin problemas.
Tanto si funciona bien ahora, como si tenemos que arreglar el bug, es conveniente añadir al fichero /etc/modules las líneas:
Tanto si funciona bien ahora, como si tenemos que arreglar el bug, es conveniente añadir al fichero /etc/modules las líneas:
tifm_7xx1
tifm_core
tifm_sd
tifm_core
tifm_sd
El motivo es muy sencillo. El comando modprobe carga los módulos en la sesión actual; sin embargo la próxima vez que reiniciemos el ordenador ya no estarán cargados y tendríamos que ejecutar los comandos de nuevo. Añadiendo estas lineas en este fichero conseguimos que estos módulos se carguen por defecto en el arranque del sistema, consiguiendo tener siempre operativo el lector de tarjetas.
BUG chip Texas Instruments:
Este bug está relacionado con el kernel usado. No estoy muy enterado en que versiones de kernel puede aparecer el bug pero me parece que sucede en versiones 2.6.20 en adelante. El problema del bug es que al introducir una tarjeta en el lector, a pesar de que es detectada, entra como en un bucle detectando la tarjeta una y otra vez, y es que en verdad se están produciendo conflictos. Estos conflictos pueden verse fácilmente ejecutando el comando dmesg desde un terminal, y donde aparecerá algo como:
...
mmcblk0: error 1 sending read/write command
end_request: I/O error, dev mmcblk0, sector 249
mmcblk0: error 1 sending read/write command
end_request: I/O error, dev mmcblk0, sector 250
...
La solución es actualizar el driver tifm a una versión superior donde ya esté solucionado el bug. Sin embargo la actualización del driver requiere compilarlo con el kernel en cuestión; es decir, igual que he explicado en otros post, tenemos que tener instalado el paquete linux-headers de nuestro kernel usado. La versión del kernel podemos conocerla usando el comando uname -r. No obstante aseguraos que teneis todo correctamente instalado ejecutando como root el comando:
apt-get install build-essential linux-headers-`uname -r`tar -xvzf tifm_install.tar.gz
La compilación es sencilla, aunque me temo que dependiendo de vuestra distribución os puede aparecer algún que otro error, porque no parece estar demasiado depurado el código fuente. Y por ello voy a intentar comentaros los posibles errores que os podrían surgir.
Entraremos en primer lugar en el directorio descomprimido con el comando:
cd tifm_installEntraremos en primer lugar en el directorio descomprimido con el comando:
A continuación ejecutaremos el comando:
./install.sh
La ejecución la realizaremos como root en un sistema como gnuLinEx aunque si usais Ubuntu donde ya tengais configurado el comando sudo, ya os pedirá la clave cuando sea necesario.
Entonces debeis ejecutar previamente el comando:
chmod +x install.sh- Si al ejecutar el comando apareciera algo como:
Entonces debeis ejecutar previamente el comando:
- Un posible error que os puede aparecer al ejecutar el comando./install.sh es que salga algo como:
De ser así os recomiendo abrir el fichero install.sh con un editor de texto como puede ser gedit, y realizar los siguientes cambios:
Cambiar la parte de código:
Cambiar la parte de código:
sudo mv /lib/modules/`uname -r`/kernel/drivers/misc/tifm_core.ko /lib/modules/`uname -r`/kernel/drivers/misc/tifm_core.ko-old && sudo mv /lib/modules/`uname -r`/kernel/drivers/misc/tifm_7xx1.ko /lib/modules/`uname -r`/kernel/drivers/misc/tifm_7xx1.ko-old && sudo mv /lib/modules/`uname -r`/kernel/drivers/mmc/host/tifm_sd.ko /lib/modules/`uname -r`/kernel/drivers/mmc/host/tifm_sd.ko-old && sudo make && sudo make install && sudo make clean |
Por:
| if [ -e /lib/modules/`uname -r`/kernel/drivers/misc/tifm_core.ko ]; then sudo mv /lib/modules/`uname -r`/kernel/drivers/misc/tifm_core.ko /lib/modules/`uname -r`/kernel/drivers/misc/tifm_core.ko-old fi if [ -e /lib/modules/`uname -r`/kernel/drivers/misc/tifm_7xx1.ko ]; then sudo mv /lib/modules/`uname -r`/kernel/drivers/misc/tifm_7xx1.ko /lib/modules/`uname -r`/kernel/drivers/misc/tifm_7xx1.ko-old fi if [ -e /lib/modules/`uname -r`/kernel/drivers/mmc/host/tifm_sd.ko ]; then sudo mv /lib/modules/`uname -r`/kernel/drivers/mmc/host/tifm_sd.ko /lib/modules/`uname -r`/kernel/drivers/mmc/host/tifm_sd.ko-old fi sudo make && sudo make install && sudo make clean |
- IMPORTANTE: En los sistemas gnuLinux que NO tengan configurado el comando sudo (por ejemplo en gnuLinEx 2006) debemos editar el fichero ./install.sh y eliminar la palabra sudo de los comandos. (Recordad que debemos ejecutar este script desde el usuario ROOT).
- Otro de los errores que puede aparecer mientras se ejecuta el comando ./install.sh es un listado de errores muy numerosos mientras se está ejecutando el comando make. Por lo general si os vais a la primera-segunda línea ddonde se producen los errores aparecerá algo como:
Para solucionar este error tan sólo debemos editar el fichero ./mmc/host.h y cambiar la línea que pone:
#include <linux/mmc/core.h>Por:
#include <linux/mmc/mmc.h>
- Como último posible error que puede surgir es algo parecido a que no puede crear o no existe el directorio /lib/modules/`uname -r`/kernel/drivers/mmc/host; de ser así simplemente deberemos ejecutar el comando:
Supongo que ya no os aparecerán más errores, y por consiguiente que la instalación se ha realizado correctamente. Para verificar que funciona correctamente debemos ejecutar el comando modprobe de los 3 módulos que os expliqué anteriormente. Sin embargo, debemos en primer lugar descargarlos si ya los habíamos cargado. Ejecutaremos los comandos:
rmmod tifm_sdrmmod tifm_7xx1
rmmod tifm_core
modprobe tifm_core
modprobe tifm_7xx1
modprobe tifm_sd
MONTAJE:
Una vez tenemos configurado correctamente el lector de tarjetas con el chip Texas Instruments, queda una cuestión que debemos considerar, y es que puede que el montaje de la tarjeta no sea automático y debamos realizarlo a mano, ejecutando el comando:
mount /dev/mmcblk0p1 DIRECTORIO_ELEGIDO
Siendo DIRECTORIO_ELEGIDO cualquier directorio que nos guste, creado por ejemplo en /mnt o en /media, con el comando mkdir.
mount /dev/mmcblk0p1 DIRECTORIO_ELEGIDO
Siendo DIRECTORIO_ELEGIDO cualquier directorio que nos guste, creado por ejemplo en /mnt o en /media, con el comando mkdir.
Para cualquer duda, problema o sugerencia deja un comentario.
|
|
Comentarios (0)
Menéame
Barrapunto
Technorati
Google Bookmarks
Fresqui
del.icio.us
VOTACIÓN:
(Núm. votos: 3)









Autor: 
Categorias: 