OpenSUSE VDR DVB-S2 - Teil2.1: eHD

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Vorbereitungen

OS Systempakete installieren

yast > Software > Software Management >
      (Software > Software installieren oder löschen >)

- tftp
- yast2-tftp-server

Downloadverzeichnis erstellen

cd /data/installfiles/
mkdir eHD

Installationsverzeichnis erstellen

cd /usr/local/src/
mkdir -p eHD/hdplayer

Reelbox SVN (Installationspakete) für die eHD herunterladen

Nachdem die eHD Pakete heruntergeladen wurden wird eine Revisionsnummer angezeigt. Diese wird im nächten Schritt verwendet.

cd /data/installfiles/eHD/
svn co svn://reelbox.org/testing/src/utils/bspshm
svn co svn://reelbox.org/testing/src/utils/hdshm3
svn co svn://reelbox.org/precompiled

Backup Reelbox SVN

Nach dem herunterladen der Software werden Backups von den Versionen erstellt. Somit kann man im Fehlerfall auf das Backup zurückgreifen. Die oben angezeigte Revisionsnummer sollte in die Backupdateien mit aufgenommen werden. Hier die Beispiele:

cd /data/installfiles/eHD/
tar -czf bspshm-<Revisionsummner>.tar.gz bspshm/
tar -czf bspshm-rev13070.tar.gz bspshm/
tar -czf hdshm3-rev13070.tar.gz hdshm3/
tar -czf precompiled-rev13070.tar.gz precompiled/

Konfiguration tftp-Server

Da die eHD Karte ihre Playersoftware (hdplayer) per TFTP lädt, muss dieser vorher konfiguriert werden. Das hat den Vorteil, dass der hdplayer dadurch sehr einfach aktualisiert werden kann.

yast > Network Services > TFTP Server > Enable >
Boot Image Directory: /usr/local/src/eHD
check: Open Port in Firewall
> Ok

Achtung! Bitte prüft unbedingt auf der Firewall, ob der Port tatsächlich freigeschaltet wurde. Obwohl ich oben bereits ausgewählt habe, dass der Port geöffnet werden soll, wird er nicht eingetragen. Falls Ihr das gleiche Problem habt, tragt Ihn einfach manuell in der Firewall ein.

yast > Security and Users > Firewall > Allowed Services > Advanced
      (Sicherheit und Benutzer > Firewall > Erlaubte Dienste > Erweitert)
UDP Ports: 69
> Ok > Next > Finish

Installation eHD

Test der eHD Hardware

Nachdem die eHD eingebaut ist sollte man einen Test machen ob die Karte richtig erkannt wurde. Achtung! Falls die Karte nicht wie unten beschrieben angezeigt wird gegebenfalls mal den PCI Slot wechseln und danach nochmals testen.

lspci -v
 
01:08.0 Multimedia controller: Micronas USA, Inc. Device 8100
	Subsystem: Micronas USA, Inc. Device 8100
	Flags: bus master, medium devsel, latency 32, IRQ 5
	Memory at e7fff000 (32-bit, non-prefetchable) [size=4K]
	Memory at d8000000 (32-bit, non-prefetchable) [size=128M]
	Capabilities: [40] Power Management version 2

Anmerkung: Je nach Linux-Distribution kann der vollständige Name (Micronas...) oder auch nur "Unknown device 1905:8100" angezeigt werden. Beides ist in Ordnung.

Treibermodul für die eHD erstellen

Achtung! Falls Ihr einen Kernel mit der Version 2.6.27 oder neuer besitzt müsst Ihr folgendes ändern:

cd /data/installfiles/eHD/hdshm3/x86/driver
vi hdshm.c

Zeile 118
//        hd_pci=pci_get_device_reverse(0x1905,0x8100,NULL);
       hd_pci=pci_get_device(0x1905,0x8100,NULL);

Zeile 699
       // FIXME error checking
       //class_device_create(hdshm_class, NULL, MKDEV(HDSHM_MAJOR, 0),
       //                  NULL, "hdshm");
       device_create(hdshm_class, NULL, MKDEV(HDSHM_MAJOR, 0),
                           NULL, "hdshm");

Zeile 734
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17))
//      class_device_destroy(hdshm_class, MKDEV(HDSHM_MAJOR, 0));
//      class_destroy(hdshm_class);
       device_destroy(hdshm_class, MKDEV(HDSHM_MAJOR, 0));
       class_destroy(hdshm_class);

erstellen des Treibermoduls

cd /data/installfiles/eHD/hdshm3/
make clean x86
make x86

(Sollte es Probleme beim Kompilieren geben, bitte überprüfen, ob du einen 32bit Kernel verwendest. Mit 64bit Kerneln ("686") gibt es regelmässig Probleme ....)

Treibermodul Systemweit zur Verfügung stellen

cd /lib/modules/$(uname -r)/kernel/drivers/video
cp /data/installfiles/eHD/hdshm3/x86/driver/hdshm.ko .
depmod -a

eHD Software vorbereiten

In diesem Verzeichnis wird die Software abgelegt die für den Betrieb der eHD benötigt wird.

cd /usr/local/src/eHD/hdplayer/
cp /data/installfiles/eHD/precompiled/hdplayer.gz .
gunzip hdplayer.gz

cd /usr/local/src/eHD/
cp /data/installfiles/eHD/hdshm3/x86/hdboot/hdboot .
cp /data/installfiles/eHD/hdshm3/x86/shmnetd/shmnetd .
cp /data/installfiles/eHD/precompiled/linux.bin.gz .
gunzip linux.bin.gz

eHD manuell starten

Treibermodul der eHD starten:

modprobe hdshm
/usr/local/src/eHD/hdboot -i /usr/local/src/eHD/linux.bin
screen -d -m /usr/local/src/eHD/shmnetd

Nachdem das eHD Treibermodul geladen wurde sollte der Aufruf 'dmesg' folgendes Anzeigen:

dmesg

hdshm_init_struct: Phys start 00000000db000000, start ffffc20005000000, nc-start ffffc20007780000
hde_fb: init 0
mtrr: base or size exceeds the MTRR width
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
tun0: Disabled Privacy Extensions

Anmerkung: ca. 15-20s nach der Ausführung von hdboot wird ein Startlogo über HDMI (576p) ausgegeben. Dies bedeutet, dass der Linux-Kernel auf dem DeCypher tatsächlich gebootet hat. Falls gerade kein HDMI-Display vorhanden ist, kann man mit dem hdboot-Parameter "-w <timeout>" auch darauf warten, dass der Bootvorgang tatsächlich durchläuft (nur zur manuellen Diagnose, shmnetd kann sonst direkt nach dem hdboot gestartet werden.).

Für die ersten Versuche empfiehlt es sich, den shmnetd von Hand (ohne screen) zu starten. Eventuelle Fehlermeldungen (zB. fehlende tun/tap-Treiber) fallen dann besser auf. Zunächst wird die Verbindung zum DeCypher initialisiert ("GOT SHM-CHANNELS"). Konnte auch das tun-Device angelegt werden, ist die letzte Ausgabe "SHMNETD Running..." und die Netzwerkverbindung sollte verfügbar sein.

Verbindungstest's auf die eHD

Wenn die eHD erfolgreich gestartet wurde wird im System ein Netzwerkdevice "tun0" erstellt über die das System mit der eHD Karte kommuniziert.

ifconfig

tun0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
         inet addr:192.168.99.130  P-t-P:192.168.99.130  Mask:255.255.255.252
         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:8300  Metric:1
         RX packets:411 errors:0 dropped:0 overruns:0 frame:0
         TX packets:459 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:500 
         RX bytes:30305 (29.5 Kb)  TX bytes:159573 (155.8 Kb)

Nachdem das Netzwerkdevice "tun0" gestartet ist sollte die eHD Karte mittels Ping erreichbar sein:

ping 192.168.99.129

PING 192.168.99.129 (192.168.99.129) 56(84) bytes of data.
64 bytes from 192.168.99.129: icmp_seq=1 ttl=64 time=4.61 ms
64 bytes from 192.168.99.129: icmp_seq=2 ttl=64 time=4.04 ms
64 bytes from 192.168.99.129: icmp_seq=3 ttl=64 time=4.05 ms

--- 192.168.99.129 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 4.046/4.235/4.610/0.270 ms

Zugriff mittels Telnet auf die eHD

Die eHD Karte läuft mit einem eigenen Linux Betriebssystem auf das man mittels "telnet" zugreifen kann:

telnet 192.168.99.129

Trying 192.168.99.129...
Connected to 192.168.99.129.
Escape character is '^]'.



BusyBox v1.2.2 (2008.09.08-11:57+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.


Welcome to extensionHD

This image is based on SDK V1.7.
It was built @ Mi 4. Mär 17:43:18 CET 2009 on RCsReelbox.


hdext #
hdplayer auf der eHD prüfen

An der Größe des hdplayers sieht man das er erfolgreich vom TFTP Server hochgeladen wurde. Wenn das /tmp Verzeichnis leer ist oder der hdplayer eine Größe von 0 hat stimmt vermutlich etwas mit dem TFTP Server nicht.

hdext # cd /tmp/
hdext # ls -l
-rwxr-xr-x    1 0        0          537780 Jan  1 00:00 hdplayer
Prozesse auf der eHD prüfen

Sobald man auf der eHD gelandet ist können die gestarteten Prozesse geprüft werden. Wenn alles erfolgreich verlaufen ist sollte es wie in diesem Beispiel aussehen:

hdext # ps

 PID  Uid     VmSize Stat Command
   1 0           656 S   init
   2 0               SWN [ksoftirqd/0]
   3 0               SW< [events/0]
   4 0               SW< [khelper]
   5 0               SW< [kthread]
   6 0               SW< [kblockd/0]
  20 0               DW  [swapper]
  84 0               SW  [pdflush]
  85 0               SW  [pdflush]
  87 0               SW< [aio/0]
  86 0               SW  [kswapd0]
  91 0               SW  [kseriod]
 133 0               SW< [VIDEO/0]
 134 0               SW< [AUDIO/0]
 135 0               SW< [PSI/0]
 139 0               SW< [VIDEO/0]
 140 0               SW< [AUDIO/0]
 141 0               SW< [PSI/0]
 171 0           636 S   syslogd -m 0 -C
 173 0           628 S   klogd
 235 0           572 S < udevd
 254 1           684 S   portmap
 256 0           516 S   telnetd -l /sbin/loginash
 278 0           468 S   shmnetd
 293 0           684 S   /bin/sh /sbin/hdplayermgr -d
 300 0           716 S   /usr/bin/hdctrld -o DVI -a WF -v 576i -s -d
 310 0           716 S   /usr/bin/hdctrld -o DVI -a WF -v 576i -s -d
5847 0           660 S   init
5850 0           716 S   /usr/bin/hdctrld -o DVI -a WF -v 576i -s -d
5853 0           572 S   sh -c /tmp/hdplayer
5854 0           804 S   /tmp/hdplayer
5858 0           804 S   /tmp/hdplayer
5859 0           804 R N /tmp/hdplayer
6082 0           876 S   /bin/ash --login
6140 0           424 S   sleep 2
6141 0           712 R   ps

eHD in den Autostart

Damit die eHD auch nach einem Systemstart automatisch gestartet wird kann dies mittels diesem Skript erledigt werden.

Skript erstellen

cd /etc/init.d/
vi ehd
#!/bin/sh
### BEGIN INIT INFO
# Provides:          ehd
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Start, Stop or Restart the ehd
### END INIT INFO 

# Shell functions sourced from /etc/rc.status:
. /etc/rc.status

# Reset status of this service
rc_reset

# 
case "$1" in
    start)
        echo -n "Starting extensionHD "
        modprobe hdshm
        sleep 2
        /usr/local/src/eHD/hdboot -i /usr/local/src/eHD/linux.bin
        screen -d -m /usr/local/src/eHD/shmnetd

        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down extensionHD "

        # Remember status and be verbose
        rc_status -v
        ;;
    restart)
        echo -n "Restart extensionHD "
        $0 stop
        $0 start 

        # Remember status and be quiet
        rc_status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
rc_exit

Skript ausführbar machen

cd /etc/init.d/
chmod +x ehd

eHD in den Autostart aufnhemen

chkconfig ehd 35

System neu starten

Nach einem Neustart des System´s sollte auf dem TV ein schwarzer Hintergrund mit dem Reelbox Logo erscheinen.

init 6

eHD aktualisieren

Reelbox SVN aktualisieren

cd /data/installfiles/eHD/bspshm
svn up

cd /data/installfiles/eHD/hdshm3
svn up

cd /data/installfiles/eHD/precompiled
svn up

Treibermodul aktualisieren

Treibermodul wie oben beschrieben installieren: Treibermodul für die eHD erstellen

hdplayer aktualisieren

cd /usr/local/src/eHD/hdplayer/
rm hdplayer
cp /data/installfiles/eHD/precompiled/hdplayer.gz .
gunzip hdplayer.gz

Systemsoftware aktualisieren

cd /usr/local/src/eHD/
rm hdboot 
rm linux.bin
rm shmnetd
cp /data/installfiles/eHD/hdshm3/x86/hdboot/hdboot .
cp /data/installfiles/eHD/hdshm3/x86/shmnetd/shmnetd .
cp /data/installfiles/eHD/precompiled/linux.bin.gz .
gunzip linux.bin.gz

System neu starten

init 6

Links

  1. Reel Multimedia
  2. Reel Forum