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.

15 Kommentare

  1. Andre K sagt:

    Hallo Eike,
    Dein Blog ist toll….sehr erfrischend! :-)

    Ich habe leider auch solch einen Revision 2 Stick und möchte ihn unter yavdr – was ubuntu ist – einsetzen.
    Leider reichen meine Kenntnisse nicht aus und ich traue es mir nicht zu das ganze unter ubuntu zu kompilieren :-(

    Kennst du eine Anleitung, wie man das unter ubuntu macht?
    Ich habe Angst, dass ich mehr kaputtmache/kompiliere.
    Kannst du mir irgendwie helfen?

    Einen neuen Stick wollte ich nicht kaufen, da er ja eigentlich ganz gut funktionieren sollte.
    Unter MLD funktioniert er auch problemlos, da reicht es die Firmwaredatei einfach an den richtigen Ort zu kopieren.
    Warum reicht das nicht bei ubuntu?

    Viele Grüße,
    Andre

    • Eike Sauer sagt:

      Hallo,

      danke dir!
      Das ganze sollte ziemlich ähnlich auch unter Ubuntu funktionieren. Von Ubuntu gibt es ja auch immer ganz hilfreiche Seiten. Zum Kernel hab ich das hier gefunden:
      http://wiki.ubuntuusers.de/Kernel/Kompilierung
      http://wiki.ubuntuusers.de/Kernelmodule
      Hauptsächlich musst du dich halt trauen. Wenn du ganz auf Nummer sicher gehen willst, könntest du dir ein Stück deiner Festplatte abknapsen (mit gparted) und da eine zweite Ubuntu-Installation aufspielen. Aber ich würd sagen, experimentier einfach, mehr, als dass der Stick hinterher immer noch nicht läuft, kann da kaum passieren.
      Eine andere Möglichkeit wär noch, im MLD-Forum anzufragen…

      Ciao,
      Eike

      • Andre sagt:

        Danke für die Rückmeldung,

        na ja, ich habe halt Angst, dass ich mir die ganze Installation “versemmel” ;-)

        OT: Danke für Permashift “Kopfschüttel – wie kann man nur ohne auskommen?”

        • Eike Sauer sagt:

          Wenn du vorsichtig bist, kann da eigentlich nichts schiefgehen. Kompilieren allein ändert erstmal nichts am System. Das Problem: Wenn du zu vorsichtig bist, wird es wahrscheinlich auch nicht klappen…

  2. Daniel sagt:

    Hi Eike,

    ich wäre auch an der fertigen “dvb-usb-it913x.ko” Datei interessiert. Nachdem sich die Kernel inzwischen deutlich verändert haben ist deine Anleitung leider nicht mehr funktionabel.
    Wäre toll, wenn du die Datei hier online stellen könntest oder mir per Mail schicken.

    Viele Grüße

    Daniel

    • Eike Sauer sagt:

      Hallo Daniel,

      ehrlich gesagt hab ich meine Zweifel, dass das Modul zum alten Kernel mit einem deutlich neueren funktionieren wird, aber probieren kannst du’s ja. Hier liegt es.

      Ciao,
      Eike

    • Paul sagt:

      Hallo Daniel und Eike,

      Ich habe ebenfalls festgestellt, dass die Anpassung der Treiberdatei it913x-fe.c nicht mehr so ohne Weiteres geht. Jedenfalls kann ich im Code keine Angabe mehr finden, die eine Zuordnung des Treibers zum Device festlegt (ich bin allerdings auch Java- und kein Kernel-Entwickler).
      Wie ist es mit dem neuen Treiber möglich, die Zuständigkeit für den Terratec Cinergy T Stick RC Dual Rev2 zu ändern? Ich habe es im Debian Testing mit Kernel 3.13 ausprobiert und der Stick wird leider immernoch falsch erkannt.

      VG Paul

  3. Jochen sagt:

    Hallo Eike,

    mit Deiner Hilfe habe ich es problemlos geschafft, den Stich unter Ubuntu 12.10 zum Laufen zu bekommen. Vielen Dank!

  4. Paul sagt:

    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

    • Eike Sauer sagt:

      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

  5. jelle sagt:

    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

  6. Matze sagt:

    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.

  7. Frank sagt:

    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

    • Eike Sauer sagt:

      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.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.