Ich habe also ein Palm Pre-Modell (Original P100EWW), auf dem ich den Entwicklermodus aktiviert und eine Debian Squeeze-Chroot installiert habe. Funktioniert super. Ich habe vor, dies für ALLES (Bittorrent Peer, Webserver), aber ein Telefon zu verwenden.
Mir ist aufgefallen, dass beim Ausführen von a cat /dev/urandom > /dev/fb0
zufällige Pixel auf den Bildschirm geschrieben werden, bis ein No space left on device
Fehler generiert wird. Super, jetzt kann ich das Display benutzen.
Welche Utilities gibt es also, mit denen ich entweder A) / dev / fb0 als Konsole verwenden kann, an die ich Text ausgeben kann, oder B) Text in / dev / fb0 über die Befehlszeile rendern kann?
Ich weiß noch nicht, wie ich den Kernel dafür neu kompilieren soll (ich würde gerne WebOS irgendwann komplett entfernen und in einen minimalen ARM-Server verwandeln), also frage ich nach Userspace-Tools, wenn sie existieren. Außerdem würde es vorziehen, direkt in / dev / fb0 zu rendern und nicht X zu verwenden.
quelle
Antworten:
Um den Framebuffer als Konsole nutzen zu können, benötigen Sie das
fbdev
Modul. Möglicherweise müssen Sie Ihren Kernel neu kompilieren.Möglicherweise interessiert Sie auch das DirectFB-Projekt, eine Bibliothek, die die Verwendung des Framebuffers erleichtert. Es gibt auch Anwendungen und GUI-Umgebungen, die bereits dafür geschrieben wurden.
quelle
dfbg
dem ich ein Bild dort ablegen kann (und es nach Abschluss nicht wie folgt entferntfbi
). Ich weiß , dass ich wahrscheinlich ein Dienstprogramm finde ein .png oder ähnliches aus einem Block Text so könnte dies nur Arbeit ... zu schaffenMehrere Personen haben die Teile Ihrer Frage beantwortet, die sich mit dem Kernel befassen und Bilder (anstatt Text) in den Framebuffer einfügen. Der Rest bleibt jedoch unberücksichtigt. Ja, Sie können das Kernel-Subsystem für virtuelle Terminals verwenden, um eine sogenannte Framebuffer-Konsole zu erstellen . Es gibt jedoch mehrere Tools, mit denen Sie das Framebuffer-Gerät verwenden können, um virtuelle Terminals im Benutzerbereich zu erstellen . Diese schließen ein:
console-terminal-emulator
und dieconsole-fb-realizer
Tools in nosh - ein virtuelles User-Space- Terminal zur Replikation von virtuellen Linux- und FreeBSD / PC-BSD-Kernel-Terminals. Es hat auch keine Abhängigkeiten von X-Bibliotheken.logind
Server in systemd und dessen Begriffen von "Sitzen" verbunden ist.Insbesondere Ali Gholami Rudi hat mehr als nur einen Terminal-Emulator für Framebuffer-Arbeiten entwickelt. Er hat auch einen Direct-to-Framebuffer-PDF-Viewer, einen VNC-Viewer, einen Media-Player und einen Koran-Reader geschrieben.
Ein vollständiger Vergleich von Seite zu Seite ist nicht Gegenstand dieser Antwort. Aber hier sind einige Punkte, die für die Frage relevant sind:
fbpad
und die nosh-Tools von Entwurf verwenden keine X-Bibliotheken.bdftobogl
Tool konvertiert man BDF-Schriften in BOGL-Schriften . und man konvertiert TTF in die "tinyfont" -Schriften, die von fbpad mit dem ft2tf ( Arch ) -Tool verwendet werden.console-fb-realizer
Tool verwendet dieselben "vt" -Schriften wie das neue FreeBSD 10.1-Kernel-Subsystem für virtuelle Terminals und teilt sich daher das FreeBSD-Werkzeugvtfontcvt
zur Schriftmanipulation zum Konvertieren von BDF-Schriften.console-convert-kbdmap
Tool werden BSD-kbdmap-Dateien in dieses Format konvertiert . Auch diese kbdmap-Dateien werden mit dem FreeBSD / PC-BSD vt-Subsystem verwendet .login
./etc/ttys
(BSD),/etc/inittab
(Linux-System 5init
) oder ein anderes System entwickelt, auf das sie das Spawnen von getty / login / shell übertragen.console-fb-realizer
Benötigt nur genügend Berechtigungen zum Öffnen des Framebuffers und der Eingabeereignisgeräte, bei denen es sich nicht um Superuser-Berechtigungen handeln muss, und zum Zugriff auf die von verwalteten FIFOs und gewöhnlichen Dateienconsole-terminal-emulator
, für die wiederum überhaupt keine besonderen Berechtigungen erforderlich sind.All dies sind natürlich Terminal-Emulatoren . Wenn Sie die Terminal-Emulation entfernen und Text direkter in den Framebuffer einfügen möchten, haben Sie einige Möglichkeiten:
console-terminal-emulator
.console-fb-realizer
Verwendet eine Anzeigedatei mit einem Zeichenzellenarray wie/dev/vcsa*
eine normale Datei (keine Zeichenspezialgerätedatei) und mit Unicode-Codepunkten, ECMA-48-Attributen und 24-Bit-RGB-Farbe. Man kann es also starten und einfach Zeichen + Attribut + Farbe direkt in die Zeichenzellen-Array-Datei schreiben, wobeiconsole-fb-realizer
die Schriftart im Framebuffer gerendert wird.Nebenbei bemerkt : Beachten Sie, dass dies das Gegenteil von der Integration in BRLTTY ist , das verwendet
console-terminal-emulator
, aber nicht ausgeführt wirdconsole-fb-realizer
.quelle
fbcon
- abhängig von den Kompilierungsoptionen . Dies gilt auch für den abhängigen Terminalemulator. Terminologie : Funktioniert direkt im Linux-Framebuffer (fbcon) . Abgesehen davon, stimmeterminology
ich derkmscon
(und anderen Arbeit von David Herrmann) Empfehlung selbst zu .Wenn du
/dev/urandom > /dev/fb0
zufällige Pixel auf dem Bildschirm sehen und sehen kannst, hast du alles, was du brauchst.In meinem Fall musste ich einige Textinformationen ausgeben. Ich habe dies in busybox und raspi getestet, damit es bei Ihnen funktioniert. Die Antwort könnte etwas lang sein, da Sie, wenn Sie keine Konsole verwenden, die Pixel der Zeichen selbst drucken müssen. Zum Glück hat jemand die harte Arbeit geleistet, also müssen wir es einfach kombinieren.
In busybox oder in deinem raspi solltest du ein
fbset
binär haben. Dies kann Ihnen helfen, Ihre Einstellungen als Bildschirmabmessungen zu ermitteln.In meinem Embedded sieht das so aus:
Der wichtige Teil hier ist die Breite 480 und Höhe 272 Pixel.
Wie du erwähnt hast, kannst du den Bildschirm mit erfüllen
cat /dev/urandom > /dev/fb0
und Sie können es mit löschen
cat /dev/zeros > /dev/fb0
Dann müssen wir sicherstellen, dass Sie die richtigen Abmessungen haben.
Zufällig hatte meine Busybox eine fbsplash-Binärdatei, die als Eingabe eine .ppm-Datei erhielt.
Richtig, wenn ich falsch liege, aber es scheint, dass
fb0
dieses Format akzeptiert wird. Wenn man sich Portable Anymap auf Wikipedia ansieht , gibt es mehrere "Unterformate" ... fbsplash verwendet ein ausgefallenes Format mit Farbe und so weiter ... aber wir möchten in der Lage sein, einfach etwas Lesbares zu drucken. Verwenden wir der Einfachheit halber das in ASCII codierte P1. Wenn wir eine vertikale Linie drucken könnten, würden wir wissen, dass unsere Abmessungen korrekt sind. Lass es uns versuchen:Eine vertikale Linie in einem ppm-Typ P1 sollte folgendermaßen aussehen:
Es wird also 272 Zeilen mit einer Breite von 959 Zeichen geben. Die Dokumentation sagt, es sollte 1 anstelle von f sein ... auf busybox und raspi f war heller.
Es ist wichtig, dass nach den Nullen kein Leerzeichen steht. Diese Aufgabe kann etwas langwierig sein. Verwenden Sie besser einen Texteditor, der Ihnen hilft. In vim können Sie die ersten beiden Zeilen kopieren, in den Befehlsmodus (esc) wechseln und die folgenden Zeichen eingeben:
Natürlich verwende ich meine Dimensionen, du solltest deine verwenden. Um diese Datei zu verschieben
/dev/fb0
, sollte es so aussehen:Ok, ich betrüge ... es ist nicht nur eine Zeile da ... es ist ungefähr 8 ... aber wenn es nicht funktioniert (wir haben falsche Dimensionen oder wir haben Platz am Ende, nur eine Zeile zu haben ist viel einfacher).
Wenn Sie so weit gekommen sind, müssen wir nur die richtigen Pixel drucken, um Zeichen zu sehen. Dank Marcel Sondaar und seinem Repo auf GitHub müssen wir nicht jeden Char ziehen.
Mit einem kleinen Kniff erweitert man sein einfaches Programm, um
f
anstelle vonX
und0
anstelle von Leerzeichen Leerzeichen zwischen die einzelnen Zeichen einzufügen, den Header hinzuzufügen und eine PPM-Datei mit dem Buchstaben zu erstellen, der dem Zeichencode entspricht.Ein kleiner Schritt weiter und Sie erhalten kein Zeichen als Eingabe, sondern eine Zeile. Rufe eine Datei auf, rufe dein Programm auf und gib sie aus
/dev/fb0
und du bekommst eine Textausgabe:Ich teste diese Lösung auch auf einem Himbeer-Pi und es hat funktioniert. Das System teilt mir mit, dass ich keinen Ruf habe, mehr als 2 Links zu posten. Bis ich das bekomme, musst du dich auf mein Wort verlassen: D
quelle
Auf der Konsolenseite können Sie Echo-Meldungen an
/dev/console
oder Syslog verwenden. Abhängig von verschiedenen anderen Einstellungen wird dies möglicherweise auf der Konsole angezeigt.Für Bilder habe ich gerade versucht, eine BMP-Datei in fb0 zu catting und es hat tatsächlich funktioniert! (sortof - mehrere Kopien, kleinere Größe)
Ich habe hier ein BMP-to-Framebuffer-Programm gefunden . Das sollte ein perfektes Beispiel für das Format sein, das die fb0 erwartet. Es gibt auch
fbi
ein Programm zum direkten Schreiben in den Bildspeicher.quelle
fbi
Ermöglicht es mir, ein Bild auf den Bildschirm zu bringen, was nützlich ist, aber es löscht den Framebuffer, sobald er beendet wird.Es ist ein alter Beitrag, aber ich verstehe, dass Sie normalerweise eine Framebuffer-Konsole (fbcon) benötigen, um die Konsole auf dem Framebuffer laufen zu lassen. Es ist in der Konfiguration. (Gerätetreiber / Grafik / Konsolenanzeige ..)
quelle