Wie kann ich unter Linux ein zusätzliches Framebuffer-Gerät hinzufügen?

15

Ich verwende einen Ubuntu 12.04 LTS als Heim-NAS-Server ohne X. Kürzlich habe ich begonnen, ihn so zu optimieren, dass er auch als Mediengerät für die Videowiedergabe dient. Zu diesem Zeitpunkt war es vielleicht einfacher, X zu installieren, aber ich entschied mich, mplayer mit Framebuffer-Wiedergabe zu testen. Es hat funktioniert und alles war in Ordnung und gut.

Aus Neugier und vielleicht auch aus praktischen Gründen kann ich jedoch nicht aufhören, über Framebuffer nachzudenken. Es scheint nur ein Framebuffer-Gerät zu geben /dev/fb0. (Übrigens verwende ich den vesafs-Treiber.) Wenn ich mehrere Programme mit Framebuffern verwende, entsteht Chaos. Wenn Sie zum Beispiel mplayer von fbterm ausführen, stürzt das Programm einfach ab. Seltsamerweise schafft es fbi image viewer, Bilder irgendwie anzusehen. Offensichtlich können die Programme das Gerät nicht gemeinsam nutzen, es gibt schließlich kein Fenstersystem.

Ist die Anzahl der (vesa) fb-Geräte auf Hardware-Anzeigegeräte beschränkt? Oder könnte es prinzipiell mehr geben, als es mehrere Arten gibt? Würde das Hinzufügen von mehr Hilfe beim gleichzeitigen Ausführen von Software, die sie verwendet, helfen? Wie könnte ich mehr hinzufügen?

Auch die Logik, wie die Framebuffers mit ttys verbunden sind, ist mir nicht ganz klar. Zum Beispiel zeigt mplayer auf jedem tty seinen Videorahmen, aber fbi nicht. Außerdem zeigt die Ubuntu-Standardkonsole (fbcon?) Hinter dem Video-Overlay, was mich merkwürdig stört. Worum geht es?

GolDDranks
quelle

Antworten:

18

Da noch niemand geantwortet hat und ich nach langwierigen Stunden des Googelns und Testens etwas Verständnis für das Thema habe, werde ich es beantworten ...

Da es sich bei der Framebuffer-Geräteschnittstelle um eine recht allgemeine Schnittstelle handelt, kann es im Prinzip mehr FB-Geräte geben. Da der von mir verwendete VESA-Treiber jedoch eine direkte Verbindung zwischen einem bestimmten Hardwaregerät und der Framebuffer-Gerätedatei herstellt, ist es nicht sinnvoll, mehr davon zu haben als echte Geräte.

Es gibt einen Treiber für virtuelle Framebuffer-Geräte, vfb. (Anmerkung: anders als xvfb, das ein virtueller Framebuffer für X ist) Ich habe dies nicht selbst getestet, aber man könnte so viele fb-Geräte haben, wie man möchte, wenn man das virtuelle Gerät verwendet. Ich denke auch, dass im Prinzip nichts daran hindert, ein virtuelles Gerät an ein Hardware-Framebuffer-Gerät weiterzuleiten, wodurch ein Framebuffer-Multiplexer erstellt werden kann

Über die Verbindung zwischen Framebuffers und Tty's: Es gibt keine. Der Framebuffer wird einfach auf den Bildschirm gezogen, ohne Rücksicht auf irgendetwas.

Was mich ursprünglich verwirrt hat, ist das Verhalten von fbi image viewer. Es stellt sich heraus, dass es geschickt prüft, ob das Tty, in dem es läuft, offen ist oder nicht, und entsprechend auf den Framebuffer zugreift oder nicht. (Deshalb weigert es sich im Gegensatz zu mplayer, über SSH zu laufen - es akzeptiert kein Pseudo-Terminal.) Aber die Multiplexer-ähnliche Funktionalität hat NICHTS mit dem Framebuffer selbst zu tun.

Wenn mehrere Prozesse in den Framebuffer schreiben, blockieren sie sich nicht gegenseitig . Es stellt sich heraus, dass meine früheren Probleme (Abstürze usw.) bei der gleichzeitigen Verwendung mehrerer fb-Programme überhaupt nicht mit dem Framebuffer zu tun hatten. Nimm fbterm terminal und starte mplayer: kein Problem. Die fbterm- und fbcon-Terminals sowie der fbi-Bildbetrachter puffern nur, wenn etwas aktualisiert wird, sodass der mplayer den Bildschirm praktisch 100% der Zeit beherrscht. Wenn Sie jedoch versuchen, zwei Mplayer auszuführen, erhalten Sie eine Ansicht, in der Frames des einen und des anderen flackern, wenn sie versuchen, in den Puffer mit einer Racebedingung zu ziehen.

Einige nützliche Links:

http://moi.vonos.net/linux/framebuffer-drivers/

https://www.kernel.org/doc/Documentation/fb/framebuffer.txt

GolDDranks
quelle
Wenn Sie ein kleines zweites LCD-Display als Sekundärdisplay haben (denken Sie an 320x240 Pixel, 3 Zoll), ist die Verwendung von fb1 sinnvoll. Ich habe ein kleines Adafruit adafruit.com/product/1601 , das (nur) fb1 verwendet. Ihre Software ist Open Source, aber ihr Betriebssystem-Image versucht Linux mit einer GUI in 320x240 auszuführen und schlägt kläglich fehl. Als zweites Gerät könnte es in Ordnung sein, ich habe es seit ein paar Jahren nicht mehr benutzt. Siehe man mknod.
Alan Corey