Me he hecho con un nuevo receptor de TDT USB, el anterior (15a4:9016 Afatech Technologies, Inc. AF9015 DVB-T USB2.0 stick) me estaba dando muchos problemas y la poca señal que llega a mi habitación me hacía perder varios canales.
En este HOWTO intentaré de manera sencilla explicar como compilar una nueva versión de V4L previamente parcheada para el nuevo hardware.
1.- Reconocimiento
Lo primero es abrir el receptor (si lo piensas devolver no deberías hacerlo) para identificar los chips, en el mío se puede ver que tiene 2 chips (receptor doble) del tipo AF9035B y AF9033.
Buscando por varios sitios encuentro este hilo: http://patchwork.kernel.org/patch/61950/ que explicaque hay que aplicar dos parches al kernel y compilar, en lugar de compilar el kernel he usado la rama Mercurial del proyecto V4L.
2.- Descargamos V4L
hg clone http://linuxtv.org/hg/v4l-dvb
En el enlace que he puesto antes explica que hay que aplicar 2 parches,el primero del método B de este wiki, y el segundo elque adjunta en ese hilo. Yo he aplicado los dos (corregido los rechazos) y preparado un nuevo parche único, que puedes descargar de aquí: af9035.v4l.hg.diff
3.- Parchear
En el directorio v4l-dvb ejecutamos lo siguiente:
cat /ruta/al/parche/af9035.v4l.hg.diff | patch -p1
4.- Compilar
Teniendo nuestras cabeceras del kernel instaladas (apt-get install linux-headers-`uname -r`) ejecutamos make.
5.- Instalar
No es recomendable instalarlo encima ya que si algo no va bien tendremos que reinstalar nuestro kernel, vamos a instalarlo en el directorio update del kernel para que si queremos en un futuro podamos borrarlo y no estropear nuestro kernel. Es muy importante compilar e instalar como usuario (no como ROOT) ya que no se ejecutarán o copiarán cosas que no queramos.
make install DESTDIR=`pwd`/tmp
sudo mkdir -p /lib/modules/`uname -r`/updates
sudo cp -ra tmp/lib/modules/`uname -r`/kernel/drivers/media/ /lib/modules/`uname -r`/updates/v4l
sudo depmod -a
(va a dar errores de copia de firmware... no problem !!!)
5.- Instalar el firmware
Descargamos este archivo: dvb-usb-af9035-01.fw y lo copiamos en /lib/firmware/
6.- Pruebas antes de conectar
$ sudo modinfo dvb-usb-af9035
filename: /lib/modules/2.6.32-2-686/updates/v4l/dvb/dvb-usb/dvb-usb-af9035.ko
license: GPL
description: Afatech AF9035 driver
author: Antti Palosaari <crope@iki.fi>
alias: usb:v07CAp0825d*dc*dsc*dp*ic*isc*ip* <======= here is it!!!
alias: usb:v0CCDp0093d*dc*dsc*dp*ic*isc*ip*
alias: usb:v15A4p9035d*dc*dsc*dp*ic*isc*ip*
alias: usb:v15A4p1003d*dc*dsc*dp*ic*isc*ip*
alias: usb:v15A4p1002d*dc*dsc*dp*ic*isc*ip*
alias: usb:v15A4p1001d*dc*dsc*dp*ic*isc*ip*
alias: usb:v15A4p1000d*dc*dsc*dp*ic*isc*ip*
depends: dvb-usb,usbcore
vermagic: 2.6.32-2-686 SMP mod_unload modversions 686
parm: debug:set debugging level (int)
parm: adapter_nr:DVB adapter numbers (array of short)
7.- Conectamos
Ejecutamos en un terminal: sudo tail -f /var7log/syslog, debería salir algo como esto:
usb 1-3: new high speed USB device using ehci_hcd and address 6
usb 1-3: New USB device found, idVendor=07ca, idProduct=0825
usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-3: Product: A825
usb 1-3: Manufacturer: AVerMedia TECHNOLOGIES, Inc.
usb 1-3: SerialNumber: 0000000000000
usb 1-3: configuration #1 chosen from 1 choice
dvb-usb: found a 'Avermedia TwinStar' in cold state, will try to load a firmware
usb 1-3: firmware: requesting dvb-usb-af9035-01.fw
dvb-usb: downloading firmware from file 'dvb-usb-af9035-01.fw'
dvb-usb: found a 'Avermedia TwinStar' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Avermedia TwinStar)
af9033: firmware version: LINK:11.15.10.0 OFDM:5.48.10.0
DVB: registering adapter 0 frontend 0 (Afatech AF9033 DVB-T)...
mxl5007t 4-00c0: creating new instance
mxl5007t_get_chip_id: unknown rev (3f)
mxl5007t_get_chip_id: MxL5007T detected @ 4-00c0
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Avermedia TwinStar)
af9033: firmware version: LINK:11.15.10.0 OFDM:5.48.10.0
DVB: registering adapter 1 frontend 0 (Afatech AF9033 DVB-T)...
mxl5007t 4-00c1: creating new instance
mxl5007t_get_chip_id: unknown rev (3f)
mxl5007t_get_chip_id: MxL5007T detected @ 4-00c1
dvb-usb: Avermedia TwinStar successfully initialized and connected.
usbcore: registered new interface driver dvb_usb_af9035
En /dev/dvb se crearán nuevos dispositivos:
tree /dev/dvb/
/dev/dvb/
├── adapter0
│ ├── demux0
│ ├── dvr0
│ ├── frontend0
│ └── net0
└── adapter1
├── demux0
├── dvr0
├── frontend0
└── net0
Si algo no funciona, como por ejemplo nos sale esto por el syslog:
usb 1-3: new high speed USB device using ehci_hcd and address 5
usb 1-3: New USB device found, idVendor=07ca, idProduct=0825
usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-3: Product: A825
usb 1-3: Manufacturer: AVerMedia TECHNOLOGIES, Inc.
usb 1-3: SerialNumber: 0000000000000
usb 1-3: configuration #1 chosen from 1 choice
dvb_usb_af9035: disagrees about version of symbol dvb_usb_device_init
dvb_usb_af9035: Unknown symbol dvb_usb_device_init
... es porque teníamos cargados módulos dvb_* , tenemos que mirar los que estan cargados (lsmod) y quitarlos (rrmod), si sigue sin ir podemos probar a reiniciar.