Gráficos Linux de bajo nivel

11

Con fines educativos, me gustaría escribir una aplicación en un entorno Linux que pueda procesar eventos de teclado y dibujar gráficos sin grandes dependencias como X o SDL. Supongo que esto debe ser posible, porque X y SDL son solo programas en sí mismos, por lo que deben confiar en otros métodos inherentes al entorno. ¿Es correcto este entendimiento?

Si es así, ¿dónde podría aprender a escribir dicho programa? Mi experiencia limitada me dice que implicaría hacer llamadas al núcleo y / o escribir en archivos especiales; sin embargo, no he podido encontrar ningún tutorial sobre el tema (ni siquiera estoy seguro de qué hacer con Google).

Además, en caso de que sea relevante, estoy ejecutando Debian Squeeze en Virtualbox. He usado un cd netinst sin red, por lo que no hay mucho instalado actualmente. Lo instalaré gcc, pero espero poder sobrevivir sin nada más.

math4tots
fuente
No sé si esto es lo que estás buscando, pero da color. ncurses
Joe
Es posible que desee echar un vistazo a Linux Framebuffer .
Mouviciel
Además de X y fbdev, también está SVGALib, que no se ha actualizado desde 2001.
user16764
Si realmente desea hacer una programación básica (por ejemplo, llamar a una interrupción para configurar el modo de video), ¿puedo sugerir DOS?
user16764
Esto parece útil: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Respuestas:

13

X (o el sistema X Window ) es prácticamente la API de gráficos de más bajo nivel que una aplicación Linux probablemente usará en un escritorio Linux moderno. La mayoría de las aplicaciones ni siquiera se molestarán en ir tan profundo y en su lugar usarán una implementación de kit de herramientas GUI como GTK o Qt.

Debajo de eso solo están los controladores de hardware y probablemente algunas API X-internas para los controladores. Pero esos no están diseñados o diseñados para ser utilizados por aplicaciones normales de espacio de usuario.

Podría usar el dispositivo kernel framebuffer (fbdev), pero no sé qué tan bien es compatible con la API de gráficos moderna.

Editar: Wayland es una alternativa a X que solo recientemente ha encontrado alguna adopción convencional. Ahora es posible ejecutar un escritorio Linux únicamente en Wayland sin ningún sistema X-Windows ejecutándose. Wayland en sí depende de un controlador EGL debajo (una API fuertemente relacionada con OpenGL).

Joachim Sauer
fuente
2
X puede usar el framebuffer. GTK y Qt, aunque generalmente apuntan a X, también pueden apuntar al framebuffer.
Programador
@AProgrammer: eso es cierto, pero realmente no cambia mi respuesta. La mayoría de las aplicaciones GTK / Qt se ejecutan en X como en el marco subyacente (al menos por ahora) y casi ninguna aplicación utiliza directamente la API X sin procesar.
Joachim Sauer
El framebuffer debería, como mínimo, admitir la ejecución de la tarjeta gráfica en los modos VESA estándar. Puede que no sea perfecto (el número de resoluciones diferentes es limitado, por ejemplo, y no creo que se admitan modos de pantalla panorámica), pero le proporcionará gráficos en un sistema Linux con un número mínimo de dependencias.
un CVn
9

Si desea obtener eventos de entrada sin usar X, deberá leerlos desde los nodos del dispositivo. Linux tiene un subsistema de entrada genérico llamado evdev que la mayoría de los controladores aprovechan. Entonces, para leer eventos de entrada, puede leer desde cualquiera de los nodos del dispositivo en / dev / input.

Un truco fácil para encontrar el nodo del dispositivo del mouse es ejecutar "cat" en los nodos del dispositivo uno a la vez, moviendo el mouse durante cada "cat". Si ve datos que salen a la pantalla, entonces ese es el nodo de su dispositivo de mouse. El archivo de encabezado relevante es linux / input.h. Para ver un ejemplo de cómo usarlo, consulte la fuente del controlador xevdev.

Para la manipulación de gráficos de bajo nivel, si realmente se siente ambicioso, generalmente puede mapear la memoria del framebuffer y hacer sus propios bit blts.

ssgriffonuser
fuente
3

Aquí hay un buen tutorial para gráficos de bajo nivel en Linux .

Aquí está disponible una buena publicación sobre el desbordamiento de pila para la entrada de bajo nivel .

De todos modos, probablemente desee usar framebuffer o drm / kms (framebuffer es el más simple de los dos) para gráficos y evdev para entrada directa en Linux.

Realidad
fuente
¿Por qué el voto negativo?
Vreality