Grafica Linux di basso livello


11

A scopo educativo, vorrei scrivere un'applicazione su un ambiente Linux in grado di elaborare eventi da tastiera e disegnare grafica senza enormi dipendenze come X o SDL. Presumo che ciò debba essere possibile, poiché X e SDL sono solo dei programmi stessi, quindi devono fare affidamento su altri metodi inerenti all'ambiente. Questa comprensione è corretta?

In tal caso, dove potrei imparare a scrivere un programma del genere? La mia esperienza limitata mi dice che implicherebbe effettuare chiamate al kernel e / o scrivere su file speciali; tuttavia, non sono stato in grado di trovare alcun tutorial sull'argomento (non sono nemmeno sicuro di cosa fare a Google).

Inoltre, nel caso sia rilevante, sto eseguendo Debian Squeeze su Virtualbox. Ho usato un cd netinst senza rete, quindi al momento non è installato molto su di esso. Installerò gcc, ma spero di riuscire a cavarmela con nient'altro.


Non so se questo è ciò che stai cercando, ma dà colore. ncurses
Joe,

Potresti dare un'occhiata al Framebuffer di Linux .
mouviciel,

Oltre a X e fbdev, c'è anche SVGALib, che non è stato aggiornato dal 2001.
user16764

Se vuoi davvero fare una programmazione bare metal (es. Chiamare un interrupt per impostare la modalità video), posso suggerire DOS?
user16764,

Risposte:


13

X (o X Window System ) è praticamente l'API grafica più di basso livello che un'applicazione Linux probabilmente utilizzerà su un moderno desktop Linux. La maggior parte delle applicazioni non si preoccuperà nemmeno di andare così in profondità e utilizzerà invece un'implementazione del toolkit GUI come GTK o Qt.

Di seguito sono riportati solo i driver hardware e probabilmente alcune API X interne per i driver. Ma quelli non sono pensati o progettati per essere utilizzati dalle normali applicazioni dello spazio utente.

È possibile utilizzare il dispositivo framebuffer del kernel (fbdev), ma non so quanto supporti le moderne API grafiche.

Modifica: Wayland è un'alternativa a X che solo di recente ha trovato l'adozione tradizionale. Ora è possibile eseguire un desktop Linux esclusivamente su Wayland senza alcun sistema X-Windows in esecuzione. Wayland stesso dipende da un driver EGL sottostante (un'API fortemente correlata a OpenGL).


2
X è in grado di utilizzare il framebuffer. GTK e Qt, mentre di solito prendono di mira X, sono anche in grado di colpire il framebuffer.
AProgrammer,

@AProgrammer: è vero, ma in realtà non cambia la mia risposta. La maggior parte delle applicazioni GTK / Qt funzionano su X come nel framework sottostante (almeno per ora) e quasi nessuna applicazione utilizza direttamente l'API X non elaborata.
Joachim Sauer,

Il framebuffer dovrebbe almeno supportare l'esecuzione della scheda grafica nelle modalità VESA standard. Potrebbe non essere perfetto (il numero di diverse risoluzioni è limitato, ad esempio, e non credo che siano supportate modalità widescreen), ma ti darà grafica su un sistema Linux con un numero minimo di dipendenze.
un CVn il

9

Se desideri ottenere eventi di input senza usare X, dovrai leggerli dai nodi del dispositivo. Linux ha un sottosistema di input generico chiamato evdev di cui la maggior parte dei driver ne approfitta. Quindi, per leggere gli eventi di input, puoi leggere da qualsiasi nodo del dispositivo in / dev / input.

Un trucco semplice per trovare il nodo del dispositivo mouse è eseguire "cat" sui nodi del dispositivo uno alla volta, spostando il mouse durante ciascun "gatto". Se vedi i dati che vengono visualizzati sullo schermo, questo è il nodo del dispositivo del mouse. Il file di intestazione rilevante è linux / input.h. Per un esempio di come usarlo, guarda l'origine per il driver xevdev.

Per manipolazioni grafiche di basso livello, se ti senti davvero ambizioso, puoi generalmente mappare la memoria del framebuffer e fare i tuoi bit blts.


3

Un buon tutorial per la grafica di basso livello su Linux è disponibile qui .

Un buon post su overflow dello stack per input di basso livello è disponibile qui .

Indipendentemente da ciò, probabilmente si desidera utilizzare framebuffer o drm / kms (framebuffer è il più semplice dei due) per la grafica e evdev per l'input diretto su Linux.


Perché il downvote?
Vreality
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.