Terratec Cinergy T Stick Dual RC (Revision 2)


Short summary for those who do not understand German: Terratec changed the chips in their product Cinergy T Stick Dual RC without changing its device id. A viable workaround is changing the list of supported ids in the kernel module of the new chip and forcing it to be loaded early. Of course this breaks support for the old revision. I wrote up step-by-step instructions for those who feel uncomfortable with changing and compiling kernel stuff.

Ehrlich gesagt war ich latent ein klitze-kleines bisschen enttäuscht, als mein VDR soweit fertig war. Ok, ein Stück weit war die Freude durch den schlechten Empfang des DVB-T-Sticks mit seiner Mini-Antenne getrübt. Kucken, Aufnehmen, Abspielen macht halt nicht mal halb so viel Spaß, wenn das Bild Blöckchen zeigt und der Ton stottert. Aber das lässt sich ja durch einen neuen Empfänger richten, der den passenden Anschluss für meine Antenne hat. Der alte war nur geliehen, und ich brauche so oder so einen zweiten DVB-T-Empfänger, auf dass man gleichzeitig ein Programm aufnehmen und ein beliebiges anderes ansehen kann. Also kommt ein Twin-Tuner (zwei Empfänger in einem) ins Haus. Terratec kümmert sich anscheinend vorbildlich um die Lauffähigkeit seiner Produkte unter Linux, das werd’ ich unterstützen und mir den Terratec Cinergy T Stick Dual RC zulegen.

Diesen Absatz hatte ich gestern geschrieben. (Eigentlich ist es die Vorgeschichte zu den Plugins von VDR, die ihn um viele Funktionen erweitern.) Nach dem Schreiben bin ich frohen Mutes in den Computer-Laden meines Vertrauens gegangen. Es kam anders als gedacht.

Ich habe den Terratec-Stick gekauft (31,80 Euro), stolz der tollsten Frau vonne Welt gezeigt, ihn eingebaut, an die gute alte DVB-T-Antenne angeschlossen (er hat im Gegensatz zum Cinergy T USB XXS einen Antennenanschluss in normaler Größe), den VDR eingeschaltet, und… nichts. Nur schwarz.

Googeln brachte ziemlich schnell diesen Thread zutage. (Warum hab ich den nicht vor dem Kauf gefunden?!?) Es gibt eine neue Revision des USB-Sticks, der einen anderen Chip verwendet und dementsprechend einen anderen Treiber benötigt. Der Hersteller hat die interne Geräte-Nummer aber nicht geändert, der Stick meldet sich nach der Eingabe von lsusb weiterhin als “0ccd:0099 TerraTec Electronic GmbH AfaTech 9015 [Cinergy T Stick Dual]“. So wird vom Kernel der Treiber für die alten Hardware, AfaTech 9015, geladen. Tatsächlich stecken aber die Chips it9133 und it9137 drin.

Im Thread entwickelt der Fragesteller dankenswerterweise auch gleich die Lösung, wenn auch nur im “Blindflug”, wie er es nennt, und dadurch nicht hundertprozentig korrekt. Es hat aber dazu geführt, dass ich gestern am späten Abend noch ein Bild bekommen habe. Nachdem ich zum ersten Mal seit ich weiß nicht wievielen Jahren wieder am Kernel herumkompiliert hatte.

Was tun?

Anmerkung: Die folgende Anleitung bezieht sich auf Debian. Ubuntu ist in weiten Bereichen wie Debian – aber die Auswahl und Namen der Kernel-Pakete gehört nicht dazu. Falls jemand Tipps hat, wie man bei Ubuntu zu einem aktuelleren Kernel kommt, oder falls jemand mit einem Kernel 3.3 oder älter zum Ziel gekommen ist, würde ich mich über Hinweise freuen. (Ich freue mich eh über alle Kommentare.)

Man benötigt zuerst die Kernel-Quellen. Ich nehme hier den Kernel 3.4 als Beispiel. Den habe ich verwendet, obwohl er noch in Debian “experimental” ist, weil jemand im Thread schreibt, dass die Änderung beim Kernel 3.2 nicht funktioniert hätte – und weil mir der aktuellste Kernel 3.5 aus “experimental” mehrfach abgestürzt ist. (Frank (siehe Kommentar) ist aber auch mit einem 3.2er-Kernel zum Ziel gekommen.) Die Quellen müssen aber zum verwendeten Kernel passen (uname -r verrät’s); gegebenenfalls kann man sich vorher einen neuen Kernel installieren.

Die Quellen zum Kernel kann man per

apt-get install linux-source-3.4

bekommen. Alles, was zum Bauen benötigt wird, sollten einem der folgende Befehl liefern:

apt-get build-dep linux

Die Quellen müssen entpackt werden…

cd /usr/src/
tar jxf linux-source-3.4.tar.bz2
cd linux-source-3.4

Die Konfiguration nimmt man sich vom aktuellen Kernel. Wir wollen ja schließlich nur ein Modul ändern.

cp /boot/config-`uname -r` /usr/src/linux-source-3.4/.config

“`uname -r`” (Die speziellen Anführungszeichen beachten: Das ist von den Accent-Zeichen rechts neben der ß-Taste das obere. Je nach Tastatureinstellung erscheint das Zeichen erst, wenn man die Taste zweimal gedrückt hat.) wird automatisch durch die Kernel-Version ersetzt, in meinem Falle “3.4-trunk-amd64″. Ich weiß nicht, ob das in jedem Falle klappt; im Zweifel sollte man lieber nachschauen, wie die Datei heißt, und diesen Namen nehmen.

Außerdem brauchen wir die Modul-Versions-Dingenskirchens-Datei. Ist ja klar. Steht ja da. Das hab ich aber erst herausbekommen, als der erste Versuch nach ewigen Kompilieren schiefgegangen war.

cp /usr/src/linux-headers-`uname -r`/Module.symvers /usr/src/linux-source-3.4/

Welche der folgenden Vorbereitungen nötig sind, weiß ich nicht. Aber sie gehen schnell…

make clean
make prepare
make scripts

Nun kommen wir zur eigentlichen Änderung. Die Datei drivers/media/dvb/dvb-usb/it913x.c muss angepasst werden.

Darin findet sich eine Zeile, die ungefähr wie folgt aussieht:

{ USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135) },

Die kann man ersetzen oder auch ergänzen um folgenden Text:

{ USB_DEVICE(USB_VID_TERRATEC,USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC) },

So “weiß” der Treiber, dass er nun auch für den Cinergy T Stick Dual zuständig ist.

Dann geht es ans Kompilieren. Wir müsssen zum Glück nicht alle Module bauen (und solange mit dem Hund dreimal um die Stadt spazieren). Man kann gezielt nur die USB-DVB-Module bauen, das geht dann selbst auf einem schwachbrüstigen Celeron mit USB-2-Festplatte flott:

make M=drivers/media/dvb/dvb-usb

Nun können wir den manipulierten Treiber an die richtige Stelle bugsieren und den Kernel auffordern, die Module nochmal durchzuschauen.

cp drivers/media/dvb/dvb-usb/dvb-usb-it913x.ko /lib/modules/`uname -r`/kernel/drivers/media/dvb/dvb-usb/
depmod

Dann muss noch der binäre Teil der Firmware besorgt und an die richtige Stelle gebracht werden.

/usr/src/linux-source-3.4/Documentation/dvb/get_dvb_firmware it9135
mv dvb-usb-it9135-*.fw /lib/firmware/
mv dvb-usb-it91*.fw /lib/firmware/

Und zu guter letzt sorgen wir dafür, dass unser Kernel-Modul früh geladen wird – insbesondere vor dem für den Chip, der früher in diesem USB-Stick war und der sich ja auch für dessen Ansteuerung verantwortlich fühlen würde. Dafür tragen wir in /etc/modules die Zeile “dvb-usb-it913x” ein.

Reboot.

Das war’s.

,

  1. #1 von Frank am 17. August 2012

    Hallo Eike,

    verständlich geschrieben(auch Dein kleines aber feines Blog!) und es scheint einfach zu sein, doch ich (ebenfalls stolzentäuschter Besitzer einer Rev.2) bekomme es einfach nicht hin. Bin halt ein StinoLinuxUser. Und so läuft der Stick leider nur unter Windoof, das ich ansonsten kaum nutze. Ich hatte ebenfalls nichts vomRevisionswechsel des Terratec Cinergy T Stick Dual RC mitbekommen.

    Und so komme ich zu meiner etwas gewagten Bitte an Dich:

    Ist es Dir eventuell möglich, dass Du ein vorkompiliertes Linux-Iso (Ubuntu o. Debian) zur Verfügung (per Dropboxlink an meine E-Mail) stellst? Oder fällt Dir eine andere praktikable Lösung ein? Wenn ja, würde es mich sehr freuen.

    Sonnige Grüße aus Berlin
    Frank

    • #2 von Eike Sauer am 27. August 2012

      Damit es nicht so aussieht, als würde ich nicht auf Kommentare reagieren:
      Ich war zwei Wochen im Urlaub und versuche jetzt per Mail, mit Frank zum Ziel zu kommen.

  2. #3 von Matze am 20. Oktober 2012

    Danke für Deinen Artikel. Bin in die selbe Falle gelaufen…

    Ich habe versucht, Deinen Erkenntnisse auf linuxtv.org/wiki einzutragen, leider habe ich aber zu wenig Rechte.

  3. #4 von jelle am 23. Oktober 2012

    is it also possible to make a patch for the v4l-dvb git packages ?
    As i want to use that package and insert the patch into the backports dir.

    Kind regards,
    Jelle

  4. #6 von Paul am 31. Oktober 2012

    Hallo Eike,

    Dank Deiner Anleitung lief der Terratec Cinergy T Stick Dual bei mir einige Zeit ziemlich gut (leider stürtzte er am Stream-Ende manchmal ab). Dabei habe ich mir allerdings keinen neuen Kernel compiliert, sonder das v4l-Projekt genutzt und dort it913x.c (entsprechend Deiner Anleitung) und af9015.c (entsprechende Zeile auskommentiert) angepasst. Das war toll und einfach und … funktionierte.

    Leider gibt es von v4l inzwischen eine neue Version, in welcher it913x.c nun it913x-fe.c heisst, GANZ anders aussieht und nicht mehr so einfach anzupassen ist. Insbesondere habe ich die von Dir genannten Zeilen überhaupt nicht mehr finden können.

    Kannst Du bitte ggf. dort mal reinschauen und eine Anleitung zur Anpassung geben? Egal ob man nun das v4l-Projekt nutzt oder einen eigenen Kernel baut … auch dort wird der neue Treiber sicher bald einfließen.

    Ich bedanke mich sehr!
    Paul

    • #7 von Eike Sauer am 31. Oktober 2012

      Hallo Paul,

      ich hab mir grad mal v4l-dvb heruntergeladen (die neuste Version, frisch von gestern). Kann es sein, dass du nur an der falschen Stelle geschaut hast?
      Da gibt’s zwar ein drivers/media/dvb-frontends/it913x-fe.c, aber auch eine Datei drivers/media/usb/dvb-usb-v2/it913x.c – und da finden sich die DVB_USB_DEVICE-Einträge noch…

      Ciao,
      Eike

(wird nicht veröffentlicht)

  1. Bisher keine Trackbacks.