Mon tuner TNT utilisé sur mon serveur notamment pour Tvheadend ne fonctionnant plus correctement, j'ai donc décidé d'en acheter un nouveau. Cependant, il n'est pas facile de trouver un tuner TNT compatible à coup sûr avec Linux, car les modèles qui ont des drivers pour Linux sont assez anciens et on ne peut plus les acheter.
Après avoir un peu cherché sur le wiki Linux TV et dans la documentation Ubuntu j'ai décidé de prendre la clé USB TNT AverMedia AverTV Volar HD PRO qui, selon certains sites marchait sans problème sous Linux, et selon d'autres non.
Or, il s'est avéré que sur mon serveur Debian Squeeze qui a une version du noyau Linux qui commence à dater (2.6.32), les drivers permettant de faire marcher cette clé n'étaient pas présents. Après beaucoup de recherches infructueuses sur Internet puis de bidouille, je vais présenter ici la méthode qui m'a permis de faire fonctionner cette clé TNT (qui depuis marche parfaitement). Cette bidouille peut à priori (selon certaines sources) s'adapter aux modèles de clé suivants :
Pour les tuners AverMedia :
- AVerTV HD (ID 07ca:b835)
- AVerTV HD PRO (ID 07ca:a835)
- AVerTV HD Green (ID 07ca:a835)
- AVerTV TwinStar (ID 07ca:0825 - 07ca:a825)
AVerTV HD A867R(ID 07ca:a867)
Ainsi que les IDs suivant : 07CA:0835, 07CA:A333, 07CA:0337, 07CA:F337, 07CA:0867, 07CA:3867, 07CA:B867
TerraTec
- Cinergy T Stick (ID 0ccd:0093)
- Cinergy T Stick 2 (ID 0ccd :00aa)
Afatech
- Afatech AF9035 generic (ID 15A4:1000 - 15A4:1001 - 15A4:1002 - 15A4:1003)
Elle peut aussi être utile pour des personnes ayant des problèmes similaires. Elle est fortement inspirée de ce post de forum : http://forum.ubuntu-fr.org/viewtopic.php?id=799061&p=1 lui même provenant d'autres sources et s'applique à toutes les distributions issues de Debian (Debian, Ubuntu, Mint...)
Détail de la manipulation
Tout d'abord, installation des paquets nécessaires à cette manipulation :
aptitude install libdigest-sha1-perl make gcc git patch patchutils libproc-processtable-perl linux-source linux-headers-`uname -r`
Apparemment à partir d'Ubuntu 12.04, il faut remplacer libdigest-sha1-perl par libdigest-sha-perl
Ensuite, téléchargement des modules contenant les drivers qui vont être compilés et ajoutés au noyau courant. Ceux-ci sont issus du projet linuxtv.org et grâce au repository git seront à jour :
git clone git://linuxtv.org/media_build.git
cd media_build
./build
Ensuite, il faut interrompre la compilation, une fois les téléchargements effectués en appuyant sur Ctrl-C. Si vous n'avez pas été assez rapide, il est aussi possible d'attendre que cela se finisse et de saisir :
make clean
make distclean
Enfin, normalement, il suffit de saisir
make allyesconfig
make
sudo make install
pour compiler les modules et les installer. Or, malgré la rétrocompatibilité avec les noyaux plus anciens proposée normalement par ce code de linuxtv, il y avait les erreurs de compilation suivante sur mon serveur à cause d'une incompatibilité avec les headers de mon noyau :
/root/media_build/v4l/drxk_hard.c: In function 'drxk_attach':
/root/media_build/v4l/drxk_hard.c:6610: warning: passing argument 5 of 'request_firmware_nowait' makes integer from pointer without a cast
include/linux/firmware.h:40: note: expected 'gfp_t' but argument is of type 'struct drxk_state *'
/root/media_build/v4l/drxk_hard.c:6610: error: too few arguments to function 'request_firmware_nowait'
make[3]: *** [/root/media_build/v4l/drxk_hard.o] Error 1
make[2]: *** [_module_/root/media_build/v4l] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-2.6.32-17-pve'
make[1]: *** [default] Error 2
make[1]: Leaving directory `/root/media_build/v4l'
make: *** [all] Error 2
En comparant le prototype de la fonction disponible dans les headers de mon noyau et la fonction appelée dans le code de linuxtv, j'ai réussi à trouver le moyen de faire compiler ces modules en effectuant les changements suivants :
Dans le fichier \$ROOT_MEDIA_BUILD/v4L/drxk_hard.c, à la ligne de l'erreur (6610 dans mon cas), j'ai ajouté le paramètre 0, à l'appel de la fonction request_firmware_nowait : remplacement de "state, load_firmware_cb);" par "0, state, load_firmware_cb);".
De la même manière, dans le fichier \$ROOT_MEDIA_BUILD/v4l/tuner-xc2028.c, à la ligne d'une autre erreur (1410 dans mon cas), j'ai remplacé "fe,load_firmware_cb);" par "0, fe,load_firmware_cb);".
Bien entendu, je ne garantis pas que cette solution soit bonne, j'ai choisi la valeur de "0" au hasard, car il fallait un entier. Cependant, elle m'a permis de finir la compilation sans problèmes et l'exécution du driver ensuite s'est passée parfaitement (contrairement à toutes les autres techniques que j'avais vues en ligne)
Ensuite, il ne reste donc plus qu'à compiler et installer (comme décrit ci-dessus) puis installer le firmware approprié correspondant au matériel. Dans le cas de mon tuner TNT AverTV Volar HD PRO, en faisant ceci :
cd /lib/firmware
sudo wget http://xgazza.altervista.org/Linux/DVB/dvb-usb-af9035-02.fw
Conclusion
Voici donc le détail des manipulations que j'ai effectuées pour faire fonctionner mon tuner TNT AverTV Volar HD PRO sur mon serveur Debian.
Normalement, avec des versions plus récentes du noyau, notamment sur toutes les versions récentes d'Ubuntu, les mêmes problèmes ne devraient pas se produire et peut-être que le simple téléchargement du firmware (dernière étape) ou au pire la compilation «classique» des modules devrait suffire. Le tuner TNT AverTV Volar HD PRO peut donc être compatible avec Linux et une fois les drivers installés, il fonctionnera ensuite très bien (par exemple avec Tvheadend).