Bauen eines digitalen Videorecorders (Hauppauge Nova-T, SuSE 9.0, DXR3) ======================================================================= 1. Einleitung 2. Vorbereitungen 3. 1. Einleitung ============= Im folgenden wird das bauen eines digitalen Videorekorders beschrieben. 2. Hardware =========== Als Hardware sind folgende Komponenten benutzt worden: Hauppauge Nova-T Neupreis: 99 Euro DXR3-Hollywood Plus Erhältlich bei ebay für ca. 20-30 Euro Die DXR3 Karte ist aufgrund des MPEG-2 Decoders notwendig, da es im Gegensatz zum DVB-S für das DVB-T keine Full featured Karten (MPEG2 En- und Decoder) erhältlich sind. 3. Software =========== Folgende Software Komponenten sind verwendet worden: Zwingend: SuSE 9.0 mit Kernel 2.4.21-166 VDR 1.3.6 die Digitale Videorecorder Softare VDR-DXR3 Plugin 0.2.2 linuxtv DVB Treiber 1.1.1 ffmpgeg 0.4.8 em8300-0.14 Treiber der DXR3 Karte Optional: Mplayer 1.0pre4 + essential Codecs gxine 0.3.3 grafisches Frontend für den Xine Player linuxtv-dvb-apps 1.1.0 Apllications um die DVB Karte zu testen diverse Plugins Zur Vorbereitung der Installation der verschieden Softwarekomponenten sollte die Ausgabe des Systemlogs in einer Shell mitverfolgt werden. #tail -f /var/log/messages 3.1 SuSE 9.0 Eine arbeitende SuSE Installation wird vorausgesetzt. Es wird der Kernel 2.4.21-166 verwendet. Dies ist nicht der Kernel der Standard Installation sondern durch Online Update von SuSE installiert worden. Der Standardkernel wird aber wohl genauso funktioniern. Es müssen neben der Standardinstallation der SW noch die C/C++ Compiler und Werkzeuge zu installieren und alles für die Kernelentwicklung. Folgende rpms sind von der SuSE CD zu installieren, diese werden von verschiedenen Plugins benötigt: libquicktime-0.9.1 avifile-0.7 mjpegtools-1.6.1 netpbm-10.11.4 sharutils-4.2c libmad id3lib libboggdevel libvorbisdevel mpg123 Die Kernelsourcen werden von den dxr3- und dvb-Treibern während des kompilieren benötigt. Zum Vorbereiten der Kernelsourcen sind folgende Schritte notwendig: >cd /usr/src/linux #make cloneconfig #make dep Nun steht der Kernel für das Erstellen der Treibermodule bereit. 3.1 Firmware der Nova-T Die aktuelle Firmware der Nova-T ist 2.17. Diese wird nicht von der hier verwendeten linuxtv Treiber unterstützt. Somit wurde die letzte Firmware Version 2.16 von www.hauppauge.de heruntergeladen extrahiert und verwendet. Die Firmware muss in folgendes Verzeichnis kopiert werden, das erst noch angelegt werden muss: #mkdirhier /usr/lib/hotplug/firmware #cp tda1004x.bin /usr/lib/hotplug/firmware/ 3.2 LinuxTV DVB Treiber Die aktuellen DVB Treiber der SuSE 9.0 Distribution funktionieren nicht mit der Hauppauge Nova-T. Somit sind die aktuellen Treiber von www.linuxtv.org zu kompilieren. In diesem Fall die Version 1.1.1 (linuxtv-dvb-1.1.1.tar.bz2). >tar xjf linuxtv-dvb-1.1.1.tar.bz2 >cd linuxtv-dvb-1.1.1 #./configure #make #cd build-2.4 In dem build-2.4 befinden sich jetzt die Treiber aller gängigen DVB-Karten. Mit dem hier liegenden Skript insmod.sh sind die Treiber zu installieren und die links im device filesystem anzulegen. #./MAKEDEV-DVB.sh (nur einmalig nötig) #./insmod.sh reload Hierbei werden alle vorhandenen Treiber im Streuschussverfahren installiert. Dies führt zu einigen Fehlermeldungen, da ja nur eine DVB-Karte vorhanden ist. Es sollten aber auch Erfolgsmeldungen im Systemlog zu lesen sein. Bei mir zeigt der Systemlog folgenden Text: linux kernel: saa7146: register extension 'dvb'. linux kernel: saa7146: register extension 'budget dvb'. linux kernel: saa7146: register extension 'budget_ci dvb'. linux kernel: saa7146: found saa7146 @ mem d2a74c00 (revision 1, irq 10) (0x13c2,0x1011). linux kernel: DVB: registering new adapter (TT-Budget/WinTV-NOVA-T PCI). linux kernel: bt878 find by dvb adap: checking "TT-Budget/WinTV-NOVA-T PCI" linux kernel: bt878 find by dvb adap: NOT found "TT-Budget/WinTV-NOVA-T PCI" linux kernel: ISO 9660 Extensions: RRIP_1991A linux kernel: tda1004x: Detected Philips TDA10045H. linux kernel: tda1004x: Detected Philips TD1316 tuner. linux kernel: DVB: registering frontend 0:0 (Philips TDA10045H)... linux kernel: TT-Budget/WinTV-NOVA-T PCI adapter 0 has MAC addr = 00:d0:5c:23:10:80 linux kernel: saa7146: register extension 'budget dvb /w video in'. Ist kein Frontend registriert worden, so ist nach der Fehlerursache zu suchen, bevor man fortfährt. Eine detailliertere Beschreibung ist unter http://www.ethics-gradient.net/myth/mythdvb.html zu finden. Das erste Kapitel dises Links ist sehr empfehlenswert. 3.3 Mplayer Mittels des Mplayers ist ein erstes DVB-T Bild auf dem PC-Monitor zu empfangen. Hierzu muss der Mplayer wie folgt mit seinen Codecs installiert werden. Erst das installieren der Codecs: >tar xjf essential-20040427.tar.bz2 #mkdir /usr/local/lib/codecs #cp ./essential-2004042/* /usr/local/lib/codecs Nun kann der Mplayer kompiliert werden. Mit den Plugins für DVB und die hoffentlich später erfolgreich installierte DXR3 Karte. >tar xjf MPlayer-1.0pre4.tar.bz2 #cd MPlayer-1.0pre4/ #./configure --enable-dvb --enable-dxr3 #make #make install Im Verzeichnis .mplayer ist nun für den DVB Betrieb eine channels.conf abzulegen, diese ist von der Syntax anders als die die später für den VDR verwendet wird. Eine channels.conf für Hannover ist im mplayer Directory der CD zu finden. >cp channels.conf /home//.mplayer/ Nun kann ein erster Blick auf einen DVB-T Kanal geworfen werden. >mplayer dvb://ProSieben Ist ein Bild da aber der Ton schlecht, so liegt das an der mp3lib von SuSE. Diesem Fehler ist Abhilfe zu schaffen indem man eine andere mpg3 library verwendet. Workaround: Kopieren der codecs.conf der CD in das /home//.mplayer Verzeichnis. 3.4 ffmpeg Die ffmpeg Tools werden von den dxr3 Treibern benötigt. Somit sind diese zu installieren. Die kompilierten Pakete dazu sind auf folgender Seite zu finden: http://packman.links2linux.de/ #rpm -i lame-3.95.1-pm.1.i586.rpm #rpm -i libffmpeg0-0.4.8-0.pm.2.i586.rpm #rpm -i imlib2-1.1.0-31.i586.rpm #rpm -i ffmpeg-0.4.8-0.pm.2.i586.rpm #rpm -i libffmpeg0-devel-0.4.8-0.pm.2.i586.rpm 3.5 dxr3 Treiber Module >tar xzf em8300-0.14.0.tar.gz >cd em8300-0.14 zuerst sind ein paar Tools zu kompilieren und zu installieren: >./configure >make #make install Nun können die eigentlichen Kernelmodule kompiliert werden. >cd modules >make Die Firmware der dxr3 Karte muss umkopiert werden: #cp em8300.uc /usr/share/misc Die device files sind anzulegen. Ein Skript dazu ist in dem modules Verzeichnis #./devices.sh Nun können die Kernelmodule geladen werden (syslog beachten). Dazu steht in dem modules Verzeichnis ebenfalls ein Skript zur Verfügung. #./ldm Im systemlog ist bei mir folgende Ausgabe zu lesen: kernel: i2c-core.o: i2c core module version 2.8.0 (20030714) kernel: em8300: EM8300 8300 (rev 2) bus: 0, devfn: 72, irq: 10, memory: 0xdff00000. kernel: em8300: mapped-memory at 0xd10aa000 kernel: em8300: using MTRR kernel: em8300: 1 EM8300 card(s) found. kernel: em8300_main.o: Chip revision: 2 kernel: adv717x.o: ADV7170 chip detected kernel: adv717x.o: Configuring for PAL 60 kernel: adv717x.o: Configuring for PAL kernel: em8300_audio.o: Analog audio enabled Laden der Firmware: >em8300setup (Vorsicht das Programm liegt unter /usr/local/bin und root findet es nicht ohne Pfadangabe => als normaler User ausführen) Dies führt in der Konsole zu folgender Ausgabe: Microcode uploaded to /dev/em8300-0 Current settings are: Video Aspect Audio Spu PAL 4:3 ANALOG OFF Nun kann die dxr3 Karte getestet werden. Zum testen des Sounds: mpg123 -a /dev/em8300_ma somegoodtestmusic.mp3 Zum Testen des Videobildes: extract_mpeg2 testvideostream.mpeg > /dev/em8300_mv Oder mit Hilfe des mplayers: >mplayer -ao oss:/dev/em8300_ma-0 -vo dxr3:prebuf:sync Ist kein Sound zu hören, oder kein Video zu sehen sind auf folgender Seite nähere Informationen zu bekommen: http://dxr3.sourceforge.net/howto.html Anmerkung: Es ist nicht unwarscheinlich, das beim ersten Start der Bildschirm grün eingefärbt ist. Das ist ein bekanntes Problem für das es keine Standardlösung gibt, sondern nur durch mitgabe von verschiedenen Modulparametern beim Starten der Kernelmodule der dxr3. Vorgehen: Entfernen der Module #./rmm Editieren des Skripts ldm (genau die dxr3 Homepage zu diesem Problem beachten) #./ldm Hier muss eventuell länger experimentiert werden, bis das Bild einwandfrei ist. 3.6 Das VDR Programm mit dxr3 Plugin >tar xjf vdr-1.3.6.tar.bz2 >tar xzf vdr-dxr3-0.2.2.tgz Das Plugin ist in das vdr Verziechnis kopiert und ein Link angelegt werden: >mv dxr3-0.2.2 vdr-1.2.6/PLUGINS/src >cd vdr-1.2.6/PLUGINS/src >ln -s dxr3-0.2.2 dxr3 Nun ist ein der Pfad der avcodec.h datei (gehört zu ffmpeg) im File dxr3audiodecoder.h anzupassen. >cd dxr3 Öffnen der Datei und folgende Zeile auskommentieren: dxr3audiodecoder.h: #include "libavcodec/avcodec.h" und durch folgende ersetzen: dxr3audiodecoder.h: #include "/usr/include/ffmpeg/avcodec.h" Wechseln in das vdr-1.3.6 Verzeichnis: >cd ../../.. Nun ist der VDR zu komilieren: >make oder wenn eine Fernbedienung am seriellen Port verwendet werden soll: >make REMOTE=LIRC (dazu ist aber eine funktionierende und eingerichtete Fernbedienung nötig) Anmerkung: Mit der Option NO_KBD=1 kann die Steuerung durchs Keybord abgeschaltet werden) Nun sind noch die Plugins zu kompilieren: >make plugins Vor dem Start des VDR sind noch ein paar Vorbereitungen notwendig. Anlegen eines video Verzeichnisses: Der VDR benötigt ein Videoverzeichnis, in welches er seine Aufnahmen ablegt. Diese sollte auf keinen Fall auf der Root-Partition liegen. Es sollte eine Partition für daten in der Installation angelegt worden sein. >cd / #ln -s video #chown video #chgrp users video Anlegen eines Verzeichnises für die VDR Konfigurationsdateien: #mkdir /etc/vdr hier ist nun eine funktionierende channels.conf Datei abzulegen. In dieser Datei sind die Senderfrequenzen der 16 verfügbaren Kanäle für DVB-T konfiguriert. Eine channels.conf Datei für Hannover ist der CD beigelegt. In einer anderen Stadt ist im Internet nach einer passenden zu suche oder über ein dvb scan Programm zu ermitteln. #cp channels.conf /etc/vdr #cp sources.conf /etc/vdr Nun kann der VDR gestartet werden: #cd vdr-1.2.6 #./vdr -Pdxr3 -c /etc/vdr 4 Integration einer Fernbedienung ============================= Der Infrarotempfänger der Nova-T Karte wird wohl auch unterstützt. Ich habe ihn aber nicht zum laufen gebracht. Abhilfe und eine universelle, für andere Programme auch verwendbare Lösung ist das nutzen des lirc Dämons von SuSE-9.0 mit einem eigenen Infrarotempfänger an einer seriellen Schnittstelle. Die FB der Nova-T kann dann verwendet werden, allerdings auch jede andere Standardfernbedienung. 4.1 Hardware Eine einfache Bauanleitung ist unter: http://www.linux-user.de/ausgabe/2001/12/060-vdr-2/vdr-2.html 4.2 Software Konfiguration Ist der IR-Empfänger an COM1 so ist die Konfiguration wiefolgt: #setserial /dev/ttyS0 uart none #insmod /lib/modules//misc/lirc_serial.o Nun muss eine Datei lirc.conf angelegt werden. Dies geschieht mit dem Programm irrecord #irrecord Sind alle Tasten angelernt, so kann der lirc Daemon gestartet werden: #/usr/sbin/lircd Nun muss beim neustarten des VDR ein Menu auf dem OSD erscheinen, das die Tasten der FB den Funktionen des VDR anpasst. 5 NVRAM-Wakeup ============== Um die Timerprogrammierung nutzen zu können, muss das MotherBoard über eine Weckfunktion verfügen, z.B. über ACPI. Ist dieses gegeben so kann über das Programm nvram-wakeup diese Weckfunktion im nvram programmiert werden. Mit dem Program nvram-wakeup kann man Auchwachzeiten in das nvram des MotherBoards kopieren. >tar xjf nvram-wakeup-0.96.tar.bz2 >cd nvram-wakeup >make #make install Dieses Programm benötigt eine Datei Namens nvram-wakeup.conf für das verwendete Motherboard, diese findet man für gängige Motherboards im Internet. Falls keine Datei gefunden wurde verfügt das Programm über die Möglichkeit die Daten für das eigene nvram zu ermitteln (siehe README.mb). Des weiteren ist das README.reboot genau zu lesen. Evtl. muss nach erfolgreichen schreiben des NVRAMs das BIOS kurz gebootet werden, bis die Weckfunktion wirklich übernommen wird. Somit muss nach einer Timerprogrammierung des VDR der Computer kurz gebootet werden, bevor er sich abschaltet. 5.1 Lilo Verschiedene Möglichkeiten gibt es, den Lilo zum Reboot mit anschliessenden PowerDown zu nutzen. Ich habe folgende verwendet: In /etc/lilo.conf sind folgende anpassungen zu machen: image = /boot/vmlinuz label=PowerOff initrd = /boot/initrd root=/dev/ append = "0" Nun muss lilo einmalig aufgerufen werden: #lilo 6 Einrichten des VDR Wenn nun der vdr als Program mit Fernbedienung einwandfrei läuft, so sind noch einige Anpassungen zu machen, damit der vdr auch automatisch läuft und sich beendet. Dieses Einrichten kann durch viele unterschiedliche Wege gelöst werden. 6.1 Einrichten der Kernelmodule Damit die Kernelmodule und Firmware der Nova-T, der dxr3 und vom lirc automatisch geladen ist wiefolgt möglich. Kopieren der Nova-T und DXR3 Module nach /lib/modules/_self/dvb/ und /lib/modules/_self/em_8300/ . Nun muss für diese und die Fernbedienung jeweils ein Skript zu schreiben das die Schritte der Initialisierung automatisiert. Die drei Skripts sind auf evtl. eigene Pfade anzupassen, zu testen und nach /etc/init.d/ zu kopieren (Anmerkung: evtl. existiert schon ein Skript für lirc und dvb im /etc/init.d Verzeichnis, diese sind dann vorher an einen sicheren Ort zu kopieren). Nun erscheinen diese im RunLevelEditor vom Yast und sind aktiv zu schalten. 6.2 Einrichten von runvdr Das Programm runvdr muss folgendes leisten: - starten des VDR mit den gewünschten Plugins - bei Problemen die DVB und DXR3 Treiber neu laden und VDR neu starten - Aufruf vom skript vdr-shutdown beim beenden über die FB 6.3 Plugins Für den VDR stehen verschiedene Plugins zur Verfügung. Ich verwende: mp3/mplayer osdteletext graphlcd (für das grafische LCD) image (zum Darstellen von Fotos aud dem Fernseher)