[HOWTO] Installation VDR-Client auf ARM Boards mit Allwinner Chip z.B. Cubieboard2, Cubietruck, BananaPI

  • Die ist die aktuelle Version vom HowTo, die alte ist hier archiviert.


    In diesem HowTo installiere ich VDR auf einem ARM Board mit Allwinner Chip A20(A10 sollte auch funktionieren). Ich verwende einen selbst kompilierten Kernel, da Igor Pečovnik bei seinem Armbian auf eine andere Kernel Quelle umgestellt hat, und ein paar Sachen dort nicht mehr vorhanden sind, die ich gerne hätte. Das sind unter anderem:
    Der CSC Patch von Rellla mit dem man Farbeinstellungen bei der Videowiedergabe korrigieren kann
    und der sunxi-lirc Treiber, denn der mitgelieferte funktioniert mit meinen Fernbedienungen nicht so gut.
    Und da ich jetzt sowieso kompiliere, hab ich noch einen Patch gegen das Problem mit dem nicht mehr aufwachen des Bildschirms nach Stromsparmodus mit eingefügt und
    meinen CEC-Treiber für libcec, für den ich leider noch nicht viel Feedback habe.


    Wer das Vorgenannte nicht benötigt, sollte auch ein aktuelles Legacy Jessie Image von Armbian verwenden können. Ich verwende die gleiche ToolChain wie Igor Pečovnik nur mit den oben genannten Patches.


    Hier sind meine Images für BananaPi und Cubietruck:
    Armbian_4.83_Bananapi_Debian_jessie_3.4.110.zip
    Armbian_4.83_Cubietruck_Debian_jessie_3.4.110.zip


    Für alle anderen Boards und Selbstkompilierer habe ich einen eigenen Post verfasst.


    Das passende Image herunterladen und auf SD Karte spielen. Unter Windows mit dem mitgelieferten imagewriter.exe.


    Nach dem ersten Start erfolgt ein automatischer Neustart. Danach loggen wir uns als root ein (Passwort: 1234) und legen los. Der ssh Port 22 ist schon aktiviert und man kann sich über Netzwerk einloggen.
    Als erstes mal das Passwort ändern:

    Code
    passwd


    Jetzt mc installieren, da ich den Editor davon verwende. Wer einen anderen Editor verwenden möchte kann dies gerne tun und kann mc dann weglassen.

    Code
    apt-get install mc


    Jetzt Sprache und Zeitzone einstellen.

    Code
    dpkg-reconfigure locales
    
    
    echo UTC > /etc/timezone
    dpkg-reconfigure tzdata


    Für die Tastatureinstellung muss eine Tastatur angeschlossen sein. Wer keine Tastaur anschließen will kann den Punkt überspringen.

    Code
    dpkg-reconfigure keyboard-configuration


    Bei einer Deutschen Tastatur: Generic 105-key (Intl) PC -> German -> The default for the keyboard layout -> No compose key -> No

    Code
    service keyboard-setup restart


    Jetzt kommen ein paar Einstellungen für die Bildschirmauflösung und Video Arbeitsspeicher

    Code
    mcedit /boot/boot.cmd


    Dabei geht es um diese Zeile.

    Code
    setenv bootargs "console=tty1 root=/dev/mmcblk0p1 rootwait rootfstype=ext4 sunxi_ve_mem_reserve=190 sunxi_g2d_mem_reserve=16 sunxi_no_mali_mem_reserve sunxi_fb_mem_reserve=32 hdmi.audio=EDID:0 disp.screen0_output_mode=1920x1080p50 panic=10 consoleblank=0 enforcing=0 loglevel=1"


    Änderungen werden bei folgenden Einträgen gemacht: sunxi_ve_mem_reserve=190, sunxi_g2d_mem_reserve=16, sunxi_fb_mem_reserve=32 und disp.screen0_output_mode=1920x1080p50
    Bei disp.screen0_output_mode=1920x1080p50 natürlich die passende Auflösung eintragen aber am Ende auf p50 achten.


    Die Änderungen werden mit F2 gespeichert und mit F10 wird der Editor verlassen.


    Jetzt die vorgenommenen Änderungen übersetzen.

    Code
    mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr


    Als nächstes kann man eine feste Netzwerkadresse vergeben:

    Code
    mcedit /etc/network/interfaces


    Den Bereich für eth0 folgendermaßen ändern (Adressen natürlich ans eigene Netzwerk anpassen):

    Code
    auto eth0
        	iface eth0 inet static
        	address 192.168.1.243
        	netmask 255.255.255.0
        	gateway 192.168.1.254


    Und einen Nameserver einstellen:

    Code
    mcedit /etc/resolv.conf


    Zum Beispiel der eigene Router(Wieder ans eigene Netzwerk anpassen):

    Code
    nameserver 192.168.1.254


    Jetzt erstmal ein Neustart um die Änderungen zu übernehmen.

    Code
    reboot


    Nach dem Neustart aktualisieren wir die Softwarepakete.

    Code
    apt-get upgrade


    Die Frage mit Y beantworten.
    Nach der Aktualisierung installieren wir die benötigten Pakete.

    Code
    apt-get install gettext xserver-xorg-dev xserver-xorg xutils-dev libvdpau-dev psmisc libxcb-screensaver0-dev libxcb-randr0-dev libxcb-dpms0-dev libxcb-icccm4-dev libx11-xcb-dev libxcb-ewmh-dev libasound2-dev libxcb-xv0 libxcb-keysyms1 libxcb-util0 libxcb-shm0 libfreetype6-dev libfontconfig1-dev alsa-base libcap-dev libjpeg62-turbo-dev x11-xserver-utils liblockdev1-dev libudev-dev libxrandr-dev python-dev swig


    Den XF86 Treiber installieren.

    Code
    cd /usr/local/src/
    git clone https://github.com/ssvb/xf86-video-fbturbo.git
    cd xf86-video-fbturbo
    autoreconf -vi
    ./configure --prefix=/usr
    make -j3
    make install
    cp xorg.conf /etc/X11


    Nun die ffmpeg Bibliothek installieren (Der Make Befehl braucht ca. 60 Minuten, Zeit für eine kleine Pause)

    Code
    cd /usr/local/src/
    wget http://ffmpeg.org/releases/ffmpeg-2.8.5.tar.bz2
    tar xfvj ffmpeg-2.8.5.tar.bz2
    cd ffmpeg-2.8.5
    ./configure --enable-shared --prefix=/usr
    make -j3
    make install


    Jetzt libcec installieren. (Nur nutzbar mit einem Kernel mit CEC support)


    libcsptr installieren. (wird für VDPAU benötigt)

    Code
    cd /usr/local/src/
    git clone https://github.com/Snaipe/libcsptr.git
    cd libcsptr
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/usr ..
    make -j3
    make install


    Jetzt wird der sunxi-vdpau Treiber installiert.

    Code
    cd /usr/local/src/
    git clone -b staging https://github.com/linux-sunxi/libvdpau-sunxi.git
    cd libvdpau-sunxi
    make -j3
    make install


    Nun geht es an den VDR mit Plugins. Ich habe hier das Streamdev und ein paar andere Plugins dabei, für den Fall dass man ihn als Streamdev-Client verwenden will.


    Jetzt noch softhddevice Patchen, damit die CSC Einstellungen auch verwendet werden.

    Code
    cd /usr/local/src/vdr-plugin-softhddevice/
    wget 'http://sunxi.das-eckchen.de/softhddevice_cscV2.diff'
    patch -p1 < softhddevice_cscV2.diff


    Jetzt kann der VDR kompiliert werden.

    Code
    cd /usr/local/src/VDR
    make -j3
    make install


    Jetzt die Soundausgabe konfigurieren.

    Code
    mcedit /etc/asound.conf


    Die Zeile card 0 an die eigene Ausgabe anpassen. card 3 ist bei Cubietruck HDMI bei BananaPi sollte es card 2 sein für HDMI (nicht ganz sicher einfach durchprobieren wenn kein ton kommt)


    Eine remote.conf für Tastatursteuerung anlegen:

    Code
    mcedit /var/lib/vdr/remote.conf



    Eine runvdr anlegen.

    Code
    mcedit /usr/local/bin/runvdr



    Die runvdr ausführbar machen.

    Code
    chmod +x /usr/local/bin/runvdr


    Jetzt kann der VDR für einen Test gestartet werden.

    Code
    runvdr
  • Sehr schöne Zusammenstellung. :)
    Werde ich die Tage gleich mal nutzen.

  • hm soweit mir bekannt ist wird ab 3.4.75+ diese parameter:


    Code
    sunxi_ve_mem_reserve=190 sunxi_g2d_mem_reserve=16 sunxi_fb_mem_reserve=32


    nicht mehr ausgewertet


    normal muss man den Kernel neu bauen um den Speicher zu erhöhen damit vdpau ordentlich läuft


    :edit habs grade im anderen Thread gelesen warum es doch geht :-/ ;)

  • Da mein Cubieboard und Cubietruck noch nie an einen Monitor/TV angeschlossen waren, wollte ich euch mal fragen ob man zwingend Kernel 3.4.x für die Hardwarebeschleunigung der GPU benötigt?
    Bei mir läuft der 3.18 vanilla Kernel damit die TV-Karte ordentlich erkannt wird und funktioniert. Zur Zeit nur als Streaming "Server", als Client wäre es aber auch interessant.

    HD-VDR:
    HW: ZOTAC D2550-ITX | Mystique SaTiX-S2 Sky Xpress DUAL
    SW: Debian Stretch | vdr-2.3.8

  • Da mein Cubieboard und Cubietruck noch nie an einen Monitor/TV angeschlossen waren, wollte ich euch mal fragen ob man zwingend Kernel 3.4.x für die Hardwarebeschleunigung der GPU benötigt?
    Bei mir läuft der 3.18 vanilla Kernel damit die TV-Karte ordentlich erkannt wird und funktioniert. Zur Zeit nur als Streaming "Server", als Client wäre es aber auch interessant.


    Für jegliches Display, GPU und VPU benötigst du den sunxi-3.4 Kernel. Im mainline kernel ist das nicht eingebaut und wird leider in absehbarer Zeit auch nicht passieren. Ein sunxi-kms Treiber ist in Arbeit...
    Gruß Andreas

  • Danke dir für die flotte Antwort.
    Werde mein CB1 mal zum testen nehmen und das Howto durchgehen.
    Oder benötigt es zwingend ein A20?

    HD-VDR:
    HW: ZOTAC D2550-ITX | Mystique SaTiX-S2 Sky Xpress DUAL
    SW: Debian Stretch | vdr-2.3.8

  • Danke dir für die flotte Antwort.
    Werde mein CB1 mal zum testen nehmen und das Howto durchgehen.
    Oder benötigt es zwingend ein A20?


    Um alles zum Laufen zu bringen, nein. Um strikt nach dem Howto zu gehen, ja. So wie ich das sehe, ist das fertige Image nur für A20.
    D.h. U-Boot, script.bin und kernel wären an einen A10 anzupassen, am Filesystem und der Vorgehensweise an sich ändert sich nichts.


    Gruß Andreas


  • Nun die ffmpeg Bibliothek installieren (Der Make Befehl braucht ca. 40 Minuten, Zeit für eine kleine Pause)

    Code
    cd /usr/local/src/
    wget http://ffmpeg.org/releases/ffmpeg-2.4.4.tar.bz2 
    tar xfvj ffmpeg-2.4.4.tar.bz2
    cd ffmpeg-2.4.4
    ./configure --enable-shared --prefix=/usr
    make -j3
    make install


    Warum braucht man das und kann nicht einfach libav aus den Debian-Repositories nehmen?
    Gruß Andreas

  • Hallo jodamm,
    habe deine Howto gerade durchgearbeitet.
    Hat alles funktioniert. Habe gerade ein Bild mit 576i (SD), 720p und 1080i (HD) ohne das es kracht. :)


    Viele Grüße, Uwe

  • Zitat

    ...für HDMI in pcm "hw:3,0" ändern.

    Hallo jodamm,
    ich musste hier für HDMI folgendes nutzen, um Ton zu bekommen:

    Code
    pcm "hw:1,0"


    PS: wie kann ich die SD-Karten Installation auf eine angeschlossene SSD "kopieren"?

  • PS: wie kann ich die SD-Karten Installation auf eine angeschlossene SSD "kopieren"?


    Für den Fall einer SATA-SSD:
    Einfach den Inhalt der SD auf die SSD kopieren, am besten an einem separaten Rechner. Und in der uEnv.txt dafür sorgen, dass root auf der SSD liegt.

    Code
    root=/dev/sda1

    statt

    Code
    root=/dev/mmcblk0p1


    Im Kernel muss allerdings sata fest einkompiliert sein, d.h. nicht als Modul, sonst kann die SSD nicht geladen werden.


    Gruß Andreas

  • Im root Verzeichnis liegt eine Datei sata-install.sh die muss man ausführbar machen und vorher noch die Festplatte partitionieren.

    Code
    chmod +x /root/sata-install.sh
    /root/sata-install.sh


    Hat sehr gut funktioniert, Danke für die Info.



    Bekommt man den onboard IR Empfänger leicht mit lirc konfiguriert?

  • hm lass es es ist ein krampf das vdr-remote plugin geht
    da flutscht die FB richtig gut


    müsste das cubie mal wieder anschließen
    ist grade in der modingphase (einbau ins smt7020s gehäuse und resettbutton nachrüsten und co)
    da schaue ich mal wie ich es genau eingerichtet hatte und übertrage es dann ins wiki


    direkt über lirc war es aber richtig eklig :(


    hatte bestimmt 5 stunden meines lebens verschwendet ohne das es anständig funktionierte -> mit dem remote war ich in ca 6 Minuten inkl. einlesen und FB im vdr anlesen fertig ^^



    war meine ich nur das plgin mit -i /dev/input/..


    ist über dmesg herrauszufinden


    musst aber erst schauen ob der ir treiber mit gebaut ist oder als modul
    beim alten cubian oder cubieez war das meine ich nicht der fall :§$% :mua ;D


  • Bekommt man den onboard IR Empfänger leicht mit lirc konfiguriert?

    Bei dem Image sind 2 ir Kernel Module dabei, einmal das sunxi_ir (wird Standardmäßig geladen) damit erkennt es nur bestimmte Fernbedienungen und es hat bei mir dann noch auf verschiedene FB reagiert. Und dann gibt es noch das Modul sunxi_lirc das liefert dann RAW Werte und man muss die Fernbedienung anlernen wie mit einem Selbstbau-Empfänger. Ich habe das sunxi_lirc Modul mit einer Sundtek Fernbedienung am Laufen. Das automatische Anlernen hat leider nicht so toll funktioniert, aber nach etwas Feintuning hat es dann geklappt.


    Edit:
    Ich habe das gerade nochmal durchgespielt:
    1. /etc/modules anpassen


    Code
    mcedit /etc/modules


    Die Zeile sunxi-ir auskommentieren oder löschen und sunxi_lirc hinzufügen

    Code
    sunxi_lirc


    Danach am besten neustarten

    Code
    reboot


    Nach dem Neustart den lirc Daemon stoppen und ins config Verzeichnis von lirc wechseln:

    Code
    service lirc stop
    cd /etc/lirc


    jetzt versuchen die FB anzulernen

    Code
    irrecord -d /dev/lirc0 neu.conf


    Jetzt zweimal Return drücken und dann fleißig auf der Fernbedienung drücken, bis es dem Programm reicht. Bei meiner FB gab es als Ausgabe unter anderem diese Zeile "Found gap: 16275", diese Zahl wird unter Umständen später nochmal gebraucht.
    Jetzt wird man aufgefordert einen Tastennamen einzugeben z.B. KEY_1. Nach druck auf Return soll man die Taste auf der FB drücken. Dann kommt bei mir immer der Fehler "Something went wrong." jetzt einfach 10 Sek. warten und dann 2 mal Return drücken. Jetzt soll man schnell hintereinander eine Taste auf der FB drücken danach beendet sich das Programm. Eventuell 10 Sek. keine Taste mehr drücken. Jetzt kann man noch mit dem nächsten Befehl prüfen ob die FB bei gehaltener Taste Wiederholung sendet.

    Code
    mode2 -d /dev/lirc0 -m


    Jetzt eine Taste auf der FB eine Weile gedrückt halten, man sieht dann ob nur einmalig Zahlen erscheinen oder ob es weiterläuft bis man loslässt. Mit Strg + C wird der Test beendet. Bei mir gab es dann folgende Ausgabe bei einer FB mit Wiederholung:


    Wie man sieht kommt die Zahl 16275 öfter vor, sie erscheint immer am Ende von einem FB Befehl. Bei meiner FB mit Wiederholung kommt am Ende mehrfach die Zahlenkomibnation "8959 2197 555 16275" vor, das ist der Wiederholungsbefehl. Davon brauchen wir die ersten beiden Zahlen 8959 und 2197.
    Jetzt öffnen wir die Datei neu.conf

    Code
    mcedit neu.conf


    Meine Datei hat folgenden Inhalt (Text mit <- hab ich als Kommentar hinzugefügt:


    Die Änderungen durchführen und abspeichern.
    Jetzt wird wieder versucht die FB anzulernen:

    Code
    irrecord -d /dev/lirc0 neu.conf


    Jetzt muss man nicht mehr wild auf der FB rumdrücken sondern kann nach drücken von Return mit dem Anlernen der Tasten beginnen. Nach dem Anlernen haben wir eine 2. conf Datei neu.conf.conf, die wird jetzt unsere neue lircd.conf.

    Code
    rm lircd.conf
    cp neu.conf.conf lircd.conf


    Jetzt noch eine neue hardware.conf erstellen und wir sind fertig.

    Code
    rm hardware.conf
    mcedit hardware.conf


    Inhalt der hardware.conf


    Den lirc daemon wieder starten und gleich mal ausprobieren.

    Code
    service lirc start
    irw


    Wenn man jetzt Tasten auf der FB drückt sollte eine entsprechende Ausgabe erfolgen. Den Test beendet man wieder mit Strg + C.
    Dieses Vorgehen wird wohl nicht mit jeder FB funktionieren, aber ich habe es mit 3 verschiedenen FB getestet und hatte nacher jeweils eine funktionierende lirc.conf.

  • Hallo jodamm,
    erstmal vielen Dank für die sehr schöne Beschreibung zu lirc. :)
    Leider habe ich es einfach nicht geschafft weiter zu kommen, als zur Fehlermeldung: "Something went wrong"....
    Habe gestern folgendes getestet und kann nun den verbauten IR Empfänger mit dem Modul sunxi_ir verwenden.Cubieboard2 und Sunxi_ir
    Ich hatte mit einer lernfähige FB (One for all URC 11-7140) solange nach einen Code gesucht, bis KeyCodes auf allen Tadten kamen.... Leider sind die Tasten nun ohne Repeat, aber erstmal geht es. Es gibt wohl auch ein Modul gpio_lirc, das werde ich mir vielleicht noch anschauen....


    Viele Grüße, Uwe

  • Schade, dass es bei dir nicht funktioniert hat. Das Modul gpio_lirc ist für das Senden von IR Befehlen gedacht, nicht zum Empfangen. Für das Senden muss man auch noch eine IR-Diode anschließen.

  • Vielen Dank für die prima Anleitung!


    Habe es am Banana Pi erfolgreich anwenden können.


    1) für Ton über Hdmi musste ich in der "/etc/asound.conf" hw:2,0 setzen


    2) Ich wollte die Fernbedienung am internen IR über sunxi_ir + remote plugin laufen lassen.
    Hat das schon jemand am Banana Pi erfolgreich probiert?
    Bei mir hängt der VDR, kein Bild, im log stehl learning keys.. evtest auf /dev/input/event3 hat keycodes geliefert.


    3) Bin dann den Weg über Lirc gegangen. Habe eine RC5 Fernbedienung (Technotrend/Hauppauge) verwendet.
    Das Anlernen in Lirc selber hat besser als im obigen Post geklappt. Ich habe den vdr nicht in den Anlernmodus gebracht, musste die remote.conf manuell editieren. Habe auch versucht durch das Löschen der remote.conf das Anlernen zu erzwingen.



    Schon erstaunlich wie klein "VDR Hardware" mittlerweile geworden ist.


    Gruß
    Stefan

Jetzt mitmachen!

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