martes, 3 de junio de 2008

Control remoto bajo Linux

Bueno, hacia mucho que no escribía nada, pero acabo de hacer funcionar el modulo lirc-gpio con un kernel 2.6.24 y como estoy tan feliz, voy a compartirlo aqui :-D

Si tenés una capturadora de TV, usás el modulo bttv para usarla, tiene receptor infrarrojo y tenes un kernel 2.6.24, aca están los pasos para poder hacer funcionar Lirc y poder disfrutar del control remoto de la misma.

Como primera medida, debemos saber si la placa está soportada... para eso este link, es muy útil.

en caso de estar soportada, hay que compilar el modulo de lirc, pero antes, hay que aplicar un patch al kernel, dado que, en la versión 2.6.24 hay algunos cambios en bttv con los cuales lirc no compila.

para esto, bajamos el patch de aca (pueden darle click derecho al archivo y "Guardar como" o una vez que entren al link, guardar la pagina como "lirc-bttv-linux-2.6.24.patch"

Bueno, lo que va a hacer este patch, es meterle vieja funcionalidad a bttv para poder compilar lirc... ahora, *solo* hacer esto, basta para compilarlo, pero cuando lo querramos usar, nos va a dar errores, dado que el driver que tenemos instalado está compilado sin este patch.

Ok, basta de charlas y vamos a la acción:

nota: yo utilizo Debian, así que es probable que en otras distros los paquetes se llamen distinto

primero lo primero, instalar:
apt-get install lirc lirc-modules-source linux-headers-$(uname -r) kernel-package

También vamos a nacesitar las fuentes del kernel, en mi caso:
apt-get install linux-source-2.6.24

Ahora lo que tenemos que hacer es ir a /usr/src y descomprimir las fuentes
tar xjvf linux-source-2.6.24.tar.bz2
tar xzvf lirc-modules.tar.gz
en mi caso, las fuentes de bttv no venían con los headers, así que hay que copiar los archivos a mano desde las fuentes:
cp -R linux-source-2.6.24/drivers/media/video/bt8xx/bt* linux-headers-2.6.24-1-common/drivers/media/video/bt8xx/

los archivos que "patchea" son bttv.h y bttv-if.c, estos archivos son parte de lo que acabamos de copiar, con lo cual copiamos el archivo patch (que bajamos anteriormente) a /usr/src y ejecutamos lo siguiente:
patch -p0 < lirc-bttv-linux-2.6.24.patch

nos va a preguntar la ubicacion de los archivos, primero el bttv.h y luego el bttv-if.c, así que se las pasamos:
linux-headers-2.6.24-1-common/drivers/media/video/bt8xx/bttv.h linux-headers-2.6.24-1-common/drivers/media/video/bt8xx/bttv-if.c

si todo fue bien, debería haber terminado sin error.
Ahora, como dije antes, tenemos que compilar bttv nuevamente, para tener estos nuevos cambios... Para esto:
cd linux-source-2.6.24/drivers/media/video/bt8xx/
make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules
make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules_install
depmod -a

Luego de hacer eso (sin errores) vamos a tener nuestro nuevo modulo de bttv listo para cargar. En caso de tenerlo cargado de antes hacemos:
rmmod bt878
rmmod bttv
modprobe bt878
modprobe bttv

y listo, nuestro modulo patcheado debería estar cargado. Pueden fijarse en 'dmesg' o en 'lsmod |grep bttv'
y ahora por ultimo lo que queda es compilar el modulo de Lirc, para eso, volvemos a /usr/src y hacemos lo siguiente:
m-a update,prepare
dpkg-reconfigure lirc-modules-source

una vez que guardamos, ejecutamos:
m-a a-i lirc
dpkg -i /usr/src/lirc-modules-*.deb

y por último cargamos el modulo haciendo:
modprobe lirc-gpio
Si todo fue bien, el modulo deberia haberse cargado sin errores... pueden comprobarlo ejecutando 'dmesg' nuevamente, deberían ver algo como: lirc_gpio (0): driver registered

muy bien, una vez terminado todo, pueden probar si anda usando mode2
mode2 -d /dev/lirc0
Cuando ejecuten eso, deberían ver cosas en la pantalla a medida que aprietan diferentes botones en el control remoto... en caso negativo, entonces algo no estuvo bien y le modulo no esta funcionando correctamente.

En caso de recibir señales, es hora de hacer un archivo lircd.conf con la informacion de su control:
irrecord -d /dev/lirc0 lircd.conf
Una vez que terminaron de grabar los botones, copian el archivo generado (lircd.conf) y pisan el que se encuentra en /etc/lirc/ con el mismo nombre.
Una vez hecho esto, pueden correr 'lircd -n -d /dev/lirc0' para ver si se carga sin problemas. Si les dice que está listo, pueden probar en otra consola, ejecutando 'irw' y oprimir teclas del control... deberian ver el nombre que le pusieron en el lircd.conf.

Bueno, si hasta aca no tuvieron problemas, es hora de cargar el daemon y disfrutar del control :-D

para esto ejecutan /etc/lirc start

y luego usan cosas como irkick (esto es para KDE, no conozco si viene algo similar para gnome, pero calculo que debe venir, y para los otros escritorios tambien) para configurar las aplicaciones.

Y bueno, eso es todo.

Espero que les haya servido, cualquier cosa dejen un comentario con algún problema y lo intentamos resolver ;-)

hasta la proxima.