Low-Level-Linux-Grafik


11

Zu Bildungszwecken möchte ich eine Anwendung in einer Linux-Umgebung schreiben, die Tastaturereignisse verarbeiten und Grafiken ohne große Abhängigkeiten wie X oder SDL zeichnen kann. Ich gehe davon aus, dass dies möglich sein muss, da X und SDL nur Programme selbst sind und sich daher auf andere Methoden stützen müssen, die der Umgebung eigen sind. Ist dieses Verständnis richtig?

Wenn ja, wo könnte ich lernen, ein solches Programm zu schreiben? Meine begrenzte Erfahrung zeigt mir, dass es erforderlich wäre, den Kernel aufzurufen und / oder in spezielle Dateien zu schreiben. Ich konnte jedoch keine Tutorials zu diesem Thema finden (ich bin mir nicht einmal sicher, was ich bei Google tun soll).

Falls es relevant ist, führe ich Debian Squeeze auf Virtualbox aus. Ich habe eine netinst-CD ohne Netzwerk verwendet, daher ist derzeit nicht viel darauf installiert. Ich werde installieren gcc, aber ich hoffe, dass ich mit nichts mehr auskommen kann.


Ich weiß nicht, ob Sie danach suchen, aber es gibt Farbe. ncurses
Joe

Vielleicht möchten Sie einen Blick auf den Linux-Framebuffer werfen .
Mouviciel

Neben X und fbdev gibt es auch SVGALib, das seit 2001 nicht mehr aktualisiert wurde.
user16764

Wenn Sie wirklich Bare-Metal-Programmierung durchführen möchten (z. B. einen Interrupt aufrufen, um den Videomodus einzustellen), kann ich DOS vorschlagen?
user16764

Dies sieht hilfreich aus: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Antworten:


13

X (oder das X Window System ) ist praktisch die einfachste Grafik-API, die eine Linux-Anwendung wahrscheinlich auf einem modernen Linux-Desktop verwenden wird. Die meisten Anwendungen werden sich nicht einmal die Mühe machen, so tief zu gehen, sondern stattdessen eine GUI-Toolkit-Implementierung wie GTK oder Qt verwenden.

Darunter befinden sich nur die Hardwaretreiber und wahrscheinlich einige X-interne APIs für die Treiber. Diese sind jedoch nicht für die Verwendung durch normale Userspace-Anwendungen gedacht oder vorgesehen.

Sie könnten das Kernel-Framebuffer-Gerät (fbdev) verwenden, aber ich weiß nicht, wie gut dies die moderne Grafik-API unterstützt.

Bearbeiten: Wayland ist eine Alternative zu X, die erst kürzlich eine allgemeine Akzeptanz gefunden hat. Es ist jetzt möglich, einen Linux-Desktop nur auf Wayland auszuführen, ohne dass ein X-Windows-System ausgeführt wird. Wayland selbst hängt von einem darunter liegenden EGL- Treiber ab (eine API, die stark mit OpenGL verwandt ist).


2
X kann den Framebuffer verwenden. GTK und Qt zielen normalerweise auf X ab, können aber auch auf den Framebuffer abzielen.
AProgrammer

@ AProgrammer: Das stimmt, aber es ändert nichts an meiner Antwort. Die meisten GTK / Qt-Anwendungen werden auf X wie im zugrunde liegenden Framework ausgeführt (zumindest vorerst), und fast keine Anwendungen verwenden die Raw-X-API direkt.
Joachim Sauer

Der Framebuffer sollte zumindest die Ausführung der Grafikkarte in den Standard-VESA-Modi unterstützen. Es ist möglicherweise nicht perfekt (die Anzahl der verschiedenen Auflösungen ist beispielsweise begrenzt, und ich glaube, dass keine Breitbildmodi unterstützt werden), aber es gibt Ihnen Grafiken auf einem Linux-System mit einer minimalen Anzahl von Abhängigkeiten.
ein CVn

9

Wenn Sie Eingabeereignisse ohne Verwendung von X abrufen möchten, müssen Sie diese aus Geräteknoten auslesen. Linux hat ein generisches Eingabesubsystem namens evdev, das die meisten Treiber nutzen. Um Eingabeereignisse zu lesen, können Sie von jedem der Geräteknoten in / dev / input lesen.

Ein einfacher Trick, um den Mausgeräteknoten zu finden, besteht darin, "cat" einzeln auf den Geräteknoten auszuführen und die Maus während jeder "cat" zu bewegen. Wenn Daten auf dem Bildschirm angezeigt werden, ist dies Ihr Mausgeräteknoten. Die relevante Header-Datei ist linux / input.h. Ein Beispiel für die Verwendung finden Sie in der Quelle für den xevdev-Treiber.

Wenn Sie sich bei ehrgeizigen Grafikmanipulationen wirklich ehrgeizig fühlen, können Sie den Framebuffer im Allgemeinen im Speicher abbilden und Ihre eigenen Bit-Blts erstellen.


3

Ein gutes Tutorial für Low-Level-Grafiken unter Linux finden Sie hier .

Ein guter Beitrag zum Stapelüberlauf für Eingaben auf niedriger Ebene ist hier verfügbar .

Unabhängig davon möchten Sie wahrscheinlich Framebuffer oder drm / kms (Framebuffer ist der einfachere von beiden) für Grafiken und evdev für die direkte Eingabe unter Linux verwenden.


Warum das Downvote?
Unwirklichkeit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.