Gentoo HD-vdr experimentel

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

Autor: Alexander Richter - 17.04.2008

Ich stelle hier eine Variante der Installation vor, die in einem Working System 64 Bit gentoo )ein chroot erstellt, in dem die aktuellen Entwicklervarianten von ffmpeg xine-lib, xine-ui und vdr laufen können, ohne die Main Installation zu gefährden.

Der zusätzliche Platzaufwand beläuft sich auf rund 2 Gbyte. Backups des ganzen chroots sind ebenfalls möglich, was bei einer misslungenen Installation komfortabel ist.

WRITE TODO

- Einrichten einer amd64-chroot Umgebung
- Kernel im chroot bauen
- Multiproto Teiber ohne ebuild bauen
- locales overlay im chroot anlegen
- im localen Overlay vdr bauen
- im localen Overlay ffmpeg bauen
- im localen Overlay xine-lib bauen
- im localen Overlay xine-ui bauen
- im localen Overlay plugins bauen
- im localen Overlay patches einbinden

Entwicklungsumgebung Hardware

- Amd Phenom 9500 auf Asrock AliveNF7G-Hdready
- 1x TT S3200
- 4 Gig Ram
- 24" Zoll Acer via 7050 Chipsatz des Boards

Entwicklungsumgebung Software

- Gentoo 2007.1, kernel 2.6.24-gentoo-r4, x86_64

make.conf :

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=k8 -O3 -pipe"
ACCEPT_KEYWORDS="amd64"
MAKEOPTS="-j5
LINGUAS="de"
USE="X gtk alsa 3dnow a52 aac acl acpi aim ao apm arts \
audiofile bash-completion bcmath berkdb bindist bzip2 caps cdb cddb \
cdinstall cdparanoia cdr cgi crypt curl dbase dbm dbus dga dirctfb \
dri dts dv dvb dvd dvdr dvdread encode esd evo exif fam fastcgi fbcon \
ffmpeg firefox flac ftp gd gdbm gif gimp gphoto2 gstreamer hal \
icq ieee1394 imagemagick imap imlib innodb ipv6 jabber jack java \
javascript jbig jingle jpeg jpeg2k kde kdexdeltas ladspa lame lesstif \
libnotify libsamplerate libwww lirc lm_sensors lzo mad matroska mime \
mmap mmx mng mjpeg motif mozilla mp3 mpeg mplayer msql multilib musepack \
mysql ncurses networkmanager nls nntp nptl nsplugin nvidia ogg openal \
opengl osc oss pcre pdf perl png posix postgres python qt3 qt4 quicktime \
raw readline rss scanner sdl smartcard sndfile slang sockets socks5 \
sox sqlite sqlite3 sse sse2 sse3 ssl subversion suid svg svga symlink \
tcl tcpd theora threads tiff tk truetype unicode usb v4l v4l2 vcd \
vorbis wavpack win32codecs wmf wxwindows x264 xcomposite xine xinetd xml \
xpm xv xvid zlib"

Einrichten einer amd64-chroot Umgebung

amd64-chroot Umgebung Vorbereitung und Betreten

- Verzeichnis anlegen, hineinwechseln : mkdir /vdr cd /vdr

- Stage entpacken : tar xfjpv stage3-amd64-2008.0_beta1.tar.bz2

- Portage tree entpacken tar xvjf portage-latest.tar.bz2 -C /vdr/usr


- mounten der benötigten Verzeichnisse ins chroot (Pfade des Chroot anpassen !)

#!/bin/bash
echo "mounting vs"
mount -o bind /dev /vdr/dev 
mount -o bind /dev/pts /vdr/dev/pts
mount -o bind /dev/shm /vdr/dev/shm
mount -o bind /proc /vdr/proc
mount -o bind /proc/bus/usb /vdr/proc/bus/usb
mount -o bind /sys /vdr/sys
mount -o bind /tmp /vdr/tmp
mount -o bind /usr/portage/distfiles /vdr/usr/portage/distfiles
# optional weitere
#mount -o bind /video /vdr/video
#mount -o bind /home/alex/mpeg2avi/ /vdr/home/alex/mpeg2avi/
#mount -o bind /home/alex/.vdrtransxvid/ /vdr/home/alex/.vdrtransxvid/
#mount -o bind /dev/sdb1/ /vdr/archiv/

- Xserver Zugang für Programme aus dem chroot ( hier xine )

$ xhost local:localhost 

- chroot

$ chroot /vdr

- im chroot System - Vorbereitung

env-update
source /etc/profile
export PS1="(chroot) $PS1"

- emerge-sync - emerge --update world --deep - emerge gentoo-sources ( selben Kernel wie außerhalb des chroot auswählen, wir wollen uns unsere eigen DVB Treiber bauen, die müssen also zum "Außen" Kernel passen )

Multiproto DVB Treiber im amd64-chroot per Hand installieren

( im chroot )

mkdir -p /data/installfiles/dvb
cd /data/installfiles/dvb

wenn noch nicht vorhanden

emerge mercurial 
hg clone http://jusst.de/hg/multiproto_plus
mv multiproto_plus/ dvb-multiproto_plus-cvs-17-04-2008
mkdir -p /usr/local/src/dvb 
cd /usr/local/src/dvb
cp -a /data/installfiles/dvb/dvb-multiproto_plus-cvs-17-04-2008/ .
make distclean

Link auf compiler.h setzen

cd /usr/local/src/dvb/linux/include/linux
ln -s /usr/src/linux/include/linux/compiler.h compiler.h

Kernelkonfiguration erstellen und abspeichern

cd /usr/src/linux
make menuconfig
Device Drivers  ---> Multimedia devices  ---> <M> DVB For Linux
"Exit"
"Exit"
"Exit"
Do you wish to save your new kernel configuration?
"Yes"

DVB Treiber installieren

cd /usr/local/src/dvb/
make && make install

Prüfen der DVB Treiber Installation


cd /lib/modules/$(uname -r)/kernel/drivers/media/dvb/ttpci
ls -l
-rw-r--r-- 1 root root  58888 Jan 29 19:36 budget-av.ko
-rw-r--r-- 1 root root  54424 Jan 29 19:36 budget-ci.ko
-rw-r--r-- 1 root root  35344 Jan 29 19:36 budget-core.ko
-rw-r--r-- 1 root root  33008 Jan 29 19:36 budget-patch.ko
-rw-r--r-- 1 root root  39112 Jan 29 19:36 budget.ko
-rw-r--r-- 1 root root 179112 Jan 29 19:36 dvb-ttpci.ko
-rw-r--r-- 1 root root  21416 Jan 29 19:36 ttpci-eeprom.ko

Bei Problemen auch : SUSE - Artikel , der Grundlage für diesen Part ist : http://www.vdr-wiki.de/wiki/index.php/OpenSUSE_VDR_DVB-S2_-_Teil2:_DVB_Treiber

- im chroot System - dvb Treiber laden und Zugriffsrechte ändern, um als unpriveligierter User zugreifen zu können (hier mit TT S3200 und TT budget ci)

#!/bin/bash
echo "lade dvb-s2 kernel module"
modprobe stb6100
modprobe stb0899
modprobe stv0299
modprobe lnbp21
modprobe budget-ci
echo "ändere Zugriffsrechte des dvb Adapters 0" 
chmod a+rwx /dev/dvb/adapter0/demux0
chmod a+rwx /dev/dvb/adapter0/dvr0
chmod a+rwx /dev/dvb/adapter0/frontend0
chmod a+rwx /dev/dvb/adapter0/net0
echo "ändere Zugriffsrechte des dvb Adapters 1"
chmod a+rwx /dev/dvb/adapter1/demux0
chmod a+rwx /dev/dvb/adapter1/dvr0
chmod a+rwx /dev/dvb/adapter1/frontend0
chmod a+rwx /dev/dvb/adapter1/net0

im chroot vdr im Vordergrund starten

- vdr starten mit runvdr.sh

#!/bin/sh
# runvdr: Loads the DVB driver and runs VDR
#
# If VDR exits abnormally, the driver will be reloaded
# and VDR restarted.
#
# In order to actually use this script you need to implement
# the functions DriverLoaded(), LoadDriver() and UnloadDriver()
# and maybe adjust the VDRPRG and VDRCMD to your particular
# requirements.
#
# Since this script loads the DVB driver, it must be started
# as user 'root'. Add the option "-u username" to run VDR
# under the given user name.
#
# Any command line parameters will be passed on to the
# actual 'vdr' program.
#
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: runvdr 1.19 2006/05/14 16:02:05 kls Exp $
export LANG=de_DE
export LC_COLLATE=de_DE
PATH=/usr/local/bin:$PATH
VDRPRG="/usr/bin/vdr"
VDRCMD="$VDRPRG -w 60 -c /etc/vdr \
	-P'femon' \
	-Pskinelchi \
	-Pdirector \
	-Ppremiereepg \
	-P'xine -r' \
	-r '/usr/bin/noad -a -j -o  -S' \
	-u alex
        $*"
KILL="/usr/bin/killall -q -TERM"
# Detect whether the DVB driver is already loaded
# and return 0 if it *is* loaded, 1 if not:
function DriverLoaded()
{
return 1
}
# Load all DVB driver modules needed for your hardware:
function LoadDriver()
{
 modprobe stb6100
 modprobe stb0899
 modprobe lnbp21
 modprobe budget-ci
}
# Unload all DVB driver modules loaded in LoadDriver():
function UnloadDriver()
{
 modprobe -r budget-ci
 modprobe -r lnbp21
 modprobe -r stb0899
 modprobe -r stb6100
}
# Load driver if it hasn't been loaded already:
#if ! DriverLoaded; then
#  LoadDriver
#  fi
while (true) do
     eval "$VDRCMD"
     if test $? -eq 0 -o $? -eq 2; then exit; fi
#     echo "`date` reloading DVB driver"
     $KILL $VDRPRG
     sleep 10
#     UnloadDriver
#     LoadDriver
     echo "`date` restarting VDR"
     done


- umounten nach verlassen des chroot

#!/bin/bash
echo "umounting vs"
umount /home/alex/vs/dev/pts/
umount /home/alex/vs/dev/shm/
umount /home/alex/vs/dev/
umount /home/alex/vs/proc/bus/usb/
umount /home/alex/vs/proc/
umount /home/alex/vs/sys/
umount /home/alex/vs/tmp/
umount /home/alex/vs/usr/portage/distfiles/
umount /home/alex/vs/video
umount /home/alex/vs/home/alex/mpeg2avi/
umount /home/alex/vs/home/alex/.vdrtransxvid/
umount /home/alex/vs/archiv/