Graphiques Linux de bas niveau


11

À des fins éducatives, je voudrais écrire une application sur un environnement Linux qui peut traiter les événements du clavier et dessiner des graphiques sans énormes dépendances comme X ou SDL. Je suppose que cela doit être possible, car X et SDL ne sont que des programmes eux-mêmes, ils doivent donc s'appuyer sur d'autres méthodes inhérentes à l'environnement. Cette compréhension est-elle correcte?

Si oui, où pourrais-je apprendre à écrire un tel programme? Mon expérience limitée me dit que cela impliquerait de faire des appels au noyau et / ou d'écrire dans des fichiers spéciaux; cependant, je n'ai pas pu trouver de tutoriels sur le sujet (je ne sais même pas quoi faire de Google).

De plus, au cas où cela serait pertinent, j'utilise Debian Squeeze sur Virtualbox. J'ai utilisé un cd netinst sans réseau, donc il n'y en a pas beaucoup installé actuellement. Je vais installer gcc, mais j'espère pouvoir m'en tirer sans plus.


Je ne sais pas si c'est ce que vous cherchez mais ça donne de la couleur. ncurses
Joe

Vous voudrez peut-être jeter un œil au Framebuffer Linux .
mouviciel

En plus de X et fbdev, il y a aussi SVGALib, qui n'a pas été mis à jour depuis 2001.
user16764

Si vous voulez vraiment faire de la programmation bare-metal (par exemple, appeler une interruption pour définir le mode vidéo), puis-je suggérer DOS?
user16764

Réponses:


13

X (ou le système X Window ) est pratiquement l'API graphique la plus bas niveau qu'une application Linux utilisera probablement sur un bureau Linux moderne. La plupart des applications ne prendront même pas la peine d'aller aussi loin et utiliseront plutôt une implémentation de boîte à outils GUI comme GTK ou Qt.

En dessous, il n'y a que les pilotes matériels et probablement quelques API X-internes pour les pilotes. Mais ceux-ci ne sont pas destinés ou conçus pour être utilisés par les applications normales de l'espace utilisateur.

Vous pouvez utiliser le périphérique framebuffer du noyau (fbdev), mais je ne sais pas si cela prend en charge l'API graphique moderne.

Edit: Wayland est une alternative à X qui n'a que récemment trouvé une certaine adoption générale. Il est maintenant possible d'exécuter un Linux-Desktop uniquement sur Wayland sans aucun système X-Windows en cours d'exécution. Wayland lui-même dépend d'un pilote EGL en dessous (une API fortement liée à OpenGL).


2
X est capable d'utiliser le framebuffer. GTK et Qt, tout en ciblant généralement X, sont également capables de cibler le framebuffer.
Programmeur

@AProgrammer: c'est vrai, mais cela ne change pas vraiment ma réponse. La plupart des applications GTK / Qt fonctionnent sur X comme dans le cadre sous-jacent (au moins pour l'instant) et presque aucune application n'utilise directement l'API X brute.
Joachim Sauer

Le framebuffer devrait, à tout le moins, prendre en charge l'exécution de la carte graphique dans les modes VESA standard. Il n'est peut-être pas parfait (le nombre de résolutions différentes est limité, par exemple, et je ne pense pas que les modes écran large soient pris en charge), mais il vous donnera des graphiques sur un système Linux avec un nombre minimum de dépendances.
un CVn

9

Si vous souhaitez obtenir des événements d'entrée sans utiliser X, vous devrez les lire à partir des nœuds de périphérique. Linux a un sous-système d'entrée générique appelé evdev dont la plupart des pilotes profitent. Ainsi, pour lire les événements d'entrée, vous pouvez lire à partir de n'importe quel nœud de périphérique dans / dev / input.

Une astuce simple pour trouver le nœud du périphérique de la souris consiste à exécuter "cat" sur les nœuds du périphérique un par un, en déplaçant la souris pendant chaque "chat". Si vous voyez des données sortir à l'écran, c'est le nœud de votre périphérique de souris. Le fichier d'en-tête pertinent est linux / input.h. Pour un exemple d'utilisation, regardez la source du pilote xevdev.

Pour la manipulation graphique de bas niveau, si vous vous sentez vraiment ambitieux, vous pouvez généralement mapper la mémoire du framebuffer et faire vos propres bit blts.


3

Un bon tutoriel pour les graphiques de bas niveau sur Linux est disponible ici .

Un bon article sur le débordement de pile pour les entrées de bas niveau est disponible ici .

Quoi qu'il en soit, vous voudrez probablement utiliser framebuffer ou drm / kms (framebuffer étant le plus simple des deux) pour les graphiques et evdev pour une entrée directe sur Linux.


Pourquoi le downvote?
Vreality
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.