viernes 3 de agosto de 2007

Configurar Lector de tarjetas ENE en Linux

Estoy trabajando con un portátil (Acer travelmate 5210 con Kubuntu Feisty) con lector de tarjetas EME, que no habia manera de hacer que funcione.
Bueno, me ha costado un poquito pero aquí os dejo un pequeño howto.
En la versión actual del kernel deja de funcionar el lector de tarjetas, siendo necesario aplicar un parche al kernel, no se me asusten que no es grave.
Lo primero de todo, instalar las fuentes del kernel.

>sudo apt-get-update
>sudo apt-get install linux-source
> Y despúes las extraemos
> cd /usr/src
> sudo tar xvfj linux-source-2.6.20.tar.bz2y hacemos el link a /usr/src/linux
> sudo rm linux
> sudo ln -s linux-source-2.6.20 linux
Creamos un archvo con el patch, copia y pega el siguiente texto en un archivo, por ejemplo con kate, y guardalo en /usr/src ; recuerda debes arrancar kate como root para poder guardarlo en un directorio restringido a los usuarios. Eeste ejemplo lo llamaremos enepatch.
El patch está bajado de aquí y tiene una pequeña modificación hecha por mi para que funcione en nuestro sistema (simplemente he corregido las rutas a los archivos).
diff -Bbur linux/drivers/mmc/sdhci.c linux-2.6.20-suspend2-r4/drivers/mmc/sdhci.c
--- linux/drivers/mmc/host/sdhci.c 2007-05-11 01:43:16.000000000 +0300
+++ linux/drivers/mmc/host/sdhci.c 2007-05-11 01:51:00.000000000 +0300
@@ -74,6 +74,14 @@
.driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,
},

+ {
+ .vendor = PCI_VENDOR_ID_ENE,
+ .device = PCI_DEVICE_ID_ENE_CB712_SD_2,
+ .subvendor = PCI_ANY_ID,
+ .subdevice = PCI_ANY_ID,
+ .driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,
+ },
+
{ /* Generic SD host controller */
PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI <<>

y aplicamos el parche (asegúrate que estás en /usr/src/)
> sudo cat enepatch | patch -p0

Si no nos ha dado ningún error el parche se ha aplicado a las fuentes del kernel, ahora queda compilar el módulo necesario. Siempre desde /usr/src
> sudo make SUBDIRS=drivers/mmc
y esto nos debe haber generado los archivos .ko parcheados. Entramos al directorio.
> cd /usr/src/linux/drivers/mmc/host/
borramos el módulo actual y probamos el nuestro:
> sudo rmmod -f sdhci
> sudo insmod ./sdhci.ko

En este momento si tienes la tarjeta de memoria en su ranura ya te debería aparecer el asistente de KDE avisándote de que se ha detectado un nuevo dispositivo.
Ahora solo falta un detalle, copiar el módulo parcheado sobre el antiguo para que se cargue automáticamente el modificado:

> sudo cp ./sdhci.ko /lib/modules/2.6.20-16-generic/kernel/drivers/mmc/host/
Si vuestra versión del kernel es otra, obviamente el nombre del directorio cambiará.
Así es como lo he hecho yo paso a paso y ahora me funciona perfectamente.
Espero que os sirva de ayuda.

14 comentarios:

Omali exists dijo...

Hola, intento configurar el lector de tarjetas de mi travelmate 4152 y al poner en consola
$ sudo apt-get update linux-sourceY
me da el siguiente mensaje
E: El comando de actualización no toma argumentos
Mi gozo en un pozo... de momento. Me he saltado algún paso?
Gracias por tu tiempo

Empirio dijo...

Ya está corregido omali exists, era un "error tipográfico". No olvides decirnos por aqui si todo te va bien.

Omali exists dijo...

Ok, te sigo empirio... llego hasta:
sudo tar xvfj linux-source-2.6.20.tar.bz2
me descomprime un montón de archivos, y... no sé cómo hacer el link a /usr/src/linux
he intentado usar el comando link y no me quedo aquí, sigo buscando en foros.
Gracias!

Empirio dijo...

Perdona pero estaba de vacaciones y he vuelto hoy. El comando es ln -s "loquequieras linkar' 'el link que quieras crear' (o sea sudo ln -s /usr/src/linux-source-2.6.20 /usr/src/linux)

Anónimo dijo...

Hola, mi nick es Blacko, encantado!
Mira tengo un problemon con tu parche...
verás.. yo creo ese parche llamado enepatch y lo pongo en usr/src.
hago todo todito lo que dices, pero al poner en el terminal:

sudo cat enepatch | patch -p0

la consola me salta error, dice:

patching file linux/drivers/mmc/host/sdhci.c
Hunk #1 FAILED at 74.
patch: **** Can't rename file linux/drivers/mmc/host/sdhci.c to linux/drivers/mmc/host/sdhci.c.orig : Permission denied



He de decir tambien que el parche esta mal escrito y he tenido que retocar varios errores de sintaxis que me detectaba la consola.. pero bueno el problema esta ahora aki.. que no me deja....
Gracias!!!!

Empirio dijo...

hola Blacko.
Dime los errores exactos a ver que te dice.
el problema es que no lo haces como root y no tienes permiso para tocar los archivos.

Anónimo dijo...

Aquí Blacko otra vez, qué tal? :D
Gracias por responderme, mira... te explico lo que hago y los errores que me da, vale?
Pues yo lo q hago es abrir una terminal y tecleo:
sudo apt-get update ... y se "updatea" correctamente ;)

luego tecleo:
sudo apt-get install linux-source
y sin problemas ;)

luego extraigo. El link lo hago de la siguiente manera, dime si es correcta o no:
sudo ln -s /usr/src/linux-source-2.6.20 /usr/src/linux

así es como hago el link, y no me da ni error ni nada... bueno continuo:

Luego con un edito de texto creo un archivo llamado enepatch, y su contenido lo copio y pego de tu post, es decir Copiar Y pegar, COPIA EXACTA:

diff -Bbur linux/drivers/mmc/sdhci.c linux-2.6.20-suspend2-r4/drivers/mmc/sdhci.c
--- linux/drivers/mmc/host/sdhci.c 2007-05-11 01:43:16.000000000 +0300
+++ linux/drivers/mmc/host/sdhci.c 2007-05-11 01:51:00.000000000 +0300
@@ -74,6 +74,14 @@
.driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,
},

+ {
+ .vendor = PCI_VENDOR_ID_ENE,
+ .device = PCI_DEVICE_ID_ENE_CB712_SD_2,
+ .subvendor = PCI_ANY_ID,
+ .subdevice = PCI_ANY_ID,
+ .driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,
+ },
+
{ /* Generic SD host controller */
PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI <<>



guardo y lo meto en usr/src/

Tecleo:
sudo cat enepatch | patch -p0

y me sale lo siguiente:
patching file linux/drivers/mmc/host/sdhci.c
patch: **** malformed patch at line 5: .driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,



es decir, que el parche está mal escrito en esa linea (la linea 5), y lo que he hecho ha sido buscar un parche parecido por internet... y esa linea la escriben de otra manera, así que la retoco conforme el otro modelo de parche, y ese error ya no me salta... y cuando ya no me da ningun error de lineas, hago lo de sudo cat enepatch | patch -p0 y me dice lo siguiente:

patching file linux/drivers/mmc/host/sdhci.c
Hunk #1 FAILED at 74.
patch: **** Can't rename file linux/drivers/mmc/host/sdhci.c to linux/drivers/mmc/host/sdhci.c.orig : Permission denied

segun entiendo yo en este error, está intentando cambiarle el nombre a ese archivo??? porque no le deja el nombre como está??? porque le intenta añadir eso de "orig" al final???çNo entiendo que me pasa... bueno segun todo lo que te he dicho, espero que tengas informacion suficiente como para poder decirme que me pasa :)

Gracias de veras, estaba esperando tu respuesta con ansias jejejej bueno me alegro de que estes aki, y eso... aver que logramos.. GRACIAS MILES ;)

Anónimo dijo...

Hola soy Blacko otra vez, mira he solucionado lo anterior pero me aparece un nuevo error:

root@cuca:/usr/src# sudo cat enepatch | patch -p0
patching file linux/drivers/mmc/host/sdhci.c
Hunk #1 succeeded at 126 with fuzz 2 (offset 52 lines).

Anónimo dijo...

Hola,
a mí también me sale el error "patch: **** malformed patch at line 5: .driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE,"
¿Qué hay que cambiar en el patch para que solucionarlo?
Gracias

Empirio dijo...

Comprueba que no haya perdido el formato con el copy & paste que es muy habitual, si me mandas un mail te envio el archivo con el parche, yo lo he vuelto a hacer esta misma mañana y no me ha dado ningún problema.

Anónimo dijo...

Hola, tengo un Acer Travelmate 4152WLMi, el cual no consigo hacer funcionar ni los infrarrojos ni el lector de tarjetas, y buscando he llegado hasta aquí.

Mi pregunta es:¿por qué todas la distribuciones que conozco (respectivos foros) indican que este portátil no tiene soporte para infrarrojos ni para el lector de tarjetas, si tú dices que "En la versión actual del kernel deja de funcionar el lector de tarjetas, siendo necesario aplicar un parche al kernel, no se me asusten que no es grave."?

Perdón por el chorizo de post.

Alfredo dijo...

Hola me llamo Alfredo.
He estado leyendo el blog y no encuentro la solucion al problema del parche, es decir, ¿cual es el codigo válido para el parche? He estado buscando por internet pero no lo encuentro.

A continuacion les adjunto mi e-mail por si quieren contestar a mi correo, les estaria muy agradecido: balulu3@gmail.com

Sin más, muchas gracias.

Anónimo dijo...

Hola he estado intentando instalar el patch, la version de mi kernel es .24 en lugar de .20.

He modificado eso y funciona pero me da el error ese de linea 5 incorrecta.

Me puedes mandar a mi tambien el patch que le dijiste antes a un usuario???

Gracias de antemano.

Por cierto, mi correo es zirogirls@hotmail.com

keer dijo...

Hola

Tengo un Aser Aspire 5100 Ubuntu 8.04, mi lector de tarjeta SD no me detecta nada.

No se como instalar el drive o no se que deba de hacer, espero me puedan ayudar, ya que es el mejor foro que encontrado.

Gracias de antemano