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:
- Kernel-Quellen 2.6.11, natürlich von
www.kernel.org
- Den neuesten Linux-TV-Treiber, den man kriegen kann.
Den DVB-Treiber der Kernel-Sourcen habe ich nicht zum Leben
erwecken können.
Den gibt es bei www.linuxtv.org.
Spätestens seit der Version 1.1.1 haben die einen CVS-Tree,
aus dem selbst ich mich bedienen konnte, obwohl ich von CVS keinen
blassen Dunst habe. Auf einer der Seiten steht, wie's geht.
Zu finden war's
hier.
cvs -d :pserver:anonymous@linuxtv.org:/cvs/linuxtv co modulename
Dabei ist modulname durch z.B.: dvb-kernel
zu ersetzen.
das kopiert einem den aktuellen CVS-Baum in's aktuelle Verzeichnis ins
Unterverzeichnis dvb-kernel
- Die dvb-apps aus der Download-Section von
Linux-TV.
- Ein Fernseh-Programm, dass MPEG2-Ströme selber decodieren kann,
die Karte tut's nämlich nicht. Ich nehme
MPlayer.
Geduld bitte, die Seite hängt manchmal.
Es hat ziemlich gedauert, bis ich das Konzept verstanden habe.
- Der Treiber besorgt wie gehabt das ganze IO mit der Karte.
- Das Programm szap greift via frontend
auf die Karte zu, stellt einen
Kanal ein, liest den DVB-Stream
und stellt ihn anderen Applikationen via dvr
zur Verfügung.
- MPlayer liest diesen Datenstrom und kann ihn, da MPEG2, decodieren
und darstellen.
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