Projektdokumentation: VDR HD Receiver fuer das HiFi Rack

  • Hi !


    Ich hab mir vorgenommen bis zum VDR-Camp, genauer gesagt bis zum Ende des VDR-Camps einen komplett neuen VDR Rechner aufzubauen. Da ja durchaus auch andere auf diese Idee kommen koennten hab ich mir gedacht, ich Dokumentier die verschiedenen Schritte hier an dieser Stelle, in der Hoffnung, dass aus meinem Leiden ein Anderer vielleicht schlauer wird.


    Dies ist mein Projektziel:
    - Ein VDR mit HD-Faehigkeit.
    - Klein, Leise, Schnell.
    - Kinder, Frau, und Rentnertauglich.
    - Auch als Medienserver/Client nutzbar.


    Diese Hardware habe ich ausgewaehlt:
    Mainboard: MSI P7NGM Digital
    CPU: Celeron Dual Core Processor E1200
    Speicher: 2GB Excelleram PC2-6400
    HD: 8GB Transcend 133x Compact Flash
    HD: 1TB WD RE2 GreenPower Update: Samsung F2 1TB 5400U/min
    Cooler: Arctic Cooling Freezer 7LP Update: ZALMAN VGA Cooler
    Case: Silverstone La Scala SST-LC19B-R - black
    Fernbedienung: Sony PS3 BD Remote Control (bluetooth)
    DVB: Technisat SkyStar HD


    Ich bin mir bewusst, dass man sicher billigere Hardware haette finden koennen, aber wenn man schon mal was von null auf baut, sollte man sich doch auch was goennen, und da es fuer's Wohnzimmer ist muss es auch gewisse estaetische Grundanforderungen erfuellen.


    Ich werde von hier an den Fortschritt chronologisch niederschreiben, es faengt an mit:


    Die letzten zwei Wochen vor Tag 1
    Ich habe begonnen, die Komponenten die noch fehlen, einzukaufen. Das Mainboard war mit 98 Euronen bei K&M hier direkt vor Ort mit am billigsten, den Speicher hatte ich noch rumliegen, und die CPU hab ich gleich auch dort fuer knapp 42 Euro mitgenommen.
    Den CompactFlash-IDE-Adapter und die CompactFlash Karte hab ich bei Amazon bestellt, der Adapter ist nach 3 Tagen da, die Karte laesst auf sich warten.
    Es stellt sich heraus, das die Southbridge auf dem Mainboard doch recht stark erwaermt, ich hatte gehofft, dass ich ohne Luefter auskommen koennte ... schade eigentlich.
    Die CPU ist dagegen prima, der E1200 unterstuetzt den C1E Haltstate und reduziert sich Idle auf 1,2GHz - der CPU-Kuehler - winzig wie er ist - ist immer noch kuehler als die Southbridge.

    Plane gentoo als OS zu nehmen.
    Die Speicherkarte kommt einfach nicht, auf zu K&M - dann hab ich halt eine als Backup.
    Das Gehaeuse entwickelt sich zum Problem, keiner hat es, oder es ist sauteuer.
    Glueck gehabt! Gamersware hat es fuer 169.- Das geht grad noch so - Luefterloses Netzteil ist ja mit drin, kurz nach Miternacht bestellt und mit PayPal bezahlt.
    Pech gehabt, abends kam die Mail, das es nicht ab Lager verfuegbar ist - Liefertermin ? keiner. Mist!


    Tag 1: ein System muss her !
    So, wenn's schon auf die Schnelle kein Gehaeuse gibt, dann muss es halt so auf dem Tisch tun. Als allererstes bereite ich mal die CF Karte vor, wenn da ein System drauf soll, dann muss die Karte erst mal passend vorbereitet werden.
    Eine CF-Karte ist im Normalfall voellig ungeeignet partitioniert fuer die Installation eines Systems. Die Block-Groesse des Flash ist meist 4kB oder ein vielfaches davon. Da aber die ersten 1024 Bytes fuer die Partitions-Tabelle benutzt werden ist ein missalignment vorprogrammiert.
    Eine Moeglichkeit dies zu umschiffen, ist es die Partitionstabelle zu aendern.
    Im Prinzip ist das einfach: Man schreibt sich die Anzahl der Bloecke im Originalzustand nieder, und modifiziert dann im Experten-Menue von fdisk (mit x) die Werte fuer heads, sectors und cylinders. Gute Werte fuer Heads und Sectors sind 128 heads und 32 sectors, (somit sind 2MB in einem Cylinder). Dann Teilt man die Anzahl der vorher aufgeschriebenen Bloecke durch 2048 und bekommt den neuen wert fuer Cylinders. Wenn man jetzt eine neue Partition auf der Platte anlegt ist diese auf jeden Fall alligned.
    So sieht meine Tabelle aus:

    Code
    Disk /dev/sdb: 8019 MB, 8019099648 bytes
    128 heads, 32 sectors/track, 3823 cylinders
    Units = cylinders of 4096 * 512 = 2097152 bytes
    Disk identifier: 0x001c2022
    
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1          31       63472   83  Linux
    /dev/sdb2              32        3823     7766016   83  Linux


    Gentoo soll es werden, damit jedoch auch n Celeron mit nur 512kB Cache so richtig zum Rennen kommt muss da ein bisschen was optimiert werden. Aber erst mal steck ich ne alte Platte an das System und boote n Ubuntu-Live um das Gentoo zu installieren. Im Ubuntu live formatier ich die Platte und lade ein i686 stage3 tar - File runter und einen aktuellen Portage-snapshot. Die Platte mounte ich nach /mnt (als root). Erst wenn fast alles fertig ist werd' ich die CF-Karte benutzen, ist ja zu schade die jetzt schon zu verheizen.
    Gentoo installieren:

    Code
    sudo -i
    mount /dev/sda1 /mnt
    cd /mnt
    tar xvjpf /home/ubuntu/Desktop/stage3-i686-2008.0.tar.bz2
    tar xvjpf /home/ubuntu/Desktop/portage-20090129.tar.bz2 -C usr/


    Mal schnell auf die CPUs schauen, was die so koennen:


    CPU Family ist 6, Modell ist 15, das ist ein core2, bei Flags steht pni, also auch mit sse3.
    Dann sollten wir uns schnellstens einen gcc4.3 zulegen um das auch effektiv nutzen zu koennen.


    Weiter, wir wechseln per chroot ins gentoo:

    Code
    cp /etc/resolv.conf etc
    mount -t proc proc proc
    mount -t sysfs sys sys 
    mount -o bind /dev dev
    chroot . /bin/bash


    Das hier ist wichtig, wir brauchen neue settings fuer unsere chroot-shell:

    Code
    ubuntu / # env-update
    >>> Regenerating /etc/ld.so.cache...
    ubuntu / # source /etc/profile
    ubuntu / # cd
    ubuntu ~ #


    Dann machen wir ein update auf portage (das ist fast nie falsch)

    Code
    emerge --sync
    emerge portage
    etc-update 
    nano /etc/make.conf


    Die make.conf sollte so aussehen:


    Und dann kann man auch schon gcc emergen:

    Code
    mkdir /etc/portage/package.keywords
    echo "=sys-devel/gcc-4.3.2 ~x86" >> /etc/portage/package.keywords/gcc-4.3
    emerge \>gcc-4.3


    Und Aktivieren:

    Code
    gcc-config i686-pc-linux-gnu-4.3.2
    source /etc/profile
    nano /etc/make.conf


    Jetzt kommt die vorerst passende make.conf fuer unser celeron System zum Zug:


    GCC 4.3 kennt die Core2 Architektur, die meisten Optionen in den CFLAGS und LDFLAGS dienen dazu kleineren Code zu erzeugen, denn wir wollen ja mit dem kleinen Cache des Celeron gute Leistungen sehen.
    Mal schauen ob wir schon loslegen koennen:

    Code
    emerge -e world -pv


    Das hat bei mir nicht so geklappt, da waren doch einige bocker drinn.
    Bei mir sah das dann so aus:

    Code
    [ebuild     U ] sys-fs/e2fsprogs-1.41.3 [1.40.8] USE="nls (-static%)" 4,263 kB
    [blocks b     ] <sys-fs/e2fsprogs-1.41 ("<sys-fs/e2fsprogs-1.41" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
    [uninstall    ] sys-libs/com_err-1.40.8  USE="nls" 
    [blocks b     ] sys-libs/com_err ("sys-libs/com_err" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
    [uninstall    ] sys-libs/ss-1.40.8  USE="nls" 
    [blocks b     ] sys-libs/ss ("sys-libs/ss" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)


    Die 'blocker' deintallieren wir einfach fuer jetzt - wir koennen sie nachher mit all den Tools und Libs die gebraucht werden neu installieren.

    Code
    emerge --unmerge com_err ss 
    emerge --unmerge e2fsprogs


    Wenn alles dann ok aussieht koennen wir zum Rundumschlag ansetzen:

    Code
    emerge -e world


    Das baut gentoo komplett neu, und damit wirklich alles nur aus neuem Code besteht, muss das 3 Mal hintereinander gemacht werden, das dauert.


    Und dann war Tag 1 auch schon zu Ende.


    Tag 2: der Kernel
    Ich hab heut viel ueber das glibc-omitfp Useflag nachgedacht, es waere ja schoen wenn das noch ein paar Prozent Leistung bringen wuerde ... und so wie es grad aussieht tut es das auch. Das System erscheint ein Tick flotter zu sein, und der CPU-Fan legt erst viel spaeter los als vorher, dann aber dafuer richtig. Fuer die, die sich wundern, was das fuer ein komisches Useflag ist: glibc-omitfp erlaubt es explizit beim Bauen der glibc dem compiler das -fomit-frame-pointer Flag mitzugeben, was im Allgemeinen zu kleineren Executables fuehrt. (mehr dazu in den gcc Info Seiten) Da der der Celeron Prozessor einen Recht kleinen Cache hat, freut er sich maechtig wenn er da weniger reinzuladen hat.
    Kernel Bauen und Linux installieren. Als erstes holen wir uns einen Kernel und entpacken ihn.

    Code
    cd 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.2.tar.bz2
    cd /usr/src
    tar xvjf /root/linux-2.6.28.2.tar.bz2
    ln -sf linux-2.6.28.2 linux
    cd linux


    Danach muss er nur noch konfiguriert und kompiliert werden. Ich geh' da nur kurz drueber, wenn ich mit meiner Kernel-Config zufrieden bin haeng ich sie hier an.

    Code
    make menuconfig
    make -j2 bzImage
    make -j2 modules
    make -j2 modules_install
    cp arch/i386/boot/bzImage /boot/vmlinuz
    emerge lilo dhcpcd
    nano /etc/lilo.conf


    Die lilo.conf sieht in meinem Fall so aus:

    Und dann noch die /etc/fstab


    Am Schluss noch n Passwort fuer den root-User und dann lilo Aktivieren.

    Code
    passwd
    lilo


    Ende von Tag 2.


    Tag 3: die Tools, Utilities und Treiber
    So langsam faengt das System an Spass zu machen, es wird Zeit, dass es mal was zu tun bekommt. Als aller erstes muessen jetzt mal ein paar Tools drauf, auch der Nvidia X11 Treiber soll jetzt schon mal installiert werden.
    X11 installieren: Um den neuesten beta Treiber zu bekommen demaskieren wir ihn und installieren gleich die wichtigsten Utils mit.


    Code
    echo "x11-drivers/nvidia-drivers ~x86" >> /etc/portage/package.keywords/nvidia-drivers
    emerge  nvidia-drivers
    eselect opengl set nvidia
    cp  /etc/X11/xorg.conf.example /etc/X11/xorg.conf
    nano /etc/X11/xorg.conf


    Das emergen des Treibers und der dazugehoerigen Komponenten dauert ein wenig, danach editieren wir die xorg.conf:


    Als naechstes installiere ich die Bluetooth Utilities, um spaeter die Bluetooth Fernbedienung einbinden zu koennen.

    Code
    emerge  bluez-utils


    Nach einigen Ueberlegungen erwaege ich, einen eigenen Treiber fuer die Sony BD Remote zu schreiben, zumindest ein kleines LIRC daemon Tool, das die Fernbedienung direkt in LIRC einbindet. Das Konzept, fuer sich selten aendernde Konfigurationen eigene Tools zu entwickeln hat sich zumindest bei den zen* Distries als ganz praktisch erwiesen. Ganz abgesehen davon freue ich mich auf eine Fernbedienung, mit der man nicht mehr Zielen muss.


    Ende von Tag 3.


    Tag 4: Kleinigkeiten
    Heute hab ich mich mal um so ein paar Sachen gekuemmert, von denen ich hoffe, dass sie klein bleiben. Das Erste war der Stomverbrauch: Der Kleine Rechner braucht - mit der SkyStar HD drauf, dem CF, der noch nix tut, und der Build-Platte im Idle-Zustand etwa 55Watt. Beim Kernel-Kompilieren geht der Verbrauch bis auf 80Watt hoch. Ich gehe mal davon aus, dass da noch mal so etwa 5 bis 10 Watt dazukommen, wenn ich die DVB Karte richtig in Betrieb nehme, aber das sehen wir dann, wenn es so weit ist. Alternativ ueberlege ich statt dem Celeron E1200 einen Celeron 430 mal zu testen, das koennte dann aber etwas knapp werden fuer unbeschleunigte Video-Wiedergabe.
    Das zweite was klein bleiben sollte ist der Aufwand fuer den Lirc-Treiber fuer die BD Remote. Das sieht soweit auch ganz gut aus, allerdings ist die Doku der Bluetooth-Linux Treiber nicht soooo der Hit. Um spaeter mal xine und mplayer mit vdpau bauen zu koennen hab ich sie schon mal mit allen Voraussetzungen per emerge installiert - das sollte die Basis fuer spaetere Experimente geschaffen haben.

    Xine-lib, Xine-ui, und Mplayer installieren:

    Code
    emerge mplayer xine-ui


    Neuigkeiten gibt es auch vom Gehaeuse: Nachdem drei Tage lang bei Gamersware niemand ans Telefon gegangen ist, und die bei PayPal hinterlegte Nummer nicht angeschlossen war, hab ich jetzt zumindest die telefonische Zusage erhalten, das es am 04.02.2009 bei denen eintrifft, und dann umgehend an mich rausgeht. Die Speicherkarte ist weiterhin verschollen.


    Ende von Tag 4.

  • Tag 5: es hat sich viel getan.
    So'n Mist. Mich hat die Grippewelle voll erwischt - die ganze letzte Woche bin ich auf der Nase gelegen. Dafuer ist der Rest der Hardware eingetrudelt. Mitlerweile geht es wieder ein bisschen, also mach ich mal n wenig weiter.
    Das Angebot an funktionierenden Treibern fuer LIRC und die Sony BD Remote ist fast null, obwohl eigentlich alles bekannt ist, was man bei der Ferbedienung so braucht um sie zu Nutzen ... aber ich hab auch erst mal fast ne Woche gebraucht, um sie mit meinem Projekt-Rechner zu Verbinden - wie es sich herausstellte, uenterstuetzt nicht jeder USB Bluetooth Stick das volle HID-Protokoll.
    Letztendlich konnte ich fast 80% des zenegalircd Treibers benutzen und musste nur noch ein kleines bisschen dazuprogrammieren, um die Tastendruecke der Remote aus den '/dev/hidrawX' Dateien auszulesen. Die Entdeckung der Remote tut schon ganz gut, lediglich das bemerken einer 'verlorenen' Verbindung klappt noch nicht so dolle. Irrsinnigerweise fehlen da auch noch die Interfaces im Kernel, die das leichter machen wuerden.
    Aber zum Testen reicht es schon ganz gut.

    Bluetooth einrichten:
    die /etc/bluetooth/hicd.conf


    Die Mac-Adresse der BD Remote muss natuerlich je nach Ferbedienung angepasst werden.


    /etc/conf.d/bluetooth

    Code
    # Start hidd (allowed values are "true" and "false")
    HIDD_ENABLE=true
    
    
    # Arguments to hidd
    #HIDD_OPTIONS="--master --connect 00:19:C1:23:E8:B1 --server"
    HIDD_OPTIONS="--master --server"


    So wie oben auch, muss das fuer andere FBs angepasst werden, es geht aber auch so, deshalb ist es auskommentiert.
    Problematisch ist noch, dass beim Beenden der Verbindung zwischen Rechner und FB der Kernel 'tschuess' zu FB sagt, was diese dann beim Naechsten mal dazu zwingt sich neu anzumelden (START+ENTER fuer 5 sek. Druecken) - Aber das kann man dem Kernel sicher abgewoehnen, oder jemand findet den Trick FB und PC dauerhaft zu Pairen. Es scheint aber auch zu reichen, die Verbindung einmal herzustellen, und dann den Rechner hart zu re-setten.
    Drueckt man eine Taste auf einer ge-Paired-ten FB sieht man im Kernel log:

    Code
    input: Sony Computer Entertainment Inc BD Remote Control as /devices/pci0000:00/0000:00:04.0/usb3/3-2/3-2:1.0/bluetooth/hci0/hci0:40/input4
    generic-bluetooth 0005:054C:0306.0003: input,hidraw2: BLUETOOTH HID v1.00 Gamepad [Sony Computer Entertainment Inc BD Remote Control] on 00:10:60:29:4C:6B


    Bingo !
    So sehen dann die LIRC Codes der BD Remote aus:


    Ende von Tag 5
    Nachtrag zu Tag 5:
    Der Treiber fuer die BD Remote ist Fertig, die Remote ist auch jetzt permanent mit dem PC gepaart, wenn sich die Fernbedienung mal schlafen legt oder die Verbindung abreist, ist sie nach dem Druecken der Ersten Taste nach 10s wieder benutzbar.
    Es gibt auch wieder eine neue Version der nvidia Treiber. Update war erfolgreich.


    Tag 6: mplayer-vdpau, Sound und Stromverbrauch.


    Zeit den Sound zu konfigurieren. In der Hektik der letzten Tage hatte ich das ganz uebersehen.

    Code
    emerge alsa-utils
    alsamixer
    rc-update add alsasound default


    Ebenso ist es an der Zeit dem guten Stueck mal was richtiges zum tun zu geben. Dafuer bauen wir uns mal den vdpau-beschleunigten mplayer

    Code
    mkdir VDPAU
    emerge subversion
    cd VDPAU
    wget ftp://download.nvidia.com/XFree86/vdpau/mplayer-vdpau-3482714.tar.bz2
    tar xvjf mplayer-vdpau-3482714.tar.bz2
    cd mplayer-vdpau-3482714
    . ./checkout-patch-build.sh


    Das war's schon, jetzt n kleiner Test. Da ich nicht vorhabe einen Window-Manager zu benutzen benutze ich xterm mittels xinit als program-launcher, das spart jede menge Speicher, vor allen Dingen den so wichtigen Grafikkartenspeicher. Ausserdem reduziert es so genanntes OS-Jitter - Die CPU muss sich um nix anderes als den Film kuemmern - gut bei so wenig Cache.

    Code
    xinit /usr/bin/xterm -e "/root/VDPAU/mplayer-vdpau-3482714/mplayer-vdpau/mplayer -vo vdpau -vc ffh264vdpau,ffmpeg12vdpau,ffvc1vdpau,ffwmv3vdpau, ~/Blue_Planet/*.ts  -quiet -fs -aspect 16:9 &> /tmp/vdr.log"


    Was den Stromverbrauch angeht, das Messgeraet pendelt zwischen 51 und 56Watt, laut top ist das System idle (1,5% Last), iotop meldet ~2MB/s Leserate von Platte. Gute Werte - bin zufrieden
    Tag 7: MMS
    Heut kommt mms dran:
    Vorbereitung:

    Code
    emerge imlib2
    emerge  sqlite
    emerge taglib
    emerge inotify-tools 
    emerge commoncpp2 
    emerge libxml2


    Download:

    Code
    mkdir MMS
    cd MMS
    wget http://people.iola.dk/anders/mms-1.1.0-rc9.tar.bz2


    Configure & Compile:

    Code
    ./configure --enable-lirc --enable-tv --enable-weather --enable-clock
    make
    make install
  • Anhang: Bildle
    Heute mal was fuer die Augen, die Optik kommt ganz gut rueber, alles in allem sieht das Geraet sehr schlicht aus.


    Totale offen:


    [Blockierte Grafik: http://www.herrendoerfer.name/stuff/DSC01187.JPG]


    Totale geschlossen mit Ferbedienung:


    [Blockierte Grafik: http://www.herrendoerfer.name/stuff/DSC01196.JPG]


    CPU Luefter, Chipsatz, Speicher


    [Blockierte Grafik: http://www.herrendoerfer.name/stuff/DSC01193.JPG]


    Man sieht hier sehr schoen den aufgeklebten Grafikkarten Luefter. Der eigentlich geplante, passive, liess die Southbridge zu warm werden. Der Luefter ist noch nicht geregelt, dazu muss der Kernel gepatcht werden, denn der Finntec Treiber erlaubt es nicht die Luefter zu programmieren. Aber auch so ist der Luefter kaum zu vernehmen.


    Totale von oben:


    [Blockierte Grafik: http://www.herrendoerfer.name/stuff/DSC01195.JPG]


    Rechts unten ist das abgedeckte passive Netzteil zu sehen - Dieses wird auch nicht sonderlich warm.

  • Zitat

    Originally posted by Funzt
    Ist richtig Toll geworden das Teil - schön flach und nicht so ein Klopper wie die sonstigen VDRs.


    das ist genau der Punkt! Aber ohne Twintuner ist dann wohl nur ein SAT Eingang moeglich. Was wiederum ein Nachteil ist.


    Kompliment auch von mir:tup

  • oder den netceiver

  • Sorry,


    Zitat

    Originally posted by Funzt
    ... nicht, wenn man USB-Tuner wie Opera etc. nimmt.


    Zitat

    Originally posted by Moorviper
    oder den netceiver


    aber externe Hilfsmittel wie USB-Devices, Streaming-Server oder gar externe Netzteile zaehlen hier nicht:)

  • Gefällt mir sehr gut, was du da gemacht hast, und könnte für mich in Zukunft auch als Basis dienen. Das einzige was ich an dem Konzept vermissen würde, wäre ein Display.


    Gruß

  • Sieht klasse aus das Teil. Ich steh auf schlichte Optik. Die CF-Card ist ne gute Idee um die Festplatte bei normalem Fernsehen auszulassen. DVD-Rom kannst ja noch reinbauen ohne die coole Front-Optik zu versauen.


    Und ich dachte mit meinem neuen VDR (90mm Höhe) hätte ich einen der flachesten VDRs. Naja, dafür hat meiner auch nur 45 Euro insgesamt gekostet :wow (aber ohne DVB-Karte und großer Festplatte) und es steckt noch weiteres Bastelpotential drin.


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Zur CPU mal eine Frage, wäre der Intel® Celeron S 430 nicht eventuell besser gewesen? Er hat eine TDP von nur 35W (deiner hat 65W). Oder hat der wieder andere Nachteile, eventuell nicht runtertaktbar?


    // EDIT: gerade gelesen, dass du selbst mit dem Gedanken spielst ihn auszuprobieren. Ich denke, dass er beim Einsatz von vdpau reichen sollte.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!