DVB-S unter Linux

DVB-S unter Linux


Digitales Satellitenfernsehen mit Linux (Kernel 2.6.9) und einer Terratec Cinergy 1200 DVB-S

Das war ein K(r)ampf ...
Eine Anleitung soll dies nicht sein, es ist eher ein Bericht, wie ich meine Karte zum Leben erweckt habe. Wenn Du dir diesen Kampf ersparen willst, versuch's doch auch mal so, aber steinige mich nicht, wenn's nicht auf Anhieb klappt. Du besorgst Dir: Es hat ziemlich gedauert, bis ich das Konzept verstanden habe. Der Treiber von Linux-TV muss in die Kernel.Sourcen eingepasst werden, das "ubernimmt das Skript makelinks. Dann wird wie gehabt der Kernel Nun wird ein Kernel gebacken. Der braucht unter
Device Drivers / Multimedia devices anscheinend die Unterstützung für Video4Linux. Unter Device Drivers / Multimedia devices / DVB Devices die Unterstützung für DVB for Linux. Ob als Modul oder fest verdrahtet, ist egal. Den ganzen Rest (DVB-Core usw.) lassen wir weg, dafür haben wir uns ja die Treiber von Linux-TV besorgt. Dieser Kernel wird gebootet und gegebenenfalls das DVB-Modul geladen. Der Treiber wird erzeugt, indem man ins Verzeichnis dvb-kernel steigt und den ganzen Vorgang mit make startet. Bei wir waren keinerlei Anpassungen notwendig. Die Kernel-Module, die dann im Verzeichnis build-2.6 liegen, habe ich alle in ein separates Verzeichnis verschoben (keine Lust zum Sortieren). In nicht-brandaktuellen Distributionen sind teilweise keine Devices /dev/dvb vorhanden oder sie haben die falsche Major-Nummer. die wurde im Laufe 2004 von 250 auf 212 geändert. Im Verzeichnis dvb-kernel ist ein Skript MAKEDEV-DVB.sh, das diese Dateien anlegt. Man sollte das Skript aber vorher in den Editor der Wahl (vi natürlich) laden und sicherstellen, dass auch die Major-Nummer 212 verwendet wird. Gegebenenfalls muss man das per Hand ändern. Dann lässt Du das Skript als root laufen und prüfst, ob die Dateien auch angelegt wurden. Die Module werden dann beim Systemstart mit einem Winz-Skript geladen.

#!/bin/bash
cd /local/modules
insmod dvb-core.ko
insmod /lib/modules/2.6.9/kernel/drivers/media/video/video-buf.ko
insmod saa7146.ko
insmod saa7146_vv.ko
insmod ttpci-eeprom.ko
insmod budget-core.ko
insmod l64781.ko
insmod ves1820.ko
insmod stv0299.ko
insmod tda8083.ko
insmod ves1x93.ko
insmod tda1004x.ko
insmod tda10021.ko
insmod budget-av.ko
exit 0


Meine Terratec hat einen Chip drauf, auf dem steht STV0299B und einen weiteren mit der Kennung SAA7146. Daher diese Auswahl. Beim Herumgooglen fand ich irgendwo die Bemekung, dass die Cinergy mit dem Treiber für Karten mit zusätzlichem analogem Eingang betrieben werden muss. Keine Ahnung warum, aber mit dem Treiber budget.ko geht es tatsächlich nicht. Egal. Endlich meldet sich die Karte. Üblicherweise in /var/log/messages taucht nun so was auf:

kernel: saa7146: found saa7146 @ mem d0868000 (revision 1, irq 10) (0x153b,0x1154).
kernel: DVB: registering new adapter (TerraTec Cinergy 1200 DVB-S).
kernel: adapter failed MAC signature check
kernel: encoded MAC from EEPROM was ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff
kernel: KNC1-0: MAC addr = ni:ch:tw:ic:ht:ig
kernel: DVB: registering frontend 0 (ST STV0299 DVB-S)...


Nun werden dvb-apps ausgepackt und erzeugt. Aus diesem ganzen Satz sind zwei Datein schlussendlich wichtig. szap und channels.conf-dvbs-astra. szap kopiert man sich irgendwohin, wo sich Binaries tummeln, z.B. /usr/local/bin. Die Datei channels.conf-dvbs-astra wandert nach $HOME/.szap/channels.conf.

Zum Schluss wird noch MPlayer übersetzt, das ist ein Thema für sich. Ich gehe mal davon aus, dass es nun in ausreichend neuer Form vorliegt. Nun starten man szap und lässt es laufen. Beendet es sich, versiegt auch der DVB-Stream. Dann kann MPlayer gestartet werden. Welche Schalter man MPlayer mitgeben will, bleibt jedem selbst überlassen. nachdem MPlayer beendet wurde, sollte man auch szap wieder beenden. Das ganze findet bei mir natürlich wieder in einem kleinen Skript names dvb-tv statt.

#!/bin/bash
if [ "$1" = "" ]; then
echo "USAGE : $0 channel"
exit 0
fi
if [ "`grep $1 ~/.szap/channels.conf`" = "" ]; then
echo "Unknown channel : $1"
exit 0
fi
/local/bin/szap $1 -r > /dev/null &
/local/mplayer-1.0pre5/bin/mplayer -vo x11 -zoom -vf scale=800:600 - < /dev/dvb/adapter0/dvr0
killall szap
exit 0


Die Sportschau kann man dann am Samstag mit dvb-tv ARD anschauen. Wie die Sender heissen, steht am Anfang einer jeden Zeile in channels.conf. Auf meinem AthlonXP2200+ mit einer (alten PCI-) RIVA128-GraKa läuft das richtig rund, ausser, dass der Ton nicht synchron zum Bild läuft, aber das kann man im MPlayer selbst korrigieren.

Viel Spaß
Weiter zu Edgars Heimatseite
last modified : Mo Mai 23 20:13:10 CEST 2005