OpenSUSE VDR DVB-S2 - Teil2.1: eHD
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