C-Berry zum Hauptbildschirm machen mit Framebuffertreiber (u.A. RetroPie)

  • EDIT: Hab das Problem gelöst. Anleitung im Post drunter



    Hi :)


    ich hab ein kleines Problem, und zwar will meine Emulationstation (für die Konsolenemulatoren) nicht auf meinem Display starten, sondern überträgt das Bild immer auf das HDMI Display also mein fb1.


    Kurze Info:
    Ich habe einen Raspberry Pi 2
    Mein Betriebssystem ist Raspbian
    Mein Display, das Probleme macht, ist das C-Berry 3,5'' TFT von admatec


    Ich habe mit dieser Anleitung den Framebuffertreiber dafür installiert:
    https://github.com/uvoelkel/cberryfb

    Code
    sudo modprobe cberryfb


    das klappt auch ganz gut und ich kann auch die Konsole auf dem Display wiedergeben

    Code
    FRAMEBUFFER=/dev/fb1 startx


    Allerdings startet die Emulationstation normal über den HDMI Output bei dem gleichen Befehl

    Code
    FRAMEBUFFER=/dev/fb1 emulationstation


    Ich bin relativ schnell hierrauf gestoßen:
    https://github.com/notro/fbtft…use#framebuffer-mirroring
    Damit wird der fb0 auf den fb1 kopiert.
    Das klappt auch ganz gut damit (wenn auch leicht laggy, aber viel besser als das von admatec mitgelieferte fb2cberry), allerdings bleibt wenn ich ein Spiel starte, der Bildschirm stehen und das Bild wird wieder nur auf dem HDMI Bildschirm angezeigt.
    Aber das wäre eh nur Plan B, denn wenns möglich ist, hätte ich schon gerne ein flüssiges Bild^^


    Ich bin langsam am Verzweifeln weil ich allein schon Ewigkeiten gebraucht habe, den Framebuffertreiber von u-voelkel zu installieren.
    Wenn jemand ne Lösung weiß, wie ich die emulationstation über fb1 starten kann, helft mir bitte :D:danke_ATDE:


    Grüße,
    Erotzi

    Edited once, last by Erotzi ().

  • Nachdem ja hier niemand Antworten auf meine Fragen hat, hab ich's nach ewigem tralala doch noch geschafft nach knapp 1 Woche Arbeit, wobei ich 3 Tage davon komplett nur daran gesessen hab, das Display so zum laufen zu kriegen wie ich will.
    Ich teile meine Lösung hier, damit alle die mit dem C-Berry das machen wollen, was ich will, genauso viel Freude daran haben werden.
    Ich hab das C-Berry bewusst ausgewählt, weil das Ding Hardwaretechnisch top ist und ich habs oft bereut, da adma-tec framebuffertechnisch ja GAR nichts gemacht hat und es deshalb sehr sehr sehr problematisch und zeitaufwändig war. Aber alles hat seine Vorteile. Ich hab die letzte Woche so viel zum Raspberry gelernt, wie mir kein Lehrbuch beibringen hätte können ^^


    Aber nun zur Problemlösung:
    Vorab: Alles funktioniert lagfrei ;)
    Startpunkt: Framebuffertreiber ist installiert (https://github.com/uvoelkel/cberryfb)


    Die Lösong an sich ist danach echt richtig simpel, wenn man sie weiß. Mehr aus Verzweiflung als aus dem Gedanken, dass es hilfreich ist, hab ich das hier ausprobiert:
    https://learn.adafruit.com/run…itft-displays/pitft-setup
    und hab dabei ein paar Schritte verändert. Mein Ablaufplan sah also folgendermaßen aus:


    Das PiTFT und kernel Skript laden (ja, adafruit, daher meine Aussage "mehr aus Verzweiflung" xD)

    Code
    cd
    curl -SLs https://apt.adafruit.com/add-pin | sudo bash
    sudo apt-get -y install raspberrypi-bootloader
    sudo apt-get -y install adafruit-pitft-helper


    Das Konfig-Skript ausführen, die letzte Option ist eigentlich egal, es muss sich nur um ein gültiges adafruit display handeln, ich hab 35r (also 3,5'' resistiv, anders das c wäre für kapazitiv) genommen, diese Optionen ändern wir später aber wieder. Es geht nur um ein paar Zeilen in einer Datei

    Code
    sudo adafruit-pitft-helper -t 35r


    Anschließend falls nicht schon geschehen das Programm fbcp installieren, um den Framebuffer von fb0 (HDMI) auf fb1 (C-Berry) zu übertragen.

    Code
    sudo apt-get install cmake
    git clone https://github.com/tasanakorn/rpi-fbcp
    cd rpi-fbcp/
    mkdir build
    cd build/
    cmake ..
    make
    sudo install fbcp /usr/local/bin/fbcp


    Vielleicht noch vor dem Schritt mkdir build:

    Code
    sudo nano main.c


    um das Programm zu bearbeiten. Ziemlich am Ende befindet sich eine Zeile usleep( 20 * 1000 ). Diese bschränkt fbcp auf maximal 20 fps, die sollte man daher vor dem Build entfernen.


    Anschließend das startup Script von RetroPie bearbeiten (oder ein eigenes erstellen)

    Code
    sudo nano /etc/init.d/asplashscreen


    Hier ganz wichtig für das C-Berry:


    nicht nur die Zeile


    Code
    /usr/local/bin/fbcp &


    nach "do_start () {" einfügen, sondern auch noch das Display laden

    Code
    sudo modprobe cberryfb
    /usr/local/bin/fbcp &


    Ich habe noch eine Zeile eingefügt um das Backlight des C-Berry zu verringen, da es mir per Default zu hell ist, aber das ist Geschmackssache ;)


    Anschließend die Konsole neu konfigurieren, damit man auf dem kleinen Display auch was sehen kann, wenn man später drauf arbeitet


    Code
    sudo dpkg-reconfigure console-setup




    Nun kommt der wichtigste Part: die config.txt anzupassen


    Code
    sudo nano /boot/config.txt



    hier müsst ihr folgende Anpassungen machen:
    HINWEIS:
    - manche Zeilen sind schon vorhanden, aber auskommentiert (#)
    - manche Zeilen haben andere Werte
    - manche Zeilen können nicht vorhanden sein, hinzufügen

    Code
    hdmi_force_hotplug=1
    hdmi_cvt=320 240 60 1 0 0 0
    hdmi_group=2
    hdmi_mode=87
     
    nun nicht "dtoverlay=pitft35r,rotate=90,speed=80000000,fps=60"
    ======>dtoverlay=cberryfb,rotate=90,speed=80000000,fps=60


    Für die letzte Zeile haben wir vorhin das Config Script ausgeführt, man muss nur anstelle des Framebuffertreiber des Adafruit Displays (pitft35r) den Framebuffertreiber des C-Berry laden (cberryfb)


    Mit diesen Einstellungen würde soweit schon alles laufen, allerdings würde beim Starten eines Spiels wieder nur das HDMI-Display ein Bild liefern, weil das Spiel wieder hochskaliert, daher müssen wir noch ein Script modifizieren:

    Code
    sudo nano /opt/retropie/supplementary/runcommand/runcommand.sh


    Nach der Zeile "function get_mode () {" folgendes hinzufügen

    Code
    mode_new = "DMT-87"
        return


    Dadurch behält das Spiel die eingestellte Auflösung bei.


    Nun das System neustarten und alles sollte laufen. Ich hoffe, ich kann damit einigen Leuten ein bisschen sehr viel Arbeit, die man mit diesem Display hat, ersparen^^


    Grüße,
    Erotzi