Mehrere Leute haben die Teile Ihrer Frage beantwortet, die sich mit dem Kernel und dem Einfügen von Bildern befassen (anstelle von Text) auf den Framebuffer, aber bisher bleibt der Rest unadressiert. Ja, Sie können das virtuelle Terminal-Subsystem des Kernels verwenden, um eine sogenannte Framebuffer-Konsole zu erstellen . Aber es gibt mehrere Tools, mit denen Sie das Framebuffer-Gerät verwenden können, um virtuelle Terminals im Benutzerraum zu erstellen . Dazu gehören:
- zhcon (Debian) – ein virtuelles Userspace-Terminal, das darauf ausgerichtet ist, CJK-E/A weitaus besser zu handhaben als das Kernel-Subsystem. Seine besondere Stärke liegt im Umgang mit ISO-2022-Nicht-UTF-Kodierungen; seine besondere Schwäche sind UTF-Kodierungen.
- fbterm (Debian) – ein virtuelles Userspace-Terminal, das mehrere Forks hervorgebracht hat, darunter jfbterm. Es hat eine Reihe von Plug-Ins für CJK-Eingabemethoden.
- bogl-bterm (Debian) – ein virtuelles Userspace-Terminal, das Forks wie niterm hervorgebracht hat.
- Ali Gholami Rudis fbpad – ein minimalistisches virtuelles Userspace-Terminal, das keine Abhängigkeiten von X-Bibliotheken hat.
- Der
console-terminal-emulator
undconsole-fb-realizer
tools in nosh – ein virtuelles Userspace-Terminal, das darauf abzielt, virtuelle Linux- und FreeBSD/PC-BSD-Kernel-Terminals zu replizieren. Es hat auch keine Abhängigkeiten von X-Bibliotheken. - kmscon – ein virtuelles Userspace-Terminal, das eng mit
logind
verbunden ist server in systemd und seine Vorstellungen von "Sitzen".
Insbesondere Ali Gholami Rudi hat mehr als nur einen Terminal-Emulator für Framebuffer-Arbeiten produziert. Er schrieb auch einen Direct-to-Framebuffer-PDF-Viewer, einen VNC-Viewer, einen Mediaplayer und einen Koran-Reader.
Ein vollständiger direkter Vergleich würde den Rahmen dieser Antwort sprengen; aber hier sind einige Punkte, die für die Frage relevant sind:
- Wie bereits erwähnt, verwenden mehrere der virtuellen Terminalprogramme des Benutzerraums X-Bibliotheken für die Handhabung von Schriftarten, die Tastaturzuordnung, CJK-Eingabemethoden und so weiter. Sie sind keine X-Clients, aber sie haben Abhängigkeiten von X-Bibliotheken.
fbpad
und die Nosh-Tools verwenden absichtlich keine X-Bibliotheken. - Die Programme, die X-Bibliotheken zur Handhabung von Schriftarten verwenden, verwenden natürlich auch X-Schriftarten. Die anderen treffen andere Vorkehrungen.
- bogl-bterm und fbpad haben beide ihre eigenen idiosynkratischen Schriftformate. Mit dem
bdftobogl
wandelt man BDF-Fonts in BOGL-Fonts um Werkzeug; und man wandelt TTF mit dem ft2tf (Arch)-Tool in die "tinyfont"-Schriftarten um, die von fbpad verwendet werden. - Der nosh
console-fb-realizer
tool verwendet dieselben "vt"-Schriftarten wie das neue FreeBSD 10.1-Kernel-Subsystem für virtuelle Terminals und teilt sich daher das FreeBSD-Werkzeug zum Bearbeiten von Schriftartenvtfontcvt
zum Konvertieren von BDF-Fonts.
- bogl-bterm und fbpad haben beide ihre eigenen idiosynkratischen Schriftformate. Mit dem
- Die Programme, die X-Bibliotheken verwenden, verwenden die X-Tastaturzuordnung. Was die anderen betrifft:
- Die Nosh-Tools haben ihr eigenes eigenwilliges Keyboard-Map-Format, das dazu gedacht ist, eine vollständige ISO 9995-3-fähige Tastatur mit der ISO "common"-Gruppe 2 bereitzustellen. Man konvertiert BSD-kbdmap-Dateien in dieses Format mit dem
console-convert-kbdmap
Werkzeug. Auch hier sind diese kbdmap-Dateien diejenigen, die mit dem FreeBSD/PC-BSD vt-Subsystem verwendet werden. - fbpad führt überhaupt keine eigene Tastaturzuordnung durch und verlässt sich dafür auf das Vorhandensein des virtuellen Terminal-Subsystems des Kernels und seines Tastaturzuordnungsmechanismus.
- Die Nosh-Tools haben ihr eigenes eigenwilliges Keyboard-Map-Format, das dazu gedacht ist, eine vollständige ISO 9995-3-fähige Tastatur mit der ISO "common"-Gruppe 2 bereitzustellen. Man konvertiert BSD-kbdmap-Dateien in dieses Format mit dem
- Es gibt einige Abweichungen beim Aufruf und den erforderlichen Privilegien:
- zhcon, fbterm, bogl-bterm, fbpad und kmscon arbeiten auf der Grundlage, dass der Terminal-Emulator das Shell-/Login-Programm direkt als untergeordneten Prozess auf dem Terminal erzeugt. Sie benötigen Superuser-Privilegien, um
login
zu spawnen . - Die Nosh-Tools wurden entwickelt, um sich in einen bestehenden
/etc/ttys
zu integrieren (BSD),/etc/inittab
(Linux-System 5init
) oder einem anderen System, dem sie das Spawnen von getty/login/shell überlassen.console-fb-realizer
braucht nur genügend Privilegien, um den Framebuffer zu öffnen und Ereignisgeräte einzugeben, die keine Superuser-Privilegien sein müssen, und um auf die FIFOs und gewöhnlichen Dateien zuzugreifen, die vonconsole-terminal-emulator
verwaltet werden , die wiederum überhaupt keine besonderen Rechte benötigt.
- zhcon, fbterm, bogl-bterm, fbpad und kmscon arbeiten auf der Grundlage, dass der Terminal-Emulator das Shell-/Login-Programm direkt als untergeordneten Prozess auf dem Terminal erzeugt. Sie benötigen Superuser-Privilegien, um
All dies sind Terminal-Emulatoren Natürlich. Wenn Sie die Terminalemulation herausnehmen und Text direkter in den Framebuffer schreiben möchten, haben Sie einige Möglichkeiten:
- bogl-bterm basiert natürlich auf Ben Pfaffs Ben's Own Graphics Library eine Framebuffer-E / A-Bibliothek, die für die Verwendung in Systemeinrichtungs- / Rettungsumgebungen (und "für GUIs in PDAs") entwickelt wurde. Sie können natürlich Programme schreiben, die das direkt verwenden.
- Für einen Mittelweg zwischen dem Schreiben eines Programms, das eine Framebuffer-Bibliothek verwendet, um sein eigenes Rendering durchzuführen, und einem Programm, das Escape-Sequenzen an etwas ausspuckt, das es für ein Terminal hält:Das virtuelle Terminal Nosh User-Space ist modular und zerfällt in Einzelteile. Man kann
console-terminal-emulator
einfach nicht verwenden .console-fb-realizer
verwendet eine Anzeigedatei mit einem Zeichenzellenarray, wie/dev/vcsa*
aber eine gewöhnliche Datei (keine spezielle Zeichengerätedatei) und mit Unicode-Codepunkten, ECMA-48-Attributen und 24-Bit-RGB-Farbe. Man kann es also ausführen und einfach Zeichen+Attribut+Farbe direkt in die Zeichenzellen-Array-Datei schreiben, wobeiconsole-fb-realizer
bleibt die Schriftart in den Framebuffer übertragen.Nebenbei:Beachten Sie, dass dies das Gegenteil der Integration mit BRLTTY ist, die
console-terminal-emulator
verwendet aber führtconsole-fb-realizer
nicht aus .
Um den Framebuffer als Konsole zu verwenden, benötigen Sie den fbdev
Modul. Möglicherweise müssen Sie Ihren Kernel neu kompilieren.
Sie könnten auch am DirectFB-Projekt interessiert sein, einer Bibliothek, die die Verwendung des Framebuffers vereinfacht. Es gibt auch bereits Anwendungen und GUI-Umgebungen, die dafür geschrieben wurden.
Wenn Sie /dev/urandom > /dev/fb0
kategorisieren können und zufällige Pixel auf dem Bildschirm erhalten, haben Sie alles, was Sie brauchen.
In meinem Fall musste ich einige Textinformationen ausgeben. Ich habe dies in busybox und raspi getestet, also könnte es für Sie funktionieren. Die Antwort könnte ein bisschen lang sein, denn wenn Sie keine Konsole verwenden, müssen Sie die Pixel von Zeichen selbst. Zum Glück hat jemand die harte Arbeit erledigt, also müssen wir es nur kombinieren.
In der busybox oder in deinem Raspi solltest du einen fbset
haben Binary. Dies könnte Ihnen helfen, Ihre Einstellungen als Bildschirmabmessungen herauszufinden.
In meinem eingebetteten sieht so aus:
# fbset
mode "480x272-1"
# D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
geometry 480 272 480 272 16
timings 9600000 3 3 0 32 17 11
accel false
rgba 5/0,6/5,5/11,0/0
endmode
Der wichtige Teil hier ist die Breite 480 und die Höhe 272 Pixel.
Wie Sie bereits erwähnt haben, können Sie den Bildschirm mit cat /dev/urandom > /dev/fb0
erfüllen
und Sie können es mit cat /dev/zeros > /dev/fb0
löschen
Wenn Sie Ihren Bildschirm löschen, müssen wir sicherstellen, dass Sie die Abmessungen richtig erhalten.
Zufällig hatte meine busybox eine fbsplash-Binärdatei, die als Eingabe eine .ppm-Datei erhält.
Korrigieren Sie, wenn ich falsch liege, aber es scheint, dass fb0
akzeptiert dieses Format. Werfen Sie einen Blick auf Portable Anymap auf Wikipedia, dort gibt es mehrere "Unterformate" ... fbsplash verwendet ein schickes Format mit Farbe und so weiter ... aber wir möchten in der Lage sein, einfach etwas Lesbares zu drucken. Nehmen wir der Einfachheit halber das in ASCII kodierte P1. Wenn wir eine vertikale Linie drucken könnten, wüssten wir, dass unsere Abmessungen korrekt sind. Versuchen wir es:
Eine vertikale Linie in einem ppm-Typ P1 sollte so aussehen:
P1
480 272
f 0 0 0 0 ... 0
f 0 0 0 0 ... 0
...
f 0 0 0 0 ... 0
Also gibt es 272 Zeilen, 959 Zeichen breit. Die Dokumentation sagt, es sollte 1 statt f sein ... auf busybox und raspi f war heller.
Es ist wichtig, dass Sie nach den Nullen kein Leerzeichen haben ... Diese Aufgabe kann etwas mühsam sein ... Verwenden Sie besser einen Texteditor, der Ihnen hilft. In vim können Sie die ersten beiden Zeilen kopieren, in den Befehlsmodus wechseln ( esc), dann geben Sie die folgenden Zeichen ein:
of(esc)479a 0(esc)yy271p
Natürlich verwende ich meine Abmessungen, Sie sollten Ihre verwenden. Versehen Sie diese Datei mit /dev/fb0
, sollte es so aussehen:
Ok, ich schummele ... es ist nicht nur eine Zeile da ... es sind ungefähr 8 ... aber wenn es nicht funktioniert (wir haben falsche Abmessungen oder Platz am Ende, ist es viel, nur eine Zeile zu haben einfacher).
Wenn Sie so weit gekommen sind, müssen wir nur die richtigen Pixel drucken, um sie als Zeichen zu sehen. Dank Marcel Sondaar und seinem Repo auf GitHub müssen wir nicht jedes Zeichen zeichnen.
Mit einem kleinen Tweak erweitert man sein einfaches Programm um f
zu drucken statt X
und 0
Anstelle von Leerzeichen fügen Sie Leerzeichen zwischen jedem Zeichen ein, fügen die Kopfzeile hinzu und wir haben eine .ppm-Datei mit dem Buchstaben, der seinem Zeichencode entspricht.
Ein kleiner Schritt weiter und Sie erhalten kein Zeichen als Eingabe, sondern eine Zeile. Cat eine Datei, Pipe an Ihr Programm und Ausgabe an /dev/fb0
und Sie erhalten eine Textausgabe:
Ich teste diese Lösung auch auf einem Himbeer-Pi und es hat funktioniert. Das System sagt mir, dass ich nicht den Ruf habe, mehr als 2 Links zu posten. Bis ich das bekomme, müssen Sie sich auf mein Wort verlassen :D